Balotelli won the penalty in controversial circumstances after grappling with substitute centre-back Mike Van der Hoorn inside the area and his conversion from 12 yards earned the Rossoneri a draw that their second-half display deserved.
The finish was cruel on Ajax, however, as they had only taken the lead in the 90th minute of a game that had previously appeared destined to end goalless.
Then, young central defender Stefano Denswil rose unmarked five yards out to head home a corner from the right flank to leave the Dutch champions on the brink of a precious win.
Instead, the draw suits Milan, who are clear in second place on four points behind Barcelona, 1-0 winners away to Celtic in the group's other game.
Ajax now face a vital double-header against Celtic while Milan will know they must do far better when they take on familiar foes Barcelona next.
Both Ajax and Milan can boast a glorious past, with 11 European Cups between them and two previous meetings in the final of the competition, Milan winning 4-1 in 1969 and Ajax gaining revenge with a 1-0 victory in the 1995 showpiece in Vienna.
Current Ajax coach Frank de Boer played in the latter game but these days he is unable to keep his best players for long enough to build a team that can properly compete on the European stage, while Milan are a shadow of their former selves.
The Rossoneri travelled to the Dutch capital on the back of a slow start to the Serie A season and without the likes of Kaka and Stephan El Shaarawy, although Mario Balotelli was able to play as he is serving a domestic suspension.
However, Massimiliano Allegri's men ignored the temptation to push forward and look for Balotelli in the first half, instead ceding possession and inviting their hosts to make the play.
As a result, Ajax utterly dominated, but a Viktor Fischer shot that flashed just wide and a Lerin Duarte free-kick that was tipped over by Christian Abbiati in the Milan goal were as close as they came to taking the lead into half-time.
And predictably, Milan - who beat Dutch opposition in PSV Eindhoven to qualify for the group stage - were much improved after the restart.
They finally produced an attempt on goal in the 49th minute, Kevin Constant cutting the ball back for captain Riccardo Montolivo to shoot, but his effort was well saved by Jasper Cillessen.
Balotelli had a free-kick deflected just over moments later before seeing a terrific curling strike tipped onto the woodwork by Cillessen just after the hour mark.
Ajax, whose starting line-up had an average age of just 23.5, visibly tired and spent the closing stages penned back inside their own half but they roused themselves and almost won it at the very end.
They had an effort disallowed for offside and Siem de Jong was denied by Abbiati before Denswil netted what looked like the winner, only for Balotelli to rescue Milan, not for the first time.