For the first 25 laps Hamilton seemed to be poised for a win from pole position, but found himself shuffled behind Vettel's Ferrari when Romain Grosjean stopped on the track with a loose wheel nut.
The resulting Virtual Safety Car gave Vettel, who had yet to pit, an opportunity to do so while the rest of the field were running at a reduced speed, and in doing so he emerged ahead of his British rival.
From that moment on, the German did just enough to ensure he held onto the lead despite a spirited push from Hamilton. Vettel's teammate Kimi Räikkönen rounded up the podium.
The season now moves to Bahrain, where the next Grand Prix will take place in two weeks' time.