It was the third victory of the season for two-time world champion and the 30th of his Formula One career. Alonso improved his points total to 154 for the season, 34 ahead of Red Bull's Mark Webber.
Vettel, who initially came in second, was handed a 20-second time penalty by the race stewards for leaving the track to pass Button during the closing stages of the race.
The penalty demoted him to fifth in the results, handing second place to Button.
Lotus's Kimi Raikkonen moved up into third and Sauber's Kamui Kobayashi took fourth under the revised finish.