Championship leader Lewis Hamilton retired for the first time in 2015 after technical problems on his Mercedes.
As Ferrari secured their first double podium since 2013, Nico Rosberg finished fourth in the second Mercedes to cut Hamilton's championship lead to 41 points, ahead of Williams’ Valtteri Bottas and Red Bull’s Daniil Kvyat. Sergio Perez was seventh for Force India, followed by the Toro Rossos of Max Verstappen, with Sauber’s Felipe Nasr completing the points finishers.
Vettel had streaked from pole into an early lead at the start, heading Ricciardo by a full three seconds after just one lap. Ricciardo fought back however, and the pair traded blows and fastest laps in an intense battle that raged throughout the 61 laps.
Vettel's only reprieves came during those two safety car periods. The first came on lap 14 when Force India’s Nico Hulkenberg ran into the Williams of Felipe Massa as it exited the pit lane, bringing out the virtual - and then actual - safety car. Hulkenberg, who was pitched into the wall and retired on the spot, was deemed responsible for the incident, and given a three-place grid penalty for next weekend’s Japanese Grand Prix.
Vettel kept his nerve on the restart however, and did likewise after a second cessation on lap 37 when an errant spectator momentarily trespassed on to the track. At one stage he even appeared to slow the pace to try and back Ricciardo into Raikkonen, although the tactic also had the virtue of helping him to extend his tyre life. In the closing stages the pair traded fastest laps time after time, but it was the German who ultimately held the upper hand.
Victory was all the sweeter for the German given that championship leader Lewis Hamilton suffered his first retirement of the season. The Briton started losing power - and places - on lap 27. He fought the gremlins for several tours, before finally conceding defeat and pitting his F1 W06 Hybrid on lap 34. Vettel has closed to within 50 points of Hamilton as a result.
Williams made the most of the second safety car to keep Bottas ahead of Kvyat, who ran fourth early one but lost out with the timing of his pit stops.
Behind them, Perez clung on to seventh for Force India but came under heavy pressure from the flying Toro Rossos of Verstappen and Sainz. The Dutchman had dropped one lap down after failing to get away at the start of the race, but fought back with customary ferocity. He couldn't find a way past Perez however, and was asked to cede position to his team mate on the penultimate lap; he refused, and duly finished 0.6s behind the Force India, with Sainz another 1.4s back.
Nasr battled all the through the race with Sauber partner Marcus Ericsson, but grabbed the final point from Lotus's Romain Grosjean, who pulled into the pits and retired as Vettel started the final lap. Team mate Pastor Maldonado suffered damage in a clash with McLaren's Jenson Button, and eventually wound up 12th, just 0.211s behind Ericsson.
Button was forced to retire late on with gearbox issues, completing a miserable weekend for McLaren after Fernando Alonso had also been forced to withdraw. The pair had been running ninth and 10th by half distance.
Williams' Felipe Massa was the other retiree - having suffered a puncture in his clash with Hulkenberg, he then suffered gearbox issues which proved terminal.
Alexander Rossi's Grand Prix debut brought him a well-earned 14th for Marussia, as he finished well ahead of team mate Will Stevens after taking the initiative from the opening lap.
WATCH: Vettel celebrates victory in Singapore