The defender struck a crucial away goal for the Italian champions just moments after Mirko Vucinic had squandered a glorious chance to break the deadlock
Defender Bonucci often found himself in the role of replacement playmaker for much of the evening as the French side worked hard to shackle Andrea Pirlo’s influence from deep.
His persistence was rewarded in the 85th minute as he lashed home after Paul Pogba bundled a poorly defended corner goalwards.
Juventus substitute Mirko Vucinic - on for injured top scorer Carlos Tevez - cut a particularly relieved figure having blazed over from close range a minute earlier.
Jimmy Briand wasted Lyon's best chance and botched a clear opportunity on the break alongside Steed Malbranque shortly before Bonucci's strike to ensure boss Remi Garde suffered an unsatisfactory 48th birthday.
Juventus welcomed back Tevez from a domestic ban and their Serie A talisman had the opportunity to end his five-year European goal drought in the fifth minute.
Strike partner Pablo Daniel Osvaldo flicked into his path deep inside the Lyon box but the Argentinian found neither the required power or direction with his header.
Goalkeeper Gianluigi Buffon made his 700th appearance for Juventus and displayed typical excellence to deny Malbranque at his near post when the experienced playmaker darted into the visitors' box.
Lyon should have led from the resulting 26th-minute corner. Arnold Mvuemba's delivery was met by Bakary Kone and Briand lifted the loose ball onto the roof of the net from close range.
Tevez had another sniff of an opening when Pirlo lifted a trademark pass behind the Lyon defence, but Buffon's opposite number Anthony Lopes raced from his line to snuff out the danger.
Buffon helped Samuel Umtiti’s 53rd-minute free-kick around the post as Lyon began the second period on the front foot.
Juventus found a response through Tevez but it came at a price. The forward turned and ran at the home back line before driving into Lopes' arms, then immediately signalled to be replaced having apparently pulled a muscle in his leg.
As the hour arrived, Briand almost flicked a Pirlo free-kick into his own net but Lopes pushed clear superbly at full stretch.
Vucinic replaced Tevez but it was another attacking substitute, Sebastian Giovinco - on for Osvaldo - that sparked Juventus' most enterprising period.
First the diminutive forward combined with Pirlo at a short corner that saw Kwadwo Asamoah's strike from the edge of the area deflected narrowly wide.
Giorgio Chiellini wasted a good opening from a clever set-piece, though Vucinic's inexplicable miss from six yards looked to have ended the Italians' chance of a win.
But Juve finally grabbed a crucial goal with five minutes of normal time to go as Bonucci bundled home after Lopes saved from Pogba, and they will go into the second leg confident having won all but three of their 21 games at home this term.
Win a trip to the Europa League final, tweet #B1with_YourTeam