Defenders Aymen Abdennour and Fabinho claimed vital second-half goals as Monaco nullified the Zenit threat, before converting two rare chances.
The low-scoring hosts topped their group by firing just four goals in six matches, overhauling Bayer Leverkusen after the Germans drew 0-0 at bottom side Benfica.
Just as Zenit cranked up the pressure after a goalless first half, Monaco struck through Abdennour’s header. The Russians were unable to recover, and Fabinho capped a late counter-attack to fire home and complete Monaco’s unlikely group triumph.
Well aware a draw would send them through to the last 16, Monaco set about shutting up shop straight from the off.
The nullifying tactics suffocated Zenit’s attacking intentions, but also killed any spectacle.
Even without the suspended Ricardo Carvalho, Monaco were able to produce a first-half of defensive rigidity, with Zenit unable to feast on what scraps fell their way.
As Monaco continued their rearguard stance after the break, so Zenit cranked up the pressure.
Hulk’s whipped free-kick turned Monaco’s defence in the six-yard box, but none of his team-mates could add a scoring touch.
Zenit scented blood but only ended up conceding themselves, despite growing into the contest.
Tunisian centre-back Abdennour headed home to hand Monaco the lead just past the hour, with Zenit visibly shocked by the goal.
Hulk continued to sustain Zenit’s fight, firing a whipped free-kick just wide.
Abdennour then produced a timely last-ditch challenge to deny Zenit captain Danny just as the Russian side threatened to claim an equaliser.
As Monaco held firm and continued to frustrate the visitors, up popped Fabinho to cap the last-gasp counter-attack, sliding the ball between the legs of Zenit stopper Yuri Lodygin to seal the hosts’ victory.