The second-year driver, who joined Andretti from AJ Foyt Enterprises for 2023, started on pole before leading 53 of the 85 laps, briefly losing the lead to Josef Newgarden of Team Penske.
But a great overcut on both Newgarden and Grosjean at the second pitstop saw him emerge in front and hold steady to the end, crossing the line a second ahead of his team-mate.
He took victory in his 20th IndyCar outing ahead of former Formula 1 drivers Grosjean and Chip Ganassi Racing’s Marcus Ericsson, who takes the lead of the championship.
Kirkwood made a strong start despite pressure from the outside from Ericsson, but the best start came from Newgarden, up from eighth to fourth, ahead of Pato O’Ward’s Arrow McLaren, and the Chip Ganassi Racing pair of Alex Palou and Scott Dixon.
The yellow flags came quickly after Meyer Shank Racing’s Helio Castroneves spun out of Turn 1 and struck the wall, breaking his nosecone and bending his steering.
He got it back to the pits and rejoined a lap down at the restart, which saw O’Ward lose out to both Palou and Dixon, as he struggled on his primaries and fell to seventh.
On lap 19, Newgarden got the run on Grosjean down the front straight and neatly outbraked the Andretti car into Turn 1 before closing on Ericsson, who was now 1.7sec down on Kirkwood.
But the following lap, the race was neutralised again after O’Ward made a late attack on Dixon at Turn 8, before the back straight, and the Ganassi car bounced off the McLaren and skidded nose-first into the tyre wall.
Most front runners took the opportunity to pit, and the #2 Penske crew finished just in time for Newgarden to fishtail out of his pitbox just a nosecone ahead of Ericsson.
Juncos Hollinger Racing left Agustin Canapino out, so he took the lead ahead of Kirkwood, now on primaries, chased by Newgarden on alternates.
The restart saw Canapino retain his lead, before he clipped the inside wall at Turn 6, and slowed Kirkwood’s momentum, allowing Newgarden to pass the pair of them and grab the lead.
O’Ward, who had made a strong restart, then tried to take advantage of Kirkwood to dive down the inside at Turn 8 but made the move too late.
His left-front made contact with the erstwhile leader, and spun the McLaren into the tyres, heavily delaying several front runners, including Palou who dropped to 12th and Ericsson who fell to seventh.
The muddle left Newgarden leading Kirkwood and Grosjean, with Team Penske’s Scott McLaughlin a major beneficiary up to fourth ahead of Andretti driver Colton Herta.
Ericsson clawed sixth place back from Alexander Rossi on lap 29, while O’Ward ran 13th and radioed in that his car remained undamaged.
Dixon’s sorry day came to an end on lap 38, as he was seen cruising with no oil pressure and limped the #9 Ganassi machine back to the paddock.
Fellow Kiwi McLaughlin on alternates lost two places on lap 43, with Herta passing him into Turn 1, and Ericsson grabbing fifth under braking for Turn 6.
His troubles continued as Rossi, Scott Power, Felix Rosenqvist and Marcus Armstrong demoted him to tenth. He was finally bumped out of the Top 10 by the recovering Palou by lap 48.
Ericsson made it past Herta at Turn 1 four tours later, taking the final podium spot, before Newgarden pitted from the lead at the end of Lap 52, with O’Ward following him in.
Grosjean came in the following lap, with Kirkwood extending his stint a further lap, with Grosjean managing to emerge ahead of Newgarden – and retain his spot – with Kirkwood making his overcut work too to emerge in front.
With 30 laps to go in the 85-lap race, Kirkwood and Grosjean ran 1-2 for Andretti, 1.7sec apart, with Newgarden, Ericsson, Herta, Rossi, Palou and Power completing the top eight.
Palou passed Rossi for sixth on lap 58, and he wasn’t the only Ganassi driver on the move, as Ericsson sliced inside Newgarden for third on lap 60.
With Newgarden receiving dire warnings over fuel consumption from his team, he conceded fourth to Herta with 23 laps to go and fifth to Palou on lap 66.
Into the final 10 laps, Kirkwood maintained a 1.6sec lead over Grosjean who had the same margin over Ericsson, but with five laps to go these gaps compressed.
Lap 80 saw Rossi get around the miserable Newgarden, who also had to let team-mate Power through, then Rosenqvist.
Herta secured fourth, with Palou and Power behind him in fifth and sixth respectively.
Rosenqvist finished seventh for Arrow McLaren ahead of CGR rookie Marcus Armstrong, with Newgarden and McLaughlin rounding off the top 10.
Ericsson leads the championship by 15 points from O’Ward, with Palou a further four points back on 91.
IndyCar returns on 30 April for the Indy Grand Prix of Alabama at Barber Motorsports Park.