The Finn hit top spot in the early running with a lap of 1m38.600s using ultrasoft Pirellis, which put him a quarter-of-a-second ahead of MaxVerstappen, who used the same compound.
Ferrari was the first frontrunning team to send its drivers out on the hypersofts, with Kimi Raikkonen going fastest just after the 30-minute mark with a lap of 1m37.461s.
Sebastian Vettel then slotted into second place, just over a tenth-of-a-second slower, before the Mercedes drivers completed their performance runs.
Bottas improved his best time to a 1m37.236s to reclaim top spot, but Lewis Hamilton was behind him on track and on a quick one.
Hamilton was only able to set a time good enough for second after losing time in the final sector and ended up 0.207s behind his teammate.
This allowed Max Verstappen to grab second place with a lap of 1m37.288s despite complaining of running out of battery power for the final two corners, which he subsequently improved by 0.008s on his second flier.
Verstappen did have a concerning moment earlier in the session when he ran wide at the exit of Turn 20 and ground the floor of his car along the sausage kerb, but was sent back out again after checks.
Red Bull teammate Daniel Ricciardo also managed to get two fast laps out of the hypersofts, jumping from the back of the top six up to third with his final attempt.
This shuffled Hamilton down to fourth, ahead of Raikkonen and Vettel.
Haas driver Romain Grosjean emerged as the midfield leader in seventh place with a lap half-a-second off Vettel.
That put him 0.170s ahead of Renault driver Nico Hulkenberg, with the second Haas of Kevin Magnussen in ninth.
Racing Point Force India’s Esteban Ocon completed the top 10, 1.166s off the outright pace.
Toro Rosso driver Pierre Gasly showed strong pace on the ultrasofts earlier in the session, but slipped down to 11th place ahead of the second Renault of Carlos Sainz after his run on hypersofts.
Fernando Alonso ended his final Friday in F1 – for now, at least – in 13th place.
Running a special livery on the engine cover of his car that replicates his helmet colours, Alonso set a best lap of 1m38.725s to beat the second Force India of Sergio Perez.
Sauber driver Charles Leclerc was 15th, also complaining of possible floor damage after a wide moment at Turn 5, with Brendon Hartley 16th in the second Toro Rosso and admitting to a couple of errors on his fast lap.
Marcus Ericsson took 17th ahead of Stoffel Vandoorne, who had an extended stay in the pits mid-session but went out on hypersofts late on.
Williams pairing Lance Stroll and Sergey Sirotkin brought up the rear in 19th and 20th place respectively.