Finnish teammate Kimi Raikkonen, who started on pole for the first time in nine years but lost the lead in the pitstops, made sure of a Ferrari one-two with Hamilton finishing seventh for Mercedes after starting 13th.
Vettel’s 45th career win was the German’s third in six races this season.
Behind the two Ferraris came the Red Bull of Daniel Ricciardo, with Hamilton’s teammate Valterri Bottas’ Merecedes in fourth.
Hamilton started in 13th but the three-time former champion fought his way through the pack to claim seventh place.
Jenson Button, replacing Fernando Alonso for this race only in the McLaren, was always towards the rear of the field before colliding with Pascal Wehrlein on lap 68.
It was a nasty moment for Wehrlein, whose Sauber turned on its side and slid against the barrier, trapping the German driver in his cockpit until officials came to his rescue.