Bottas and nearest-rival Vettel headed out for their final runs, only for yellow flags following an issue for Romain Grosjean to prevent them from improving, handing the Finn his second F1 pole following his success in Bahrain earlier this year.
Vettel finished 0.042 seconds behind in second place, while Hamilton qualified third, meaning he will start the race eighth on Sunday after his penalty.
Kimi Raikkonen was fourth-fastest for Ferrari ahead of the Red Bull duo of Daniel Ricciardo and Max Verstappen, while Grosjean ended up seventh despite his late problem.
Force India drivers Sergio Perez and Esteban Ocon qualified eighth and ninth respectively as Toro Rosso’s Carlos Sainz Jr. rounded out the top 10.
Nico Hulkenberg just missed out on a place in Q3 after finishing 11th for Renault, qualifying ahead of McLaren drivers Fernando Alonso and Stoffel Vandoorne. Alonso had been forced to switch back to Honda’s ‘Spec 2′ power unit earlier in the day, and reported more issues at the end of Q1, but ultimately only finished half a tenth away from a top-10 grid slot.
Daniil Kvyat failed to match Sainz in the sister Toro Rosso, finishing 14th, while Haas’ Kevin Magnussen was 15th after failing to take any part in Q2 following a suspension failure in
Jolyon Palmer’s qualifying woes continued as he could only finish 16th for Renault, dropping out after a late lap from Vandoorne nudged him into the dropzone by just 0.03 seconds.
Williams lagged to its worst qualifying result of the season so far as Felipe Massa and Lance Stroll both dropped out in Q1, finishing 17th and 18th respectively as the team’s significant update package for the FW40 car proved difficult to work with.
Sauber failed to put up any kind of fight to reach Q1 as Marcus Ericsson and Pascal Wehrlein propped up the running order in 19th and 20th, finishing almost two seconds off Hamilton’s fastest Q1 lap