Bottas, in a Mercedes, jumped into the lead from third in the grid and never ceded his place.
Vettel pressured the 27-year-old Finn, in his 81st F1 start, to the end, with the winning margin just 0.6 seconds.
Vettel's Ferrari teammate Kimi Raikonnen rounded out the podium, with Lewis Hamilton in fourth.