Kyle Walker had to play in goal for the closing minutes but City held on for a draw that still maintains their healthy position at the top of Group C.
With qualification the prize for a victory, manager Pep Guardiola had intended to leave nothing to chance by fielding a strong side. Only Sergio Aguero of the probable starters for Sunday’s clash at Liverpool was rested.
By the end, however, he may have been counting the cost with the crucial figure of Ederson joining a lengthy injury list.
There were huge swathes of empty seats at the San Siro but Atalanta, whose own ground does not meet UEFA requirements, still brought a large and noisy following from Bergamo.
The 32,147 crowd still made for a great atmosphere and the Italians were almost rewarded with an early goal after Ilkay Gundogan fluffed a clearance but Hans Hateboer volleyed wide.
Atalanta were to rue the miss as City took the lead after seven minutes with a sublime goal.
Bernardo Silva threaded in Jesus and the Brazilian showed great awareness to backheel into the path of Sterling. The England forward calmly clipped past Pierluigi Gollini for his 18th goal in 20 appearances for club and country this season.
City followed that with a spell in control and Sterling had another chance after Gundogan released Kevin De Bruyne and the Belgian pulled the ball back but Hateboer slid in to block.
Riyad Mahrez then weaved his way through the defence and tried a shot from the edge of the area but Gollini saved to his left.
City should have extended their lead in a frantic few moments before half-time when they were awarded a penalty that was changed to a free-kick and then given another spot-kick.
The initial offence saw Rafael Toloi pull back Sterling on the edge of the box. Referee Aleksei Kulbakov pointed to the spot but then awarded a free-kick on the edge of the area instead after a VAR review.
Sterling blasted into the wall but Ilicic looked to have handled and VAR was called upon again. This time a penalty was given but Jesus shot tamely wide.
That was to prove costly after the break as Atalanta returned with fresh vigour and levelled after 49 minutes.
City had made an unexpected change at half-time as Bravo replaced Ederson in goal and the Chilean’s first job was to pick the ball out of the net.
Chelsea loanee Pasalic gave Bravo no chance as he met Alejandro Gomez’s cross from the left with a ferocious header.
The game took another dramatic turn after 80 minutes when Ilicic broke through the City defence and Bravo raced out of his area to meet him. The pair came into contact ant Ilicic went down.
Kulbakov had no hesitation in showing the red card although Bravo took an age to leave the field as VAR reviewed the incident.
There was then another long delay before City were able to send on England defender Walker as a replacement goalkeeper, with Mahrez being sacrificed.
Walker’s first involvement saw him fumble a free-kick from Ruslan Malinovskyi but, despite that nervy touch, he was not tested as City held on.