Verstappen had said after taking an unexpected and superb pole position on Saturday that he expected it to be difficult to hold Piastri back.
But he will not have thought his race would be decided as soon as it was.
Piastri got much the better launch and was completely alongside the Red Bull as they entered the first corner.
Verstappen hung it out around the outside, cut the chicane and retained the lead on the exit. He claimed that Piastri had forced him off, but the stewards disagreed and gave the Dutchman his penalty, which he served at his pit stop.
Piastri, who had tracked Verstappen closely through the first stint, before beginning to drop off a little in the couple of laps before their stops, was now in a 4.8-second lead, which he managed to stabilise for the rest of the race.
There was some jeopardy in the closing stages as Piastri was held up by Lance Stroll’s tardy Aston Martin as he came up to lap the Canadian, but once clear he was able to edge away again and crossed the line 2.8secs ahead.
Verstappen’s superlative first stint ensured he kept second place ahead of Mercedes’ George Russell, but Leclerc brought himself into contention for the podium, with an outstanding first stint.
Leclerc ran long on the medium tyres, waiting until lap 29 to make his pit stop, nine later than Russell and 10 after Piastri.
Leclerc rejoined only 3.5secs behind Russell, had caught him within seven laps, and was past one lap later to take an excellent podium, Ferrari’s first in a grand prix this season.