Match ends, Aston Villa 1, Norwich City 2.
Norwich City goalkeeper Tim Krul said wrapping up the Championship title with victory at play-off bound Aston Villa "means so much" to the club.
The promoted Canaries only needed a point to be crowned champions but their result was essentially meaningless as second-placed Sheffield United - who required a win for any chance of leapfrogging them - were held at Stoke.
The league's golden boot winner Teemu Pukki prodded in his 29th goal of the season to put Norwich ahead before Villa replied when Jonathan Kodjia flicked home Conor Hourihane's low free-kick.
Both sides threatened a winner in a free-flowing game before Jamal Lewis burst forward to find Mario Vrancic, who slotted into the bottom corner for Daniel Farke's side.
"Promotion is the most important thing but to actually win it and to have a gold medal, we'll look back at this in 20-30 years," Krul told BBC Radio Norfolk.
"I was fortunate enough to do it nine years ago with Newcastle and to sit here now and to lift the trophy, I just said [to team-mates] 'take it, because it doesn't happen very often."
The Netherlands keeper, 31, who played every minute in the league this season, said: "There were a lot of people who wrote me off and said 'he can't play more than 20 games any more', and I was so eager to show people that was utter rubbish."
Norwich finish the season with 94 points, five clear at the top, while fifth-placed Villa - who suffered their first defeat since mid-February - will now face West Midlands rivals West Bromwich Albion in the play-offs, hosting the first leg next Saturday (11 May).
Dean Smith's hosts made five changes - leaving out top scorer Tammy Abraham, playmaker Jack Grealish and key midfielder John McGinn - as Villa turned their attention to a second successive play-off campaign.
An excellent through ball from Kenny McLean - who later went off injured - was the catalyst for Norwich's opener, Onel Hernandez cutting back for Finland striker Pukki to convert.
Villa's Kodjia showed good movement to escape his marker for a third goal in his last four games, then Hernandez struck the bar for the visitors.
Norwich had the better of the second half, Jamal Lewis curling wide and Marco Stiepermann forcing a low save from Jed Steer, before Vrancic's goal secured their fourth second-tier title.
It was also the first time the Canaries have completed a league double over Villa since 1992-93, when both clubs finished in the Premier League top three.
Aston Villa head coach Dean Smith told BBC WM:
"It was a good performance and I don't think we deserved to get beaten. I thought it was two even teams going at it, both good teams with the ball.
"Norwich started better than us, we couldn't get close to them and it took us 15 minutes to get going. After the equaliser I thought we were the better team for the rest of the first half but didn't make the most of our opportunities.
"The second half went a bit end-to-end but I thought a draw would have been a fair result. I'm disappointed the unbeaten run has come to and end but it was a good performance."
- 8LansburyBooked at 62minsSubstituted forBjarnasonat 80'minutes
- 26KodjiaSubstituted forDavisat 72'minutes
- 22El Ghazi
- 27El Mohamady
- 28L Kalinic
- 6ZimmermannBooked at 60mins
- 12LewisBooked at 78mins
- 23McLeanSubstituted forTetteyat 42'minutes
- 17BuendíaBooked at 29mins
- 18StiepermannSubstituted forLeitnerat 73'minutes
- 25HernándezSubstituted forHanleyat 90+2'minutes
- Peter Bankes
- Shots on Target
Second Half ends, Aston Villa 1, Norwich City 2.
Corner, Aston Villa. Conceded by Maximillian Aarons.
Substitution, Norwich City. Grant Hanley replaces Onel Hernández.
Foul by Emiliano Buendía (Norwich City).
Alan Hutton (Aston Villa) wins a free kick in the defensive half.
Attempt missed. Mario Vrancic (Norwich City) left footed shot from the left side of the box is just a bit too high following a corner.
Attempt missed. Jamal Lewis (Norwich City) header from the centre of the box misses to the right following a corner.
Corner, Norwich City. Conceded by Kortney Hause.
Goal! Aston Villa 1, Norwich City 2. Mario Vrancic (Norwich City) right footed shot from outside the box to the bottom left corner. Assisted by Jamal Lewis.
Attempt missed. Kortney Hause (Aston Villa) header from the centre of the box is just a bit too high. Assisted by Conor Hourihane with a cross following a corner.
Corner, Aston Villa. Conceded by Tim Krul.
Attempt saved. Albert Adomah (Aston Villa) right footed shot from outside the box is saved in the bottom right corner. Assisted by Keinan Davis.
Foul by Emiliano Buendía (Norwich City).
Alan Hutton (Aston Villa) wins a free kick on the right wing.
Substitution, Aston Villa. Birkir Bjarnason replaces Henri Lansbury.
Corner, Aston Villa. Conceded by Jamal Lewis.
Jamal Lewis (Norwich City) is shown the yellow card for a bad foul.
Foul by Jamal Lewis (Norwich City).
Henri Lansbury (Aston Villa) wins a free kick on the right wing.