Carlos Bacca pulled one back for the Rossoneri shortly after BVB scored early on through Nuri Sahin and Aubameyang, before the Gabon striker netted again after the break.
Of Milan's summer signings, only Franck Kessie and Ricardo Rodriguez started the game, while Hakan Calhanoglu and Mateo Musacchio came off the bench in the second half.
BVB made a bright start to the match through Ousmane Dembele, who looked to get forward at every opportunity. The Frenchman linked up well with Christian Pulisic before seeing an effort curl wide and then one saved by Marco Storari.
German football expert Lars Pollmann noted the Rossoneri's early struggles to contain them:
Dortmund pressed the Italian side with pace and intensity, and their attacking intent was soon rewarded when Pulisic teed up Sahin after 16 minutes. The Turk swept in a low effort from the edge of the area, though Storari should have done better to keep it out.
Two minutes later, Gabriel Paletta tripped Pulisic in the area to give away a penalty, which Aubameyang put away. BeIN Sports' Matteo Bonetti bemoaned Paletta's lack of discipline:
Against the run of play, Milan pulled a goal back shortly after through Bacca. The Colombian burst through the middle before beating Roman Weidenfeller with a low 25-yard effort with the outside of his right foot.
Dortmund quickly resumed their domination for the remainder of the half and had another good chance to score when Aubameyang beat Paletta before picking out Gonzalo Castro, but he blasted his effort high.
Meanwhile, Fabio Borini was fortunate to escape sanction for an apparent stamp on Marc Bartra.
Milan continued to look shaky at the back as they tried to cope with the Bundesliga outfit's press after the break, though it was a rapid-fire counter-attack that resulted in Dortmund's third goal.
Substitute 'keeper Dominik Reimann's quick release of the ball allowed Castro to surge forward and pick out Pulisic on the left, and he slid in Aubameyang to finish off the move.
A raft of substitutions disrupted the flow of the match as it wore on, though Milan did carve out some opportunities with Calhanoglu and Luca Antonelli firing wide, while the latter also had a shot blocked via a superb interception from Sokratis Papastathopoulos.
Patrick Cutrone should have pulled a goal back in added time when he found himself one-on-one with Reimann, but the stopper kept out his effort with an excellent save to spare his side a tense finish to the match.