Bottas – also driving a Mercedes – started the race from pole position for the first time and held off Kimi Raikkonen and Daniel Ricciardo to take a place on the podium.
It was Vettel's third win in Bahrain and the 44th of his career. "It's been a really great day for me,” said the 29-year-old German. “The car was really amazing to drive and I could control the race in the end. Lewis was a threat towards the end and, with the traffic, you never know."
After races in Australia, China and Bahrain, Vettel leads the drivers’ championship with 68 points ahead of Hamilton on 61. Bottas, 27, who is in his debut season with Mercedes is third on 38 points.
Hamilton, who was penalised for a pit-lane incident by braking in front of Ricciardo when he slowed before stopping, congratulated Vettel and thanked Bottas, who moved over to let the Briton through in the closing laps.
"It was definitely costly - the pit lane incident," added the 32-year-old Briton. "It was my fault. I apologise to the team for losing that time there. "