The two sides looked evenly matched throughout the first period, both enjoying their fair share of the possession and creating half-chances, but the Sky Blues were utterly dominant after the break.
Amid spells of nervy Shakhtar pressure, City created only a handful of chances before the break, though they came close to snatching the lead ahead of the referee's whistle when Fabian Delph picked out Leroy Sane and the Frenchman shot inches wide of the bottom corner from an acute angle.
The hosts raised their game in the second period and looked like a different side, taking the lead in the 48th minute when De Bruyne collected a pass from David Silva and bent an unstoppable curler beyond Andriy Pyatov in the Shakhtar goal to make it 1-0.
Sergio Aguero, who needed just one more goal to equal a City scoring record that has stood for 77 years, was denied that feat on 56 minutes when Pyatov thwarted him on the half-volley from close range.
The Argentine had another chance to make the history books from the penalty spot when Sane drew a foul from Ivan Ordets in the 71st minute, but the striker was once again denied by Pyatov, who guessed correctly and saved to his right.
City more than deserved their victory based on their second-half domination, but they left it late to seal the points, substitute Raheem Sterling burying Bernardo Silva's pull-back from close range in the final minute to kill off the match.
Only the second time City have won their first two opening group matches in the Champions League, the victory ensures side remain top of Group F with six points so far.