Goals from Croatian Mario Mandzukic after 60 minutes and Dutchman Arjen Robben, with a clever 89th-minute solo strike, settled a superb final after Dortmund had levelled with a 68th-minute penalty from Ilkay Gundogan.
APP:Champions League stats at your fingertips with Stats Zone, and it's completely FREE
The victory kept alive Bayern's hopes of a treble as they have already won the German league title and face VfB Stuttgart in the Cup final in Berlin next Saturday.
"It's a final, we were at the same level, we both had our chances," Robben told ZDF German TV.
"I was able to push the ball through at the end. It means a lot to me. It's still hard to fathom. I'll be able to put it in words later. There are so many emotions right now, it's incredible.
"So many people told me I'd score a goal tonight. the first few chances I missed. I got another chance at the end and took advantage of it."
The match, played at a ferocious pace, was full of superb attacking football and seemed destined for extra time until Robben burst through a gap in the defence and rounded outstanding Dortmund keeper Roman Weidenfeller to score.
Dortmund began at blistering pace which they maintained for almost 30 minutes with Marco Reus and Robert Lewandowski pulverising the Bayern defence.
Lewandowski had the first of their seven first-half scoring chances, powering in a 30-metre shot which goalkeeper Manuel Neuer turned over the bar for a corner.
Neuer also made a superb stop when he stuck out his left leg to prevent Jakub Blaszczykowski scoring from close range after he was set up by Lewandowski.
Bayern were virtually over-run at the start but battled back to create five good scoring chances of their own - three falling to Robben who could well have netted a hat-trick by halftime.
A poor touch scuppered the first when he had only Weidenfeller to beat, and the goalkeeper stopped him again by taking a shot straight in the face when Robben had the goal gaping just before the break.
Weidenfeller also stopped a powerful goalbound header from Mandzukic after 26 minutes, tipping his powerful effort on to the bar and over.
Both teams maintained the high tempo until the half-time break and the only surprise was that neither made the breakthrough after 45 breathtaking minutes of superb football.
The game continued to be end-to-end for most of the second half, but Bayern gradually took control as Dortmund faded.
The nature of the first two goals also reflected the see-saw game with Dortmund equalising just eight minutes after Bayern scored.
Robben was at the heart of that opening goal, providing the final cross for Mandzukic to sweep home with his left foot from close range but the lead only lasted eight minutes before Dante's rash challenge on Reus gave Dortmund the penalty from which
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.