Matteo Pessina scored twice after Duvn Zapata had given Atalanta an early lead in the semifinal. Hirving Lozano netted early in the second half for Napoli.
The final will be held on May 19 with Juventus looking for a record-extending 14th Italian Cup title. Juventus beat Inter Milan 2-1 on aggregate to reach its 20th final.
It will be Atalantas fifth final. Its most recent was in 2019 but it hasnt won the trophy since 1963.
The first leg between Napoli and Atalanta ended 0-0 last week.
Atalanta broke the deadlock in the 10th minute with a long-range strike from Zapata that swerved into the far side of the net.
Zapata turned provider six minutes later, laying off Robin Gosens pass for Pessina to fire in off the inside of the left post.
Atalanta had chances to score a third before Lozano reduced the deficit eight minutes into the second half, firing in a rebound after being denied by a save from goalkeeper Pierluigi Gollini.
Gollini pulled off another save to deny Victor James Osimhen shortly before Atalanta sealed the match in the 78th minute, when Pessina mazed his way between two Napoli players before chipping the ball over goalkeeper David Ospina.