Gian Piero Gasperini’s side sits third in the standings, four points ahead of Bologna, which stunned leader Inter Milan earlier in the day.
The first half at Stadio Giuseppe Meazza offered little in terms of goalmouth action, with just one shot on target between the two sides before the break.
Luka Jovic came closest to opening the scoring in the first 45 minutes, but he was unable to test Marco Carnesecchi from close range after finding space to shoot.
Milan again came close when Rafael Leao’s cross across the area narrowly evaded Christian Pulisic, but it was Atalanta that got its nose in front just after the hour.
Ademola Lookman’s cross to the back post was played back into the area by Raoul Bellanova, with Ederson’s diving header finding its way past Mike Maignan.
Atalanta almost doubled its lead late on, but Mateo Retegui’s effort from close range was thwarted by the boot of Milan captain Maignan.
The result saw jeers echo around the stadium from the home supporters, who continued to vent their frustration at Milan’s hierarchy after a poor run of results.
Sergio Conceicao’s side is now nine points adrift of the top four with five games of its season remaining.