Dortmund dominated the first half in the English capital, but the Bundesliga outfit were made to pay for missed opportunities, as Carvajal headed Los Blancos ahead before Vinicius secured the win for Los Blancos late on.
Real Madrid have won the European Cup for the 15th time in their history, while it is a fifth Champions League title as manager for the Spanish outfit's head coach Carlo Ancelotti.
HIGHLIGHTS
12th min: Real Madrid have the first sight of goal in the final, as Federico Valverde works a yard of space outside the box, but his strike was always rising over the Dortmund crossbar.
14th min: Dortmund have the first big chance of the match through Julian Brandt, but the attacker can only place his effort wide of the far post under pressure.
15th min: Vinicius misses the crossbar with an effort from outside the box.
21st min: Karim Adeyemi, after some wonderful movement, breaks through into the Real Madrid box before rounding Real Madrid goalkeeper Thibaut Courtois, but he takes it too wide, and Carvajal gets back to make the block.
23rd min: Dortmund have a shout for a penalty as Adeyemi goes down inside the box; Niclas Fullkrug then hits the post after being released by Ian Maatsen inside the penalty box.
28th min: Courtois makes a smart save to deny Adeyemi after the forward's pace had again seen him break into a dangerous position, before Fullkrug fails to make a proper connection on the rebound.
41st min: Courtois gets down well to keep out a strike from Nico Schlotterbeck.
HALF TIME: DORTMUND 0-0 REAL MADRID:
49th min: Toni Kroos's bending free kick has to be kept out by Dortmund goalkeeper Gregor Kobel, and Carvajal then heads over from the resulting corner.
57th min: Ian Maatsen manages to block a shot from Carvajal into the arms of Kobel, with Real Madrid having another decent opening in the second period.
63rd min: Courtois stands strong to keep out a header from Fullkrug, who had thrown himself at a dangerous cross from Adeyemi.
69th min: Real Madrid come close to taking the lead as Vinicius delivers a dangerous cross into the Dortmund box, Bellingham almost makes contact, but it drifts just wide of the post.
74th min: GOAL! DORTMUND 0-1 REAL MADRID (CARVAJAL)
Real Madrid make the breakthrough in the 74th minute of the final, as Carvajal brilliantly heads a corner from Kroos into the back of the net from close range.
77th min: Bellingham has a brilliant chance to send Real Madrid 2-0 ahead, but his effort from inside the box is deflected wide of the post by Dortmund's Schlotterbeck.
80th min: Kobel jumps across his goal to keep out a free kick from Kroos.
81st min: Kobel is again called into action, this time keeping out Eduardo Camavinga, with the Frenchman looking to pick out the top corner.
82nd min: Kobel again, with the goalkeeper brilliantly denying Nacho.
83rd min: GOAL! DORTMUND 0-2 REAL MADRID (VINICIUS)
Real Madrid double their advantage on the night, as Vinicius picks out the far corner, having been released by Bellingham inside the Dortmund box.
85 min: Kroos is given a standing ovation, as the midfielder leaves the field as a Real Madrid player for the final time. What a performance from the German!
87th min: Fullkrug has the ball in the back of the Real Madrid net from a Donyell Malen cross, but it is quickly disallowed for offside.
FULL TIME: DORTMUND 0-2 REAL MADRID
MAN OF THE MATCH - DANI CARVAJAL
Carvajal had a tricky first half against Dortmund, largely due to the pace of Adeyemi, but he made an excellent block to prevent the forward from having a shot on Courtois's goal, and he later came up with a huge moment down the other end of the field.
Not too many would have predicted that the Spain international would make the breakthrough, certainly not from a header, but he found the back of the net from a Kroos corner in the 74th minute.
The 32-year-old had three shots in total, while he also finished with a pass success rate of 82% during a brilliant performance, and he was the player carrying the fight for Real Madrid in the second period when the Spanish giants were navigating their way through a difficult spell.
STANDOUT MOMENT
Kroos left the field to a standing ovation in the 86th minute, with the midfielder saying goodbye to Real Madrid in the perfect fashion.
There was a real sense of emotion inside the stadium when his number was called, and it was the perfect way for the 34-year-old to go out, also leaving with a Champions League final assist to his name.
Kroos will now represent Germany at Euro 2024 before hanging up his boots, with the midfielder recently calling time on what has been a truly remarkable career at the top of European football.
BEST STATS
MATCH STATS
Possession: Borussia Dortmund 47%-53% Real Madrid
Shots: Borussia Dortmund 12- 13 Real Madrid
Shots on target: Borussia Dortmund 3-6 Real Madrid
Corners: Borussia Dortmund 9-8 Real Madrid
Fouls: Borussia Dortmund 11-8 Real Madrid
LINEUPS
BORUSSIA DORTMUND (4-2-3-1): Kobel; Ryerson, Hummels, Schlotterbeck, Maatsen; Can (Malen 80'), Sabitzer; Sancho (Bynoe-Gittens 87'), Brandt (Haller 80'), Adeyemi (Reus 72'); Fullkrug
REAL MADRID (4-3-1-2): Courtois; Carvajal, Rudiger, Nacho, Mendy; Valverde, Camavinga, Kroos (Modric 85'); Bellingham (Joselu 85'); Rodrygo (Militao 91'), Vinicius (Lucas 94')