After finishing as runner-up to Arsenal last season, Chelsea has a chance to go one better thanks to Ziyech's 55th-minute strike against the Premier League leader at Wembley on Sunday (AEST).
His goal arrived just seven minutes after De Bruyne went off with an ankle issue – a concern for Pep Guardiola with the Carabao Cup final and first leg of City's UEFA Champions League semi-final against Paris Saint-Germain to come this month.
Ziyech was unable to beat Zack Steffen and get a second before the hour mark, but one goal was enough for Chelsea to finally beat City at the new Wembley at the fourth attempt.
From the early stages both teams appeared eager to try to exploit the counter-attack, but Chelsea looked the more dangerous in those situations.
Ziyech had a goal chalked off inside six minutes because Timo Werner was offside in the build-up, while Ben Chilwell scuffed a volley wide from a brilliant Reece James cross.
James failed to work Steffen with an effort of his own, meaning Gabriel Jesus's hopeful 20-yard effort that was caught by Kepa Arrizabalaga was the first half's only shot on target.
De Bruyne appeared to get hurt after tangling with N'Golo Kante three minutes after half-time and was replaced by Phil Foden.
Matters deteriorated for City in the 55th minute, when Mason Mount released Werner and he squared for Ziyech to steer the ball into an empty net.
A terrific, raking pass from Chilwell gave Ziyech a chance to double his tally four minutes later but Steffen stayed big to keep him at bay.
Chelsea lost Thiago Silva to a back injury late on but they saw out the victory comfortably, even with Christian Pulisic's stoppage-time strike being correctly chalked off for offside.
Leicester City or Southampton, which play the other semi-final on Monday (AEST), will face Chelsea in the final in May.