Ireland Under-20 international Niall O'Connor kicked 12 points as Andy Ward's side did just enough to book a decider with Garryowen.
A 35th-minute try from captain Colm McMahon drew Shannon level at 17-17 for the interval. But scores from Marshall (52 minutes) and McKenzie (62) were decisive.
Scorers: Harlequins: Tries: Darren Cave, Stuart Philpott, Paul Marshall, Paul McKenzie; Cons: Niall O'Connor 3; Pens: O'Connor 2. Shannon: Tries: Frankie McNamara, Colm McMahon, Les Hogan; Cons: Andrew Thompson 2; Pens: Thompson 3