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
The Italy defender 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.
Bonucci's 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 Argentine found neither the required power nor 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, who 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.
However, Juve finally grabbed a crucial goal with five minutes of normal time to go, with Bonucci bundling home after Lopes saved from Pogba, and the Italian champions will go into the second leg high on confidence, having won all but three of their 21 games at home this term.