Gian Piero Gasperini's side twice squandered a lead in its 3-3 first-leg draw in February but it showed fighting spirit of its own to reach the final for just a fourth time, with Lazio awaiting next month.
Luis Muriel opened the scoring early on for Fiorentina, but it was unable to build on its advantage and saw its winless run stretch to 11 matches across all competitions.
Alejandro Gomez won a penalty for his side, which Josip Ilicic converted, and the former sealed the victory 21 minutes from time thanks in large part to a howler from goalkeeper Alban Lafont.
Four of the first leg's six goals were scored inside the opening 36 minutes, and it took less than three of the return for Muriel to open the scoring.
Federico Chiesa played the ball through the Atalanta defence and Muriel coolly slotted underneath Pierluigi Gollini.
The host was level 11 minutes later as, soon after Gollini had kept out Jordan Veretout's shot at his near post, Federico Ceccherini's rash challenge on Gomez in the box allowed Ilicic to convert from the spot.
Marco Benassi was denied from close range by Gollini as Fiorentina pushed for a goal that would have put it in front in the tie, while Lafont was equal to Gomez's drive.
The host looked the more dangerous side in the second half, coming close through Duvan Zapata's deflected shot and substitute Mario Pasalic's long-range effort that Lafont pushed wide.
Gomez gave Atalanta some breathing space with a strike that Lafont should have done better to keep out, getting two hands to the ball but failing to stop it on its way through and Fiorentina never seriously threatened to find the two goals it needed as raucous home celebrations greeted the final whistle.