The German was chased home by teammate Charles Leclerc, who started on pole but lost the lead to the four-time world champion after making his pit stop, and Red Bull's Max Verstappen, who finished third.
"It was a very late call on the pit stop and I just gave it everything on the out lap. I was surprised to come out ahead and it was difficult to manage the tyres but we controlled it to the end," Vettel told reporters.
Championship leader Lewis Hamilton finished fourth but extended his advantage over fellow Mercedes driver Valtteri Bottas to 65 points, with six races remaining, after the Finn finished in fifth.
The race got off to a clean start with the top six retaining their grid positions despite Vettel putting immense pressure on second-placed Hamilton in the opening lap.
While a few drivers were shifting position further down the field, the frontrunners were maintaining a one-second gap between each other as Leclerc set a slow pace to make his soft tyres last as long as possible.
Ferrari and Red Bull were the first of the big teams to bring their cars in for pit stops as Vettel and Verstappen were fitted with the more durable hard tyres on lap 20, with Leclerc following suit on the next lap.
Leclerc, however, was dismayed to leave the pits behind Vettel.
Hamilton stayed out on track in the lead to set about forging a big enough gap to retain the lead when it was his turn to come in.
But Vettel, Leclerc and Verstappen were lapping much quicker than Hamilton and when the Briton finally stopped seven laps after his rivals, he emerged in a distant fourth place.
Hamilton's only hope of victory was to capitalise on his rivals' degraded tyres late in the race.
But three safety car periods -- when both George Russell and Sergio Perez stopped on the track, and when Daniil Kvyat collided with Kimi Raikkonen -- allowed the front three plenty of time to cool their rubber.
Ferrari will be delighted to have recorded a one-two finish at a circuit they were not expected to muster a podium finish.
But Leclerc was unhappy with the pit strategy that dashed his hopes of a hat-trick after wins in Belgium and Italy.
"I won't do anything stupid, I want us to finish one-two," Leclerc told Ferrari over the radio when he was behind the second safety car. "I just don't think it's fair."
Smog from forest fires in neighbouring Indonesia has shrouded Singapore over the past week, and on Sunday air quality dipped to unhealthy levels ahead of the race.