The Sky Blues opened the scoring through Cole Palmer, but Leandro Trossard‘s equaliser late in stoppage time sent the game to penalties.
Manchester City dominated the ball in the first half but struggled to create quality chances.
The Gunners saw summer signing Kai Havertz and Gabriel Martinelli miss one chance each before the half an hour mark.
The Germany international squandered a second goal-opportunity just before the break, when he was denied by Stefan Ortega.
Pep Guardiola‘s men got off to a strong start in the second half, with Aaron Ramsdale pulling off a save to prevent John Stones‘ header from ending into the back of the net.
The Catalan coach replaced Erling Haaland with Cole Palmer in the 64th minute and his decision paid dividends, as the talented forward broke the deadlock nine minutes later.
Arsenal pushed for an equaliser and managed to level the scores 11 minutes into added time, when Bukayo Saka found Trossard, whose deflected strike went past Ortega.
The game went straight to penalties, where Kevin de Bruyne hit the crossbar and Rodri failed to beat Ramsdale.
Arsenal didn’t miss from the spot, with Martin Odegaard, Trossard, Saka and Fabio Vieira netting one each to help the Gunners clinch the Community Shield.
Declan Rice wins first Arsenal trophy
“I am buzzing, this is what I visioned when I joined,” Arsenal midfielder Declan Rice told ITV.
“City gave us what we expected, but I am buzzing, so happy. You have to have the patience against them, you have to have mini games within the game against them like the manager said to us before.
“To win today, my first for the club.
“I feel I’ve grown a lot in the last three weeks. There’s a lot of information to take in of what the manager wants. I’m eager to learn and keep improving.
“I’m sure we can achieve anything this season, we just need to remain focused.”