Batting first, RCB piled on an imposing 221 for 5. Virat Kohli anchored the innings with a stylish 67, while Rajat Patidar smashed a quickfire 64.
Devdutt Padikkal chipped in with 37 as he and Kohli stitched together a crucial 91-run partnership.
Jitesh Sharma provided a late blitz, hammering 40 from just 19 deliveries.
Phil Salt fell early to Trent Boult for 4, and Liam Livingstone endured a forgettable outing with a two-ball duck.
In reply, MI put up a spirited chase, eventually finishing at 209 for 9. Tilak Varma led the charge with a blistering 56 off 29 balls, while Hardik Pandya nearly stole the show, blasting 42 from just 15 deliveries - including three boundaries and four towering sixes. The pair combined for a rapid 89-run stand in just 34 balls, keeping MI in the hunt.
With 28 required from the final 12 balls, Mitchell Santner briefly raised MI hopes with a six off Josh Hazlewood, but was caught at long-off soon after.
Krunal Pandya, surprisingly given the final over for RCB, held his nerve superbly, conceding just nine runs and picking up three wickets with his left-arm spin.
Jasprit Bumrah made his return from a back injury for MI, bowling tidily to finish with figures of 0 for 29, the only bowler on his side to maintain an economy under 10.