A first-half header from Cristian Romero and a penalty after the break from Josip Ilicic set the Rossoneri on course for just a second league loss of the season.
Stefano Pioli's side secured the title of winter champion by staying top at the halfway stage of the season, but Inter Milan has closed the gap and the rest of the chasing pack will feel emboldened by the result.
Duvan Zapata struck a clinical third goal on the break to make certain there would be no comeback from Milan, which is now winless in seven home league matches against Atalanta stretching back to January 2014.
New signing Soualiho Meite almost marked his debut with a goal three minutes in, the midfielder sending a header high and wide from Sandro Tonali's corner.
Atalanta began to build some pressure and found the breakthrough 26 minutes in, Romero stooping to nod the ball past Gianluigi Donnarumma from Robin Gosens's delivery.
The visitors doubled their advantage just seven minutes into the second half, Ilicic firing a penalty beneath Donnarumma after Franck Kessie had caught him in the face with a raised arm.
It should have been 3-0 on the hour mark, Zapata heading over after being picked out by a brilliant Ilicic cross from the right.
Pioli handed a debut off the bench to Mario Mandzukic, and he nearly marked his Serie A return with an immediate impact, Pierluigi Gollini doing well to get a hand down and claw away his shot.
As Milan sought a lifeline, Atalanta hit on the break in ruthless fashion.
Romero slipped in Zapata, who had hit the post with a header in his side's previous attack, and the forward rifled a left-footed shot beyond Donnarumma.
Inter's goalless draw at Udinese means Milan stays top of the table at the midway point of the season despite this defeat.
Still, its lead over the Nerazzurri is now down to two points as it has now lost twice in its past four league games.
Atalanta is up into fourth, although it has played two games more than Napoli and Juventus below them.
Milan and Inter face off in the Coppa Italia quarter-finals on Wednesday (AEDT) before Milan heads to Bologna in Serie A next weekend. Atalanta will meet Lazio twice next week, in the cup and then the league.