The game, which controversially played in Saudi Arabia, was decided by Ronaldo’s second-half header.
Milan were reduced to 10 men, after Franck Kessie was sent off for a nasty foul on Emre Can.
Juve created other opportunities late on, but couldn’t find a second. However, it mattered little, as Ronaldo celebrated a first piece of silverware since moving to Turin from Real Madrid last summer.
It is also the first time the Serie A champions will be winning the trophy in three seasons.