Clinton N'Jie put the hosts into the lead in the first half, but the Swede's spot kick ensures that it remains tight at the top of Ligue 1.
Defending champion PSG headed to Stade de Gerland knowing a win would see the club leapfrog Lyon at the summit of the French top flight.
But Laurent Blanc's men appeared destined for defeat after Clinton N'Jie put Lyon ahead just after the half-hour mark - the Cameroon international opened the scoring with a powerful low finish.
PSG was continually thwarted by a string of fine saves from Lyon goalkeeper Anthony Lopes, who was eventually beaten from 12 yards by Ibrahimovic.
After seeing the Portuguese creep off his line to keep out his first effort, Ibrahimovic dispatched the to keep the capital club within two points of Hubert Fournier's side.
PSG looked to have taken the lead in the seventh minute, when Ibrahimovic latched on to a long ball from Thiago Silva and powered home, but the Sweden international was denied by the offside flag.
Corentin Tolisso was then unfortunate not to open the scoring at the other end as he struck the left-hand post with a fierce long-range drive, and PSG was denied again moments later - this time by the brilliance of Lyon goalkeeper Lopes.
Lopes produced a strong one-on-one save to prevent Edinson Cavani from breaking the deadlock after the Uruguay forward had been superbly played in by Ibrahimovic.
The visitors continued to dictate proceedings and would have deservedly gone ahead had David Luiz not nodded wide with the goal at his mercy after Cavani had flicked Thiago Motta's corner into his path.
PSG was made to pay for its profligacy in the 31st minute - N'Jie finishing off a well-worked team move.
Jordan Ferri whipped in a left-wing cross for N'Jie, who worked a superb one-two with Nabil Fekir before emphatically lashing the ball beyond Salvatore Sirigu.
Blanc's men will have been frustrated to go into the interval behind given their relative dominance, which became apparent again after the restart as Lopes continued to keep PSG at bay.
The Portuguese shot-stopper produced two fantastic diving saves to keep out two close-range Ibrahimovic headers in the space of three minutes.
Cavani then failed to get enough purchase on a low cross from Blaise Matuidi and was thwarted by Lopes again shortly after when through on goal following Thiago Motta's excellent throughball.
PSG finally did break Lopes' resistance in the 69th minute, though.
Lindsay Rose conceded the spot kick for hacking down Marco Verratti in the box, but Lopes looked to have saved the day with a diving save to his left from Ibrahimovic's initial penalty.
However, referee Clement Turpin intervened and ordered a retake, which the Swede duly powered into the top left-hand corner, with Lopes having moved off his line and players encroaching on the first attempt.
A last-ditch challenge from Marquinhos prevented Fekir from restoring Lyon's advantage, as PSG settled for a result that at least prevents the leaders from taking control of an enthralling title race.