The two other men in that top four were Nico Rosberg in the second Mercedes and Thursday pacesetter Daniel Ricciardo in the Red Bull.
Ricciardo’s team mate Max Verstappen finished fifth after surviving a late scare. The Dutchman ran too wide coming up the hill into Massenet and swiped the right side of his Red Bull against the Armco, damaging the front wing and possibly the suspension. He was able to continue to the pits.
In a top ten covered by just a second, the Toro Rossos of Daniil Kvyat and Carlos Sainz were sixth and seventh, followed by the Force Indias of Sergio Perez and Nico Hulkenberg, who were split by Ferrari’s Kimi Raikkonen.
The most dramatic incident of the session came early on when Jolyon Palmer lost control of his Renault entering the swimming pool section. The Englishman spun through 180 degrees, swiping the rear of the car against the barriers, but was able to continue to the pits and rejoined later in the hour.
WATCH: Palmer loses control at the swimming pool
This was one of the most exciting practice sessions for a long time, as Ferrari, Mercedes and Red Bull went head-to-head on Pirelli’s ultrasoft tyres.
Rosberg opened up the action early on with 1m 15.909s, before Hamilton beat that with 1m 15.808s. Then Vettel split them with 1m 15.841s and Raikkonen did 1m 15.964s for fourth. Both Mercedes then lost faster laps when Palmer brought out the yellow flags after his spin at the swimming pool, but Vettel was able to improve to 1m 15.433s to go fastest before Rosberg replied with 1m 15.181s. Vettel then improved to 1m 15.208s before Perez jumped to third on 1m 15.368s. Hamilton was down in sixth on 1m 15.506s.
When the Red Bulls came out after 45 minutes for their final runs, Ricciardo went fastest with 1m 14.807s, just slower than his Thursday practice best of 1m 14.607s, as Verstappen - without the improved Renault power unit that his team mate is using - lapped 0.274s slower to take second.
Things got a bit messy after that, as numerous trips down the Ste Devote escape road by Haas’s Esteban Gutierrez, Manor’s Pascal Wehrlein and Renault’s Kevin Magnussen brought out lap-spoiling yellows, as did Perez’s visit to the run-off at Portier.
Vettel found a clear lap to go fastest with 1m 14.650s, but then made a great catch when he got into a tankslapper under braking for the chicane; Hamilton jumped up to second with two fastest first sectors and a lap of 1m 14.668s, but lost the 0.018s that might have made the difference as he encountered a pit-bound Sainz at Rascasse. Rosberg improved to 1m 14.772s for third, and Ricciardo’s last try came too late to yield improvement.
In the midst of all that Verstappen got it wrong going up to Casino Square as he got off line and understeered into the wall at Massenet, and Raikkonen’s lacklustre 1m 15.555s (nearly a second slower than Vettel) left him down in ninth.
Notably, Daniil Kvyat grabbed sixth with 1m 15.259s (only two-tenths off Verstappen), with Sainz right behind him on 1m 15.324s. Perez fell to eighth, and team mate Nico Hulkenberg completed the top 10 with 1m 15.666s.
Williams continued to struggle, as did Haas, and though their MP4-31s understeered less than they had on Thursday, there was no sign of McLaren presenting Ferrari with the challenge Eric Boullier had promised before the weekend as Fernando Alonso and Jenson Button split Felipe Massa and Valtteri Bottas.
At the sharp end, the prospects for a fabulous qualifying shoot-out have rarely looked better in the turbo-hybrid era, with Ferrari, Mercedes and Red Bull all genuine contenders for pole position.