Atletico had threatened an incredible comeback, Saul Niguez’s powerful header and Antoine Griezmann’s penalty inside 16 minutes cutting Real’s aggregate lead to a solitary goal.
The hosts fed off a ferocious atmosphere for their final Champions League match at the Vicente Calderon before moving to the Wanda Metropolitano next season.
However, Isco’s away goal just before halftime settled Real’s nerves and left Atletico with too much to do to progress.
Cristiano Ronaldo’s first leg hat-trick ultimately proved decisive, and Real will seek to become the first side to defend the trophy in the Champions League era when they face Juventus in the final in Cardiff on May 3.
An already fierce rivalry between the Spanish giants has intensified in recent years by Real’s three Champions League victories over Atletico, including in the 2014 and 2016 finals.
Real fans had unfurled a huge banner that read “tell me how does it feel” ahead of the first leg. The home fans responded with their own “proud to not be like you” banner as a dig back ahead of kickoff in the return.
And Atletico’s players went a long way towards making amends for their meek display in the first leg eight days ago in a thrilling opening.
Real goalkeeper Keylor Navas denied Koke from close range and Fernando Torres headed over, before Jan Oblak made a brilliant save from Casemiro’s header at the other end.
Atletico got the goal they needed to get back into the tie 12 minutes in when Koke’s out-swinging corner was met powerfully by Saul for his fourth Champions League goal of the season.
Just three minutes later, Atletico truly believed they could pull off the most unlikely of comebacks when Fernando Torres was upended by Raphael Varane inside the box.
Griezmann had missed his previous two penalties against Real, including in last year’s Champions League final.
This time the French international found the net, albeit with a bit of fortune as Navas got a hand to his mis-hit spot-kick, but couldn’t keep it out.
Fierce challenges then rained in from both sides as Turkish referee Cuneyt Cakır struggled to keep control, with five players booked inside the opening 37 minutes.
However, Real regained their composure to get the vital away goal they needed for some extra breathing space just before halftime.
Karim Benzema somehow escaped the attention of three Atletico defenders on the by-line and cut the ball back for Toni Kroos.
Oblak made another brilliant stop to deny the German, but Isco followed up from close range to bundle the ball home.
Ronaldo had scored eight times in his previous three Champions League appearances, but the closest the World Player of the Year came to adding to his record 21 goals against Atletico was a driven free kick at the start of the second half that was beaten away by Oblak.
Atletico had their chances to put the tie back on a knife-edge as Navas produced an incredible double save from Yannick Carrasco and Kevin Gameiro.
The Costa Rican then got down low to his right to turn behind Griezmann’s low volley, and Gameiro failed to turn home another great opportunity from point-blank range.
A torrential thunderstorm disrupted the final stages, but lightning has now struck four times for Atletico against Real, and Zinedine Zidane’s side will head to Cardiff seeking a 12th European Cup.