Within the first few minutes the difference in class was evident and the two-goal scoreline barely revealed the true tale of the match.
Zenit missed a number of opportunities but did enough to cruise into the final, where they will face Saudi champions Al Hilal, after topping Group B with six points.
With five goals to their name and none conceded, Luciano Spalletti’s outfit will be firm favourites.
Piroozi relented after just six minutes when Portuguese schemer Danny found an opening in the defence and meandered into the penalty area before sliding a pass to Aleksandr Kerzhakov to open the scoring with a simple finish.
Kerzhakov continued to be one of Zenit’s most threatening players as he went close on a number of occasions in the opening 45 minutes.
Just minutes after his goal he burst into the 18-yard-box and set himself to shoot only for a succession of Piroozi tackles to thwart him just as he was pulling the trigger.
The Russian side were dominating possession and the healthy crowd at the Maktoum bin Rashid Al Maktoum Stadium were treated to some fine pass and move football, it was just a mystery the scoreline remained at one goal.
Zenit again created a chance in the 18th minute when Kerzhakov surged forward to set up a shooting opportunity but snatched at his finish, with the ball not fully under control, sending his shot wide of the goal.
For a brief spell, Piroozi sprang back to life, controlling possession but while they were able to keep the ball, getting past the Zenit defence proved an all too difficult challenge.
They were however given an opportunity just after the half-hour mark when Bruno Alves was yellow carded for a dangerous tackle just outside the box.
Striker Maziar Zare positioned himself with the free-kick but made a mess of his attempt, firing it high into the stands.
Danny was guilty of poor finising soon after he broke away from the defence to collect a long pass and had just goalkeeper Alireza Haghighi to beat.
But as he tried to go around Haghighi, he pulled the ball a little too sharply and lost control missing out on a simple chance.
The second period followed a similar pattern to the first with Zenit keeping the ball and Piroozi doing their best to keep the opposition at bay.
Sergei Semak was denied a chance to make it two when he found himself in front of Haghighi but rushed his finish and a comfortable save was made.
Piroozi then enjoyed a rare snatch at goal as Shpejtim Arifi made his way into the penalty area but after Vyacheslav Malafeev parried his first attempt he was unable to react quick enough to collect the loose ball.
Having missed one chance, veteran midfielder Semak was not about to waste a second and he confirmed the result 12 minutes from time when Alessandro Rosina intercepted substitute Sheys Rezaei’s back-pass to his ‘keeper before rolling in Semak to finish into an empty net.
By Jai Prasad