Dundee started on the front foot, winning a free-kick just outside the Celtic box, and although the first attempt was headed clear by Auston Trusty, Kasper Schmeichel had work to do to keep out the rebound.
From that point on, Celtic enjoyed the lion’s share of possession in the first half and watched as chance after chance came and went to leave it goalless at the break.
Brendan Rodgers rung the changes early in the second half, with Luis Palma, Anthony Ralston and Paolo Bernardo making way for Daizen Maeda, Reo Hatate and Johnston.
Just a few minutes later, it was right-back Johnston who made the breakthrough for the reigning champions as he tapped in from Yang's pass.
Engels made it two from the spot after Antonio Portales was adjudged to have clipped Kyogo in the box as he was racing through on goal.
The Belgian midfielder sent his spot kick straight down the middle as Jon McCracken dived to his right.
The chances kept coming for Celtic and, although they couldn’t find the back of the net again, the two-goal cushion was enough to secure all three points.