The 22-year-old Bernal, the youngest rider to win the race in 110 years, gave Team Ineos — formerly Team Sky — their seventh title in the last eight editions.
“It’s incredible, I don’t know what to say," said Bernal. "I’ve won the Tour but I don’t manage to believe it. I need a couple of days to assimilate all this.
"It’s for my family and I just want to hug them. It’s a feeling of happiness that I don’t know how to describe it."
He beat team-mate and defending champion Geraint Thomas of Britain by a minute and 11 seconds, with Dutchman Steven Kruijswijk coming home third, one minute and 31 seconds off the pace. He became the first Colombian to win the race, bettering recent runner-up finishes by countrymen Rigoberto Uran and Nairo Quintana.
This is the first Tour for us, Colombians," said Bernal. "Many Colombians have tried before, we’ve had great cyclists in the past. But I’m the first one to win the Tour! Colombia deserves it.”
Also the winner of the white jersey for the best Under-25 rider, Bernal did not win a single stage, but he was first at the top of the Col de l’Iseran when the 19th stage was stopped because of hailstorms and landslides in the Alps.
Kruijswijk’s Jumbo-Visma team shone throughout the race, winning four stages through Dylan Groenewegen, Wout van Aert, Mike Teunissen and the team time trial.
Briton Adam Yates failed to impress but his Mitchelton-Scott team also claimed four stages. Yates’ twin brother Simon won two stages while Matteo Trentin and Daryl Impey took one apiece.
France’s Julian Alaphilippe, who wore the yellow jersey for 14 days but cracked in the Alps and ended fifth overall, was the race’s most exciting rider.
The world number one, who had been fighting to become France’s first winner since Bernard Hinault in 1985, was voted this year’s most aggressive rider after also winning two stages.
“Alaphilippe changed the deal of this Tour de France, no question about it,” said Tour director Christian Prudhomme.
“There was also the absence of (four-times champion) Chris Froome, which gave hope to many riders.”
Slovakian Peter Sagan wrapped up a record seventh green jersey for the points classification, surpassing the previous mark he held jointly with German Erik Zabel.
Frenchman Romain Bardet won the polka dot jersey for the mountains classification, a consolation prize after he dropped out of overall contention early on.
Sunday’s stage, a mostly processional ride from Rambouillet that ended on the Champs Elysees, as it has done every year since 1975, was won by Ewan, who snatched his third stage win on his Tour debut.
Ewan burst through on the right side of the cobbled avenue to beat Dutchman Groenewegen and Italian Niccolo Bonifazio, who were second and third respectively.