The Red Bull driver benefited from Lewis Hamilton's McLaren suffering a gearbox failure while holding a narrow lead.
Front-row starter Pastor Maldonado had to retire with hydraulic failure having battled with Alonso for the final podium spot.
Hamilton and Vettel ran in close company prior to the McLaren's problem, although the Briton seemed under control.
Third-placed Button fell away at first, before regaining some ground as he got better tyre longevity than those ahead.
Vettel made his first pitstop two laps earlier than Hamilton, and though this initially looked costly as he dropped into time-consuming traffic, once he was in clear air his pace on fresh rubber was sufficient to make up all the time lost and keep him between the McLarens.
That position became the race lead on lap 22, when Hamilton's car ground to a halt with a gearbox failure.
Button then kept Vettel honest to the finish, without it ever looking like the Red Bull's lead was in jeopardy. By the end, Vettel had edged away into a very secure lead.
Vettel stayed cool through two mid-race safety car periods: the first for Narain Karthikeyan sliding his HRT into the barrels at the tunnel entrance, and the second when Michael Schumacher ploughed into Jean-Eric Vergne on the restart lap.
Those cautions resolved the third-place battle. When Maldonado, who had fallen from second to fourth at the start, pitted for a second time under the first safety car, he rejoined 10th while Alonso stayed out and moved up to third. That decision probably secured the place for Ferrari even before Williams ordered Maldonado to retire with a hydraulic problem before the green.
Paul di Resta kept the frontrunners in sight throughout to score an excellent fourth for Force India, outpacing fifth-placed Mercedes man Nico Rosberg.
Lotus salvaged sixth and seventh with Kimi Raikkonen and Romain Grosjean on its least competitive weekend of 2012 so far.
Ferrari's Felipe Massa picked up a puncture on lap one, yet fought back impressively to secure eighth. On the way, he overtook Bruno Senna with an incredible move that saw him bounce off the Williams and the wall before arriving at Turn 13 sideways but in front.
The safety car timing hurt Mark Webber's strategy, and the best he could manage was to battle through to 10th, right on Daniel Ricciardo's tail.
Webber was then relegated to 11th place after stewards handed the Australian a retroactive drive-through penalty for leaving the track.
Among other incidents, Nico Hulkenberg clashed with both Saubers on consecutive laps late on, with Sergio Perez the only one involved to get away without having to pit for repairs.
Also notable was Timo Glock's 12th place, which moved Marussia ahead of Caterham in the constructors' standings.