Bernardo Silva broke the deadlock with a fine strike from the edge of the box in the 79th minute, with the goal allowed to stand despite Rodri having seemingly returned from an offside position to regain possession.
And Ilkay Gundogan wrapped things up shortly after from the spot, converting after Matty Cash had been penalised for handball.
Here's how the players from both sides fared.
✔️ GOOD PERFORMANCE
Bernardo Silva: 8.4
It may have come about in controversial circumstances, but Bernardo's opener was a moment of real quality worthy of settling any game.
The 26-year-old was otherwise impressive, too, completing three dribbles, 26 final third passes and taking two shots.
He also won nine of his 16 duels all evening.
❌ BAD PERFORMANCE
Ross Barkley: 5.7
Villa have every reason to believe they put in a performance worthy of at least a point but, that they came away with nothing owed much to wastefulness in dangerous areas.
Barkley was in part culpable for that, wasting some hugely promising situations and ending his 68-minute appearance having lost possession on 11 occasions.
Just one of his three shots tested Ederson in the City goal.
⭐ STAR MAN
His role in the opener was questioned by the pundits post-match but this was a strong showing from Rodri in the City midfield regardless.
The Spaniard won a simply incredible 15 of his 16 duels - including 9/9 aerials - across the 90 minutes to keep the hosts on the front foot.
He also created his team's only big chance of the game.