The Finn flew off the line and controlled the race, pulling clear of Vettel and the Red Bull of Daniel Ricciardo.
As the pit stops came and went, Ferrari left Kimi Raikkonen out long in order to back Bottas up into Vettel.
The play, though, didn’t work as Bottas caught and passed his fellow Finn without even a moment’s trouble.
Bottas raced to the victory, the second of his Formula 1 career, as he survived late pressure from Vettel.
The Ferrari driver was runner-up on the day as, despite getting within half a second of Bottas in the closing laps, he was able to make a move for the win. His P2, though, extends his lead in the Drivers’ Championship to 20 points.
They were joined on the podium by Ricciardo, who achieved his fifth successive top-three result.
Lewis Hamilton recovered from a grid penalty to finish fourth ahead of Kimi Raikkonen, Romain Grosjean and Sergio Perez.
The final points went to Esteban Ocon, Felipe Massa and Lance Stroll.
Max Verstappen recorded his fifth retirement in seven races when his RB13’s driveshaft was broken in lap 1 contact.
Daniil Kvyat hit Fernando Alonso who in turn hit Verstappen. Alonso and Verstappen both retired while Kvyat, who had to pit for repairs, was handed a drive-through penalty.
Stoffel Vandoorne also had a drive-through penalty, his for ignoring blue flags. He finished P12.
1 Bottas Mercedes 1:21.48.527
2 Vettel Ferrari +0.6
3 Ricciardo Red Bull 6.0
4 Hamilton Mercedes 7.4
5 Raikkonen Ferrari 20.3
6 Grosjean Haas 73.1
7 Perez Force India 1 lap
8 Ocon Force India 1 lap
9 Massa Williams 1 lap
10 Stroll Williams 1 lap
11 Palmer Renault 1 lap
12 Vandoorne McLaren 1 lap
13 Hulkenberg Renault 1 lap
14 Wehrlein Sauber 1 lap
15 Ericsson Sauber 1 lap
16 Kvyat Toro Rosso 3 lap