Mumbai set Chennai a target of 150 after hitting 149-8 from 20 overs with Kieron Pollard top scoring with 41.
Shane Watson's 80 took Chennai to the verge of victory, but needing nine to win off the last over, he was run out.
That left Shardul Thakur needing two runs off the final ball but he was trapped lbw by Lasith Malinga.
Mumbai's victory also denied Chennai a fourth title and the chance of retaining the Indian Premier League after winning the 2018 edition, their first since a two-year ban for their part in a corruption scandal.
Malinga struggled earlier on by giving away 49 runs in his four overs but the last two overs by the Sri Lankan and fellow pace bowler Jasprit Bumrah, who took 2-14, were decisive.
West Indies batsman Pollard's unbeaten 41 off 25 balls, alongside Quinton de Kock's 29 helped set up the Mumbai total.