Ronaldo — signed by the Italian giants last year from Real Madrid as they target a first Champions League title since 1996 — headed in a 61st-minute winner.
AC Milan played the last quarter of an hour a man down after Ivorian midfielder Franck Kessie saw red for a bad tackle on Emre Can.
The match had been overshadowed by controversy with calls for it to be relocated over human rights issues in Saudi Arabia with women only allowed to attend the game if they were accompanied by a man.
According to media reports, there were 15,000 women among the 61,000 crowd in the stadium.
Juventus have now won the title a record eight times, while AC Milan have won seven.
It was second time that Juventus coach Massimiliano Allegri has lifted the trophy, having lost to AC Milan in 2016 and Lazio last year.
Download our app and read this and other great stories on the move. Available for Android and iOS.