Aston Villa ran a taut ship defensively, obstructing Manchester City's attacking moves with some last-minute tackles and blocks. However, they wasted some good chances of their own in the second half.
With this result, Manchester City extended their winning run to six games in the league whereas Aston Villa are now winless in three.
Here are the Manchester City player ratings from the encounter.
Manchester City player ratings against Aston Villa
Ederson Moraes - 7/10
Manchester City's defence came up trumps when Aston Villa piled on the pressure in the final 15 minutes. Ederson Moraes produced a superb block in the second half to deny Douglas Luiz when the score was still 0-0.
Kyle Walker - N/A
Kyle Walker was injured early in the game and taken off.
John Stones - 6/10
John Stones' double in the last match had seemingly encouraged him to be more productive in the final third. He was visibly eager to add to his goal tally, but his pursuit caught him upfield a few times, especially on the counter.
Ruben Dias - 8/10
Ruben Dias continued his superb run of form for Manchester City with another stellar performance at the back. He made crucial blocks and interceptions to deny Aston Villa on numerous occasions.
Joao Cancelo - 7/10
Joao Cancelo was impressive on both ends of the pitch, especially so on the overlap. He almost scored a wonder goal shortly after the break.
Kevin De Bruyne - 7/10
Kevin De Bruyne was relatively subdued in terms of his offensive output but remained key to ball progression. He also laid three key passes.
Rodri - 7/10
Rodri struggled to cope with Aston Villa's pace at times but delivered at a crucial moment. He regained possession in the Villans' half and then set up Bernardo Silva for the opener.
Ilkay Gundogan - 7.5/10
Against any other side, Ilkay Gundogan could've easily had a hat-trick as he was denied by some last-ditch blocks on numerous occasions. However, the former Borussia Dortmund star gained redemption with a late penalty.
Bernardo Silva - 7/10
Bernardo Silva's first league goal of the season couldn't have come at a better time. He scored it brilliantly too, lashing an unstoppable effort into the top corner, giving Emiliano Martinez no chance.
Raheem Sterling - 6/10
This was not the best night for Raheem Sterling as he failed to muster a single effort on target.
Phil Foden - 7/10
This might have been one of Phil Foden's best performances this season without scoring. The 20-year-old was a menace throughout the game. Even though some of his efforts were blocked by the visitors, he was an exceptional creator on the night, laying six key passes.
Oleksandr Zinchenko - 6/10
Oleksandr Zinchenko replaced Walker in the first half but didn't contribute as much as Cancelo on the opposite flank.
Gabriel Jesus - 6/10
Gabriel Jesus came on to add some much-needed attacking impetus into the Manchester City team. However, he was largely anonymous.
Riyad Mahrez - 7/10
Riyad Mahrez's first cross was sent out of play but the second one helped win the penalty.