The Spaniard never had a big lead but never looked in serious danger of losing it, successfully fending off the Red Bull of Vettel and the McLaren of Jenson Button.
"It was tough. Maybe we were not the fastest in dry conditions, but we were competitive to retain the lead," Alonso said. "Jenson was putting a lot of pressure."
Alonso became the first driver to win three races this season and has a 34-point lead over Mark Webber, the second Red Bull driver who was eighth.
Vettel failed again to win his home race and was penalized for overtaking Button from outside the track, having gone off the circuit with all four wheels with one lap remaining in the 67-lap race.
The 20-second penalty further dents Vettel's chances of retaining the title. Button moved up to second and Kimi Raikkonen to third.
"I wasn't sure if he (Button) was on the inside or not. The last thing you want to do is make contact. When we were side by side, I tried to give him enough room but it's difficult to see. I went wide," Vettel said. "We were all struggling with tires, Jenson in particular, which is why I was able to pass him."
Button had been challenging Alonso for the lead, before his tires gave out over the last few laps.
"I had a great race out there and it is nice to be fighting at the front again," the Briton said.
Button did not want to comment on Vettel's overtaking move. Vettel remained third in the standings after 10 of 20 races. Alonso has 154 points, Webber 120 and Vettel 110.
Vettel complained about Button's McLaren teammate Lewis Hamilton, saying the Briton slowed him down on lap 35. Hamilton, in his 100th Grand Prix, had an early tire puncture that ruined his race before he retired on lap 59.
Michael Schumacher, the seven-time F1 champion, started from third but eventually dropped to seventh, losing a couple of places after making a late third pit stop to put on another set of soft tires.
He posted the fastest lap of the race but could not gain any places and still remains winless in the third season of his comeback.
Schumacher has not said whether he intends to continue racing and if not, this could have been his final race at home.
Kimi Raikkonen of Finland was one of the drivers to overtake Schumacher and finished fourth in his Lotus. Kamui Kobayashi of Japan drove his Sauber to fifth, followed by teammate Sergio Perez of Mexico.
More Sports Headlines
Seahawks' Chancellor reportedly seeking more money, may hold out M's pitching woes continue in 9-5 loss to Twins M's trade Ackley to Yankees in 3-player deal AquaSox fall 8-2 to Volcanoes UW coach Petersen not looking forward to Boise return Jetsí Richardson facing charges for resisting arrest Bills place Williams on active/not-football injury list Brady lawsuit transferred from Minnesota to New York court
Our new comment system is not supported in IE 7. Please upgrade your browser here.