Karierę piłkarską rozpoczął w 2004, w drużynie Chrzciciel Tychy, a następnie dołączył do nowo powstałego zespołu Grom Tychy[1]. W 2012 został przeniesiony do juniorów GKS Tychy. Na początku 2016 został włączony do kadry pierwszej drużyny GKS Tychy, ale nie zdołał w niej zadebiutować[2].
Po zakończeniu sezonu 2015/2016 za pośrednictwem agenta Michele′a Thiry′ego został przetransferowany do belgijskiego klubu RSC Anderlecht, w którego akademii szkolił się przez kolejne dwa i pół roku. Z juniorami Anderlechtu w sezonie 2016/2017 zdobył mistrzostwo Belgii U-17[3]. Rozegrał także 5 spotkań w Lidze Młodzieżowej UEFA[4].
Podbrezová
16 stycznia 2019 został zawodnikiem występującego w słowackiej Fortuna lidze, klubu FK Železiarne Podbrezová[5]. Kwota transferu wyniosła 10 tysięcy euro[6]. W lidze zadebiutował 16 lutego 2019 w wygranym 3:1 spotkaniu z FC Nitra. 2 marca 2019 w zremisowanym 1:1 meczu z AS Trenčín zdobył swoją pierwszą bramkę w seniorskiej karierze[7], która została wybrana golem miesiąca w Fortuna lidze[8]. W sezonie 2018/2019 był podstawowym obrońcą i rozegrał 14 ligowych spotkań, jednakże jego drużyna zajmując przedostatnie miejsce w tabeli, spadła z ligi.
MŠK Žilina
2 sierpnia 2019 za 250 tysięcy euro został wykupiony przez MŠK Žilina[4], czwarty zespół poprzedniego sezonu Fortuna ligi. 10 sierpnia 2019 zadebiutował wchodząc jako rezerwowy w wygranym 3:2 meczu z MFK Ružomberok[9]. Kolejny sezon - 2020/2021 rozpoczął jako podstawowy środkowy obrońca drużyny i utrzymał swoją pozycję do końca rozgrywek. 30 sierpnia 2020 w ligowym meczu z Zemplin Michalovce zdobył swoją pierwszą bramkę dla klubu[10]. 19 maja 2021 wystąpił i zdobył bramkę w finale Pucharu Słowacji, w którym jego drużyna przegrała 1:2 po dogrywce ze Slovanem Bratysława[11]. Po zakończeniu rozgrywek został wybrany do jedenastki sezonu Fortuna ligi[12]. W pierwszej części sezonu 2021/2022 wystąpił z drużyną w kwalifikacjach do Ligi Konferencji Europy UEFA. Rozegrał w tych rozgrywkach osiem spotkań, natomiast w fazie play-off jego zespół uległ w dwumeczu drużynie FK Jablonec[13]. 22 sierpnia 2022 zdobył bramkę w wygranym 3:0 ligowym meczu z FK Senica[14].
Spezia Calcio
31 sierpnia 2021 za 1,5 mln euro pozyskała go Spezia Calcio[4]. Kiwior związał się z włoskim klubem czteroletnim kontraktem[15]. 16 grudnia 2021 zadebiutował w meczu 15. kolejki Serie A z Interem Mediolan na Stadio Giuseppe Meazza[16]. Kiwior rozegrał pełne 90 minut jako środkowy obrońca, a mecz zakończył się porażką jego drużyny 0:2[17]. Kolejny mecz spędził na ławce rezerwowych, natomiast od spotkania z Romą w 17. kolejce (0:1), w którym wystąpił jako defensywny pomocnik, został podstawowym zawodnikiem drużyny do końca sezonu, występując właśnie na tej pozycji[18]. Sezon 2022/2023 rozpoczął jako podstawowy środkowy obrońca drużyny[19].
Arsenal
23 stycznia 2023 za 25 mln euro został piłkarzem Arsenalu[20]. Kiwior podpisał z angielskim klubem pięcioipółletni kontrakt, jako czwarty Polak w historii klubu[21], a kwota transferu uczyniła go piątym najdroższym polskim piłkarzem w historii[22] i najdrożej sprzedanym piłkarzem w historii Spezii[23]. 9 marca 2023 zadebiutował rozgrywając 71 minut w zremisowanym 2:2 meczu 1/8 finałuLigi Europy UEFA ze Sportingiem CP[24]. 19 marca 2023 w meczu z Crystal Palace (4:1) zadebiutował w Premier League, zmieniając w 86. minucie gry Gabriela Magalhãesa[25]. 28 maja 2023 w meczu 38. kolejki Premier League z Wolverhampton Wanderers (5:0), zdobył swoją pierwszą bramkę dla klubu[26].
Podczas rundy jesiennej Kiwior rzadko pojawiał się w podstawowym składzie (rozegrał tylko dwa pełne spotkania w Premier League). Z tego powodu zarówno polskie, jak i zagraniczne media spekulowały o możliwym transferze reprezentanta Polski[30][31]. Kiwior został jednak w Arsenalu. 24 lutego 2024 zdobył pierwszą bramkę w sezonie 2023/2024, trafiając w wygranym 4:1 meczu przeciwko Newcastle United[32].
17 maja 2022 selekcjoner Czesław Michniewicz powołał go do reprezentacji Polski na mecz dywizji A Ligi Narodów UEFA z Holandią i Belgią[34]. 11 czerwca 2022 zadebiutował w reprezentacji Polski w zremisowanym 2:2 meczu Ligi Narodów z Holandią[35]. Następnie 14 czerwca rozegrał całe spotkane z Belgią (0:1)[36]. 12 września 2022 został powołany na kolejny mecz Holandią i spotkanie z reprezentacją Walii, podczas rozgrywek Ligi Narodów[37]. W obu spotkaniach zakończonych odpowiednio wynikami 0:2, 1:0, wystąpił w podstawowym składzie.
10 listopada 2022 Czesław Michniewicz powołał go na Mistrzostwa Świata 2022[38]. 16 listopada rozegrał całe spotkanie towarzyskie z Chile (1:0)[39]. Na Mundialu był podstawowym środkowym obrońcą reprezentacji Polski – 22 listopada wystąpił w podstawowym składzie w zremisowanym 0:0 meczu z Meksykiem[40], a następnie w wygranym 2:0 meczu z Arabią Saudyjską i przegranym 0:2 spotkaniu z Argentyną. Wystąpił w pierwszym składzie również w meczu 1/8 finału Mistrzostw Świata, gdzie Polska po porażce z Francją (1:3) odpadła z turnieju[41].
W marcu 2023 znalazł się na pierwszej liście powołań Fernando Santosa i był podstawowym środkowym obrońcą drużyny w meczach eliminacji Mistrzostw Europy 2024 z Czechami (1:3) i Albanią (1:0)[42]. 16 czerwca 2023 w towarzyskim meczu z Niemcami zdobył swoją pierwszą bramkę w reprezentacji Polski, zapewniając drużynie narodowej zwycięstwo 1:0[43].