[{"data":1,"prerenderedAt":2965},["ShallowReactive",2],{"/fr-fr/blog/tutorial-security-scanning-in-air-gapped-environments":3,"navigation-fr-fr":2186,"banner-fr-fr":2619,"footer-fr-fr":2627,"blog-post-authors-fr-fr-Fernando Diaz":2866,"blog-related-posts-fr-fr-tutorial-security-scanning-in-air-gapped-environments":2881,"blog-promotions-fr-fr":2903,"next-steps-fr-fr":2956},{"id":4,"title":5,"authors":6,"body":8,"category":2164,"date":2165,"description":2166,"extension":2167,"externalUrl":2168,"faq":2168,"featured":160,"heroImage":2169,"meta":2170,"navigation":160,"path":2171,"seo":2172,"slug":2177,"stem":2178,"tags":2179,"template":2184,"updatedDate":2168,"__hash__":2185},"blogPosts/fr-fr/blog/tutorial-security-scanning-in-air-gapped-environments.md","Tutoriel : sécurisez vos environnements air-gapped",[7],"Fernando Diaz",{"type":9,"value":10,"toc":2151},"minimark",[11,15,18,53,56,69,74,77,128,143,189,192,199,206,213,220,226,231,237,255,261,266,272,277,280,301,308,543,546,659,665,669,672,684,687,691,700,705,1052,1057,1150,1159,1163,1166,1180,1183,1188,1191,1618,1621,1627,1632,1636,1639,1691,1695,1698,1920,1924,1933,1939,1944,1950,1953,1999,2007,2011,2014,2020,2026,2031,2037,2040,2054,2057,2063,2068,2074,2077,2103,2107,2110,2138,2147],[12,13,14],"p",{},"Les environnements air-gapped désignent des réseaux ou systèmes informatiques physiquement\nisolés de tout réseau non sécurisé, comme l'Internet public ou certains réseaux\nlocaux non protégés. Cette isolation vise à renforcer la sécurité, car elle protège les données sensibles et les infrastructures critiques contre les cyberattaques externes.",[12,16,17],{},"Elle présente les avantages suivants :",[19,20,21,29,35,41,47],"ul",{},[22,23,24,28],"li",{},[25,26,27],"strong",{},"Une sécurité renforcée"," : totalement déconnectés des réseaux externes,\nles environnements air-gapped réduisent considérablement les risques d'attaques à distance, d'infections par des logiciels malveillants et\nd'accès non autorisé aux données, un impératif pour les systèmes et\ndonnées les plus critiques.",[22,30,31,34],{},[25,32,33],{},"Une protection des données"," : l'air-gapping constitue une barrière quasi infranchissable contre\nl'exfiltration de données, puisqu'aucune connexion directe ne peut être exploitée par des attaquants\npour dérober des informations.",[22,36,37,40],{},[25,38,39],{},"Une résilience des infrastructures critiques"," : pour les systèmes qui pilotent des infrastructures\nvitales (centrales électriques, stations de traitement des eaux ou installations\nmilitaires), l'air-gapping empêche les cyberattaques susceptibles d'avoir des conséquences majeures.",[22,42,43,46],{},[25,44,45],{},"Une conformité réglementaire"," : de nombreux frameworks réglementaires imposent l'utilisation d'environnements air-gapped\npour certains types de données sensibles ou de systèmes critiques, notamment dans les secteurs\npublic, médical et financier.",[22,48,49,52],{},[25,50,51],{},"Une protection contre les logiciels malveillants"," : dépourvus de connexion réseau, ces systèmes sont naturellement protégés contre les infections\nprovenant de logiciels malveillants ou les attaques par ransomware via Internet.",[12,54,55],{},"Même isolés, les systèmes air-gapped ne sont pas totalement à l'abri des\nfailles de sécurité. D'où l'importance des scannings de sécurité réguliers pour les détecter\navant qu'elles ne soient exploitées. Dans cet article, vous découvrirez les différents types de\nscanners de sécurité proposés par GitLab, ainsi que la manière de les ajouter ou de les mettre à jour dans un\nenvironnement à connectivité limitée.",[57,58,59],"blockquote",{},[12,60,61],{},[25,62,63],{},[64,65,68],"a",{"href":66,"rel":67},"https://about.gitlab.com/fr-fr/free-trial/devsecops/?utm_medium=blog&utm_source=blog&utm_campaign=eg_emea_x_trial_x_fr_blog_fr",[],"→ Essayez GitLab Ultimate et GitLab Duo Enterprise gratuitement.",[70,71,73],"h2",{"id":72},"scanners-de-sécurité-gitlab-dans-les-environnements-air-gapped","Scanners de sécurité GitLab dans les environnements air-gapped",[12,75,76],{},"GitLab propose une gamme complète de scanners de sécurité couvrant l'ensemble du\ncycle de vie des applications. Les scanners compatibles avec les environnement air-gapped\nsont les suivants :",[19,78,79,86,93,100,107,114,121],{},[22,80,81],{},[64,82,85],{"href":83,"rel":84},"https://docs.gitlab.com/user/application_security/sast/#running-sast-in-an-offline-environment",[],"Test statique de sécurité des applications\n(SAST)",[22,87,88],{},[64,89,92],{"href":90,"rel":91},"https://docs.gitlab.com/user/application_security/dast/browser/configuration/offline_configuration/",[],"Test dynamique de sécurité des applications\n(DAST)",[22,94,95],{},[64,96,99],{"href":97,"rel":98},"https://docs.gitlab.com/user/application_security/secret_detection/pipeline/#offline-configuration",[],"Détection\ndes secrets",[22,101,102],{},[64,103,106],{"href":104,"rel":105},"https://docs.gitlab.com/user/application_security/container_scanning/#running-container-scanning-in-an-offline-environment",[],"Analyse\ndes conteneurs",[22,108,109],{},[64,110,113],{"href":111,"rel":112},"https://docs.gitlab.com/user/application_security/dependency_scanning/#offline-environment",[],"Analyse\ndes dépendances",[22,115,116],{},[64,117,120],{"href":118,"rel":119},"https://docs.gitlab.com/user/application_security/api_fuzzing/configuration/offline_configuration/",[],"Test de l'API\npar injection de données aléatoires",[22,122,123],{},[64,124,127],{"href":125,"rel":126},"https://docs.gitlab.com/user/compliance/license_scanning_of_cyclonedx_files/#running-in-an-offline-environment",[],"Analyse\ndes licences",[12,129,130,131,136,137,142],{},"Par défaut, les instances GitLab Self-Managed effectuent un pull des images du scanner de sécurité\ndepuis le registre de conteneurs public GitLab (registry.gitlab.com) avant de les stocker dans le ",[64,132,135],{"href":133,"rel":134},"https://docs.gitlab.com/user/packages/container_registry/",[],"registre de conteneurs\nlocal",". L'exemple\nci-dessous illustre ce flux à travers l'exécution d'un pipeline qui\nanalyse les secrets d'un ",[64,138,141],{"href":139,"rel":140},"https://gitlab.com/gitlab-da/tutorials/security-and-governance/owasp/juice-shop",[],"projet\nde démonstration"," :",[144,145,150],"pre",{"className":146,"code":147,"language":148,"meta":149,"style":149},"language-yaml shiki shiki-themes github-light","\ninclude:\n  - template: Jobs/Secret-Detection.gitlab-ci.yml\n","yaml","",[151,152,153,162,173],"code",{"__ignoreMap":149},[154,155,158],"span",{"class":156,"line":157},"line",1,[154,159,161],{"emptyLinePlaceholder":160},true,"\n",[154,163,165,169],{"class":156,"line":164},2,[154,166,168],{"class":167},"shJU0","include",[154,170,172],{"class":171},"sgsFI",":\n",[154,174,176,179,182,185],{"class":156,"line":175},3,[154,177,178],{"class":171},"  - ",[154,180,181],{"class":167},"template",[154,183,184],{"class":171},": ",[154,186,188],{"class":187},"sYBdl","Jobs/Secret-Detection.gitlab-ci.yml\n",[12,190,191],{},"Lorsque le job s'exécute sur une instance GitLab connectée à Internet, il\ns'effectue correctement :",[12,193,194],{},[195,196],"img",{"alt":197,"src":198},"GitLab Runner avec un accès Internet qui effectue correctement un pull depuis le registre\nexterne","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099328/Blog/Content%20Images/Blog/Content%20Images/pass-1_aHR0cHM6_1750099328577.png",[200,201,202],"center",{},[203,204,205],"i",{},"GitLab Runner avec un accès Internet qui effectue correctement un pull depuis le\nregistre externe",[12,207,208,211],{},[209,210],"br",{},[209,212],{},[12,214,215,216,219],{},"En revanche, si l'accès Internet est désactivé sur la machine virtuelle hébergeant GitLab, le job\n",[151,217,218],{},"secret-detection"," ne parviendra pas à télécharger l'image de conteneur et provoquera son échec :",[12,221,222],{},[195,223],{"alt":224,"src":225},"GitLab Runner sans accès Internet qui ne parvient pas à effectuer un pull depuis le registre\nexterne","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099328/Blog/Content%20Images/Blog/Content%20Images/fail-1_aHR0cHM6_1750099328577.png",[200,227,228],{},[203,229,230],{},"GitLab Runner sans accès Internet qui ne parvient pas à effectuer un pull depuis le\nregistre externe",[12,232,233,235],{},[209,234],{},[209,236],{},[12,238,239,240,243,244,247,248,254],{},"Sinon, en définissant la politique de pull d'image de nos GitLab Runners sur\n",[151,241,242],{},"if-not-present"," plutôt que ",[151,245,246],{},"always",", nous pouvons charger la version mise en cache du scanner localement, à condition qu'il ait déjà été exécuté avec un accès à Internet en réutilisant l'image stockée dans notre registre ",[64,249,253],{"href":250,"rel":251,"title":252},"https://about.gitlab.com/fr-fr/blog/what-is-docker-comprehensive-guide/",[],"Qu'est-ce que Docker ?","Docker","\nlocal :",[12,256,257],{},[195,258],{"alt":259,"src":260},"GitLab Runner sans accès Internet qui effectue correctement un pull depuis le cache\ndu registre\ninterne","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099329/Blog/Content%20Images/Blog/Content%20Images/pass-2_aHR0cHM6_1750099328579.png",[200,262,263],{},[203,264,265],{},"GitLab Runner sans accès Internet qui effectue correctement un pull depuis le\ncache du registre interne",[12,267,268,270],{},[209,269],{},[209,271],{},[273,274,276],"h3",{"id":275},"configuration-des-prérequis-pour-des-scannings-hors-ligne","Configuration des prérequis pour des scannings hors ligne",[12,278,279],{},"L'exécution des scanners de sécurité dans un environnement air-gapped nécessite les\néléments suivants :",[19,281,282,290,298],{},[22,283,284,285],{},"Un ",[64,286,289],{"href":287,"rel":288},"https://about.gitlab.com/fr-fr/pricing/ultimate/",[],"abonnement\nGitLab Ultimate",[22,291,292,293],{},"Une ",[64,294,297],{"href":295,"rel":296},"https://about.gitlab.com/fr-fr/pricing/licensing-faq/cloud-licensing/",[],"licence cloud\nhors ligne",[22,299,300],{},"Un cluster GitLab Self-Managed",[12,302,303,304,307],{},"Vous pouvez suivre ce tutoriel sur n'importe quelle instance\nGitLab Self-Managed EE (même celles qui ne sont pas air-gapped) afin d'apprendre à transférer et à\nexécuter des images dans un environnement air-gapped. Dans ce tutoriel, nous vous expliquerons comment charger les images des scanners sur une instance GitLab EE hébergée sur\nune machine virtuelle (MV) Google Compute, où nous avons bloqué toute sortie ",[151,305,306],{},"EGRESS"," en\nmettant en place des règles de pare-feu :",[144,309,313],{"className":310,"code":311,"language":312,"meta":149,"style":149},"language-bash shiki shiki-themes github-light","\n# egress firewall rule to block all outbound traffic to the internet\n\n$ gcloud compute firewall-rules create deny-internet-egress \\\n    --direction=EGRESS \\\n    --priority=1000 \\\n    --network=default \\\n    --action=DENY \\\n    --rules=all \\\n    --destination-ranges=0.0.0.0/0 \\\n    --target-tags=no-internet\n\n# Create an allow rule for internal traffic with higher priority\n\n$ gcloud compute firewall-rules create allow-internal-egress \\\n    --direction=EGRESS \\\n    --priority=900 \\\n    --network=default \\\n    --action=ALLOW \\\n    --rules=all \\\n    --destination-ranges=10.0.0.0/8,192.168.0.0/16,172.16.0.0/12 \\\n    --target-tags=no-internet\n\n# Apply tag to VM\n\n$ gcloud compute instances add-tags YOUR_VM_NAME \\\n    --zone=YOUR_ZONE \\\n    --tags=no-internet\n","bash",[151,314,315,319,325,329,355,363,371,379,387,395,403,409,414,420,425,443,450,458,465,473,480,488,493,498,504,509,529,537],{"__ignoreMap":149},[154,316,317],{"class":156,"line":157},[154,318,161],{"emptyLinePlaceholder":160},[154,320,321],{"class":156,"line":164},[154,322,324],{"class":323},"sAwPA","# egress firewall rule to block all outbound traffic to the internet\n",[154,326,327],{"class":156,"line":175},[154,328,161],{"emptyLinePlaceholder":160},[154,330,332,336,339,342,345,348,351],{"class":156,"line":331},4,[154,333,335],{"class":334},"s7eDp","$",[154,337,338],{"class":187}," gcloud",[154,340,341],{"class":187}," compute",[154,343,344],{"class":187}," firewall-rules",[154,346,347],{"class":187}," create",[154,349,350],{"class":187}," deny-internet-egress",[154,352,354],{"class":353},"sYu0t"," \\\n",[154,356,358,361],{"class":156,"line":357},5,[154,359,360],{"class":353},"    --direction=EGRESS",[154,362,354],{"class":353},[154,364,366,369],{"class":156,"line":365},6,[154,367,368],{"class":353},"    --priority=1000",[154,370,354],{"class":353},[154,372,374,377],{"class":156,"line":373},7,[154,375,376],{"class":353},"    --network=default",[154,378,354],{"class":353},[154,380,382,385],{"class":156,"line":381},8,[154,383,384],{"class":353},"    --action=DENY",[154,386,354],{"class":353},[154,388,390,393],{"class":156,"line":389},9,[154,391,392],{"class":353},"    --rules=all",[154,394,354],{"class":353},[154,396,398,401],{"class":156,"line":397},10,[154,399,400],{"class":353},"    --destination-ranges=0.0.0.0/0",[154,402,354],{"class":353},[154,404,406],{"class":156,"line":405},11,[154,407,408],{"class":353},"    --target-tags=no-internet\n",[154,410,412],{"class":156,"line":411},12,[154,413,161],{"emptyLinePlaceholder":160},[154,415,417],{"class":156,"line":416},13,[154,418,419],{"class":323},"# Create an allow rule for internal traffic with higher priority\n",[154,421,423],{"class":156,"line":422},14,[154,424,161],{"emptyLinePlaceholder":160},[154,426,428,430,432,434,436,438,441],{"class":156,"line":427},15,[154,429,335],{"class":334},[154,431,338],{"class":187},[154,433,341],{"class":187},[154,435,344],{"class":187},[154,437,347],{"class":187},[154,439,440],{"class":187}," allow-internal-egress",[154,442,354],{"class":353},[154,444,446,448],{"class":156,"line":445},16,[154,447,360],{"class":353},[154,449,354],{"class":353},[154,451,453,456],{"class":156,"line":452},17,[154,454,455],{"class":353},"    --priority=900",[154,457,354],{"class":353},[154,459,461,463],{"class":156,"line":460},18,[154,462,376],{"class":353},[154,464,354],{"class":353},[154,466,468,471],{"class":156,"line":467},19,[154,469,470],{"class":353},"    --action=ALLOW",[154,472,354],{"class":353},[154,474,476,478],{"class":156,"line":475},20,[154,477,392],{"class":353},[154,479,354],{"class":353},[154,481,483,486],{"class":156,"line":482},21,[154,484,485],{"class":353},"    --destination-ranges=10.0.0.0/8,192.168.0.0/16,172.16.0.0/12",[154,487,354],{"class":353},[154,489,491],{"class":156,"line":490},22,[154,492,408],{"class":353},[154,494,496],{"class":156,"line":495},23,[154,497,161],{"emptyLinePlaceholder":160},[154,499,501],{"class":156,"line":500},24,[154,502,503],{"class":323},"# Apply tag to VM\n",[154,505,507],{"class":156,"line":506},25,[154,508,161],{"emptyLinePlaceholder":160},[154,510,512,514,516,518,521,524,527],{"class":156,"line":511},26,[154,513,335],{"class":334},[154,515,338],{"class":187},[154,517,341],{"class":187},[154,519,520],{"class":187}," instances",[154,522,523],{"class":187}," add-tags",[154,525,526],{"class":187}," YOUR_VM_NAME",[154,528,354],{"class":353},[154,530,532,535],{"class":156,"line":531},27,[154,533,534],{"class":353},"    --zone=YOUR_ZONE",[154,536,354],{"class":353},[154,538,540],{"class":156,"line":539},28,[154,541,542],{"class":353},"    --tags=no-internet\n",[12,544,545],{},"Ensuite, une fois que nous avons accédé à notre MV via SSH, vous pouvez constater que nous ne pouvons\npas nous connecter à registry.gitlab.com :",[144,547,549],{"className":310,"code":548,"language":312,"meta":149,"style":149},"\n# showing I can't access the gitlab container registry\n\n$ ping registry.gitlab.com\n\nPING registry.gitlab.com (35.227.35.254) 56(84) bytes of data.\n\n^C\n\n--- registry.gitlab.com ping statistics ---\n\n3 packets transmitted, 0 received, 100% packet loss, time 2031ms\n\n",[151,550,551,555,560,564,574,578,595,599,604,608,623,627],{"__ignoreMap":149},[154,552,553],{"class":156,"line":157},[154,554,161],{"emptyLinePlaceholder":160},[154,556,557],{"class":156,"line":164},[154,558,559],{"class":323},"# showing I can't access the gitlab container registry\n",[154,561,562],{"class":156,"line":175},[154,563,161],{"emptyLinePlaceholder":160},[154,565,566,568,571],{"class":156,"line":331},[154,567,335],{"class":334},[154,569,570],{"class":187}," ping",[154,572,573],{"class":187}," registry.gitlab.com\n",[154,575,576],{"class":156,"line":357},[154,577,161],{"emptyLinePlaceholder":160},[154,579,580,583,586,589,592],{"class":156,"line":365},[154,581,582],{"class":334},"PING",[154,584,585],{"class":187}," registry.gitlab.com",[154,587,588],{"class":171}," (35.227.35.254) 56(",[154,590,591],{"class":334},"84",[154,593,594],{"class":171},") bytes of data.\n",[154,596,597],{"class":156,"line":373},[154,598,161],{"emptyLinePlaceholder":160},[154,600,601],{"class":156,"line":381},[154,602,603],{"class":334},"^C\n",[154,605,606],{"class":156,"line":389},[154,607,161],{"emptyLinePlaceholder":160},[154,609,610,613,615,617,620],{"class":156,"line":397},[154,611,612],{"class":334},"---",[154,614,585],{"class":187},[154,616,570],{"class":187},[154,618,619],{"class":187}," statistics",[154,621,622],{"class":353}," ---\n",[154,624,625],{"class":156,"line":405},[154,626,161],{"emptyLinePlaceholder":160},[154,628,629,632,635,638,641,644,647,650,653,656],{"class":156,"line":411},[154,630,631],{"class":334},"3",[154,633,634],{"class":187}," packets",[154,636,637],{"class":187}," transmitted,",[154,639,640],{"class":353}," 0",[154,642,643],{"class":187}," received,",[154,645,646],{"class":187}," 100%",[154,648,649],{"class":187}," packet",[154,651,652],{"class":187}," loss,",[154,654,655],{"class":187}," time",[154,657,658],{"class":187}," 2031ms\n",[12,660,661,664],{},[25,662,663],{},"Remarque :"," nous autorisons toujours l'Ingress afin de pouvoir copier des fichiers et des SSH dans la\nmachine.",[70,666,668],{"id":667},"charger-des-scanners-de-sécurité-dans-les-environnements-air-gapped","Charger des scanners de sécurité dans les environnements air-gapped",[12,670,671],{},"Pour exécuter les différents scanners de sécurité dans des environnements air-gapped, GitLab\nRunner doit pouvoir récupérer les images de conteneur des scanners depuis le registre de conteneurs intégré\nde GitLab. Ces images doivent donc\nêtre préalablement téléchargées et empaquetées dans un environnement\ndisposant d'un accès à l'Internet public. Le processus de chargement des scanners de sécurité\ndans un environnement air-gapped se déroule en trois étapes :",[673,674,675,678,681],"ol",{},[22,676,677],{},"Télécharger et empaqueter les images de conteneurs depuis l'Internet public.",[22,679,680],{},"Transférer les images vers l'environnement hors ligne.",[22,682,683],{},"Charger les images transférées dans le registre de conteneurs hors ligne.",[12,685,686],{},"Voyons maintenant comment configurer la détection des secrets de GitLab dans un environnement\nair-gapped.",[273,688,690],{"id":689},"télécharger-et-empaqueter-les-images-de-conteneurs-depuis-linternet-public","Télécharger et empaqueter les images de conteneurs depuis l'Internet public",[12,692,693,694,699],{},"Commençons par télécharger l'image de conteneur dédiée à la détection des secrets et par l'enregistrer dans\nnotre registre de conteneurs local. D'autres images de scanners sont disponibles dans la\n",[64,695,698],{"href":696,"rel":697},"https://docs.gitlab.com/user/application_security/offline_deployments/",[],"documentation GitLab\nsur les déploiements hors ligne",".\nDans cet exemple, nous utilisons Podman Desktop pour effectuer le téléchargement, mais vous pouvez tout aussi bien utiliser\nDocker Desktop ou tout autre outil équivalent.",[673,701,702],{},[22,703,704],{},"Effectuez un pull de l'image de détection des secrets de GitLab.",[144,706,708],{"className":310,"code":707,"language":312,"meta":149,"style":149},"\n$ podman pull registry.gitlab.com/security-products/secrets:6\n\nTrying to pull registry.gitlab.com/security-products/secrets:6...\n\nGetting image source signatures\n\nCopying blob\nsha256:999745130ac045f2b1c29ecce088b43fc4a95bbb82b7960fb7b8abe0e3801bf8\n\nCopying blob\nsha256:a4f7c013bb259c146cd8455b7c3943df7ed84b157e42a2348eef16546d8179b1\n\nCopying blob\nsha256:1f3e46996e2966e4faa5846e56e76e3748b7315e2ded61476c24403d592134f0\n\nCopying blob\nsha256:400a41f248eb3c870bd2b07073632c49f1e164c8efad56ea3b24098a657ec625\n\nCopying blob\nsha256:9090f17a5a1bb80bcc6f393b0715210568dd0a7749286e3334a1a08fb32d34e6\n\nCopying blob\nsha256:c7569783959081164164780f6c1b0bbe1271ee8d291d3e07b2749ae741621ea3\n\nCopying blob\nsha256:20c7ca6108f808ad5905f6db4f7e3c02b21b69abdea8b45abfa34c0a2ba8bdb5\n\nCopying blob\nsha256:e8645a00be64d77c6ff301593ce34cd8c17ffb2b36252ca0f2588009a7918d2e\n\nCopying config\nsha256:0235ed43fc7fb2852c76e2d6196601968ae0375c72a517bef714cd712600f894\n\nWriting manifest to image destination\n\nWARNING: image platform (linux/amd64) does not match the expected platform\n(linux/arm64)\n\n0235ed43fc7fb2852c76e2d6196601968ae0375c72a517bef714cd712600f894\n\n\n$ podman images\n\nREPOSITORY                                                  TAG\nIMAGE ID      CREATED      SIZE\n\nregistry.gitlab.com/security-products/secrets               6\n0235ed43fc7f  4 hours ago  85.3 MB\n\n",[151,709,710,714,727,731,744,748,762,766,774,779,783,789,794,798,804,809,813,819,824,828,834,839,843,849,854,858,864,869,873,880,886,891,899,905,910,926,931,945,957,962,968,973,978,988,993,1002,1017,1022,1031],{"__ignoreMap":149},[154,711,712],{"class":156,"line":157},[154,713,161],{"emptyLinePlaceholder":160},[154,715,716,718,721,724],{"class":156,"line":164},[154,717,335],{"class":334},[154,719,720],{"class":187}," podman",[154,722,723],{"class":187}," pull",[154,725,726],{"class":187}," registry.gitlab.com/security-products/secrets:6\n",[154,728,729],{"class":156,"line":175},[154,730,161],{"emptyLinePlaceholder":160},[154,732,733,736,739,741],{"class":156,"line":331},[154,734,735],{"class":334},"Trying",[154,737,738],{"class":187}," to",[154,740,723],{"class":187},[154,742,743],{"class":187}," registry.gitlab.com/security-products/secrets:6...\n",[154,745,746],{"class":156,"line":357},[154,747,161],{"emptyLinePlaceholder":160},[154,749,750,753,756,759],{"class":156,"line":365},[154,751,752],{"class":334},"Getting",[154,754,755],{"class":187}," image",[154,757,758],{"class":187}," source",[154,760,761],{"class":187}," signatures\n",[154,763,764],{"class":156,"line":373},[154,765,161],{"emptyLinePlaceholder":160},[154,767,768,771],{"class":156,"line":381},[154,769,770],{"class":334},"Copying",[154,772,773],{"class":187}," blob\n",[154,775,776],{"class":156,"line":389},[154,777,778],{"class":334},"sha256:999745130ac045f2b1c29ecce088b43fc4a95bbb82b7960fb7b8abe0e3801bf8\n",[154,780,781],{"class":156,"line":397},[154,782,161],{"emptyLinePlaceholder":160},[154,784,785,787],{"class":156,"line":405},[154,786,770],{"class":334},[154,788,773],{"class":187},[154,790,791],{"class":156,"line":411},[154,792,793],{"class":334},"sha256:a4f7c013bb259c146cd8455b7c3943df7ed84b157e42a2348eef16546d8179b1\n",[154,795,796],{"class":156,"line":416},[154,797,161],{"emptyLinePlaceholder":160},[154,799,800,802],{"class":156,"line":422},[154,801,770],{"class":334},[154,803,773],{"class":187},[154,805,806],{"class":156,"line":427},[154,807,808],{"class":334},"sha256:1f3e46996e2966e4faa5846e56e76e3748b7315e2ded61476c24403d592134f0\n",[154,810,811],{"class":156,"line":445},[154,812,161],{"emptyLinePlaceholder":160},[154,814,815,817],{"class":156,"line":452},[154,816,770],{"class":334},[154,818,773],{"class":187},[154,820,821],{"class":156,"line":460},[154,822,823],{"class":334},"sha256:400a41f248eb3c870bd2b07073632c49f1e164c8efad56ea3b24098a657ec625\n",[154,825,826],{"class":156,"line":467},[154,827,161],{"emptyLinePlaceholder":160},[154,829,830,832],{"class":156,"line":475},[154,831,770],{"class":334},[154,833,773],{"class":187},[154,835,836],{"class":156,"line":482},[154,837,838],{"class":334},"sha256:9090f17a5a1bb80bcc6f393b0715210568dd0a7749286e3334a1a08fb32d34e6\n",[154,840,841],{"class":156,"line":490},[154,842,161],{"emptyLinePlaceholder":160},[154,844,845,847],{"class":156,"line":495},[154,846,770],{"class":334},[154,848,773],{"class":187},[154,850,851],{"class":156,"line":500},[154,852,853],{"class":334},"sha256:c7569783959081164164780f6c1b0bbe1271ee8d291d3e07b2749ae741621ea3\n",[154,855,856],{"class":156,"line":506},[154,857,161],{"emptyLinePlaceholder":160},[154,859,860,862],{"class":156,"line":511},[154,861,770],{"class":334},[154,863,773],{"class":187},[154,865,866],{"class":156,"line":531},[154,867,868],{"class":334},"sha256:20c7ca6108f808ad5905f6db4f7e3c02b21b69abdea8b45abfa34c0a2ba8bdb5\n",[154,870,871],{"class":156,"line":539},[154,872,161],{"emptyLinePlaceholder":160},[154,874,876,878],{"class":156,"line":875},29,[154,877,770],{"class":334},[154,879,773],{"class":187},[154,881,883],{"class":156,"line":882},30,[154,884,885],{"class":334},"sha256:e8645a00be64d77c6ff301593ce34cd8c17ffb2b36252ca0f2588009a7918d2e\n",[154,887,889],{"class":156,"line":888},31,[154,890,161],{"emptyLinePlaceholder":160},[154,892,894,896],{"class":156,"line":893},32,[154,895,770],{"class":334},[154,897,898],{"class":187}," config\n",[154,900,902],{"class":156,"line":901},33,[154,903,904],{"class":334},"sha256:0235ed43fc7fb2852c76e2d6196601968ae0375c72a517bef714cd712600f894\n",[154,906,908],{"class":156,"line":907},34,[154,909,161],{"emptyLinePlaceholder":160},[154,911,913,916,919,921,923],{"class":156,"line":912},35,[154,914,915],{"class":334},"Writing",[154,917,918],{"class":187}," manifest",[154,920,738],{"class":187},[154,922,755],{"class":187},[154,924,925],{"class":187}," destination\n",[154,927,929],{"class":156,"line":928},36,[154,930,161],{"emptyLinePlaceholder":160},[154,932,934,937,939,942],{"class":156,"line":933},37,[154,935,936],{"class":334},"WARNING:",[154,938,755],{"class":187},[154,940,941],{"class":187}," platform",[154,943,944],{"class":171}," (linux/amd64) does not match the expected platform\n",[154,946,948,951,954],{"class":156,"line":947},38,[154,949,950],{"class":171},"(",[154,952,953],{"class":334},"linux/arm64",[154,955,956],{"class":171},")\n",[154,958,960],{"class":156,"line":959},39,[154,961,161],{"emptyLinePlaceholder":160},[154,963,965],{"class":156,"line":964},40,[154,966,967],{"class":334},"0235ed43fc7fb2852c76e2d6196601968ae0375c72a517bef714cd712600f894\n",[154,969,971],{"class":156,"line":970},41,[154,972,161],{"emptyLinePlaceholder":160},[154,974,976],{"class":156,"line":975},42,[154,977,161],{"emptyLinePlaceholder":160},[154,979,981,983,985],{"class":156,"line":980},43,[154,982,335],{"class":334},[154,984,720],{"class":187},[154,986,987],{"class":187}," images\n",[154,989,991],{"class":156,"line":990},44,[154,992,161],{"emptyLinePlaceholder":160},[154,994,996,999],{"class":156,"line":995},45,[154,997,998],{"class":334},"REPOSITORY",[154,1000,1001],{"class":187},"                                                  TAG\n",[154,1003,1005,1008,1011,1014],{"class":156,"line":1004},46,[154,1006,1007],{"class":334},"IMAGE",[154,1009,1010],{"class":187}," ID",[154,1012,1013],{"class":187},"      CREATED",[154,1015,1016],{"class":187},"      SIZE\n",[154,1018,1020],{"class":156,"line":1019},47,[154,1021,161],{"emptyLinePlaceholder":160},[154,1023,1025,1028],{"class":156,"line":1024},48,[154,1026,1027],{"class":334},"registry.gitlab.com/security-products/secrets",[154,1029,1030],{"class":353},"               6\n",[154,1032,1034,1037,1040,1043,1046,1049],{"class":156,"line":1033},49,[154,1035,1036],{"class":334},"0235ed43fc7f",[154,1038,1039],{"class":353},"  4",[154,1041,1042],{"class":187}," hours",[154,1044,1045],{"class":187}," ago",[154,1047,1048],{"class":353},"  85.3",[154,1050,1051],{"class":187}," MB\n",[673,1053,1054],{"start":164},[22,1055,1056],{},"Enregistrez l'image sous forme d'archive compressée (fichier tarball).",[144,1058,1060],{"className":310,"code":1059,"language":312,"meta":149,"style":149},"\n$ podman save -o secret-detection.tar\nregistry.gitlab.com/security-products/secrets:6\n\n$ chmod +r secret-detection.tar\n\n$ ls -al secret-detection.tar\n\n-rw-r--r--@ 1 fern  staff  85324800 Jan 10 10:25 secret-detection.tar\n\n",[151,1061,1062,1066,1081,1086,1090,1102,1106,1118,1122],{"__ignoreMap":149},[154,1063,1064],{"class":156,"line":157},[154,1065,161],{"emptyLinePlaceholder":160},[154,1067,1068,1070,1072,1075,1078],{"class":156,"line":164},[154,1069,335],{"class":334},[154,1071,720],{"class":187},[154,1073,1074],{"class":187}," save",[154,1076,1077],{"class":353}," -o",[154,1079,1080],{"class":187}," secret-detection.tar\n",[154,1082,1083],{"class":156,"line":175},[154,1084,1085],{"class":334},"registry.gitlab.com/security-products/secrets:6\n",[154,1087,1088],{"class":156,"line":331},[154,1089,161],{"emptyLinePlaceholder":160},[154,1091,1092,1094,1097,1100],{"class":156,"line":357},[154,1093,335],{"class":334},[154,1095,1096],{"class":187}," chmod",[154,1098,1099],{"class":187}," +r",[154,1101,1080],{"class":187},[154,1103,1104],{"class":156,"line":365},[154,1105,161],{"emptyLinePlaceholder":160},[154,1107,1108,1110,1113,1116],{"class":156,"line":373},[154,1109,335],{"class":334},[154,1111,1112],{"class":187}," ls",[154,1114,1115],{"class":353}," -al",[154,1117,1080],{"class":187},[154,1119,1120],{"class":156,"line":381},[154,1121,161],{"emptyLinePlaceholder":160},[154,1123,1124,1127,1130,1133,1136,1139,1142,1145,1148],{"class":156,"line":389},[154,1125,1126],{"class":334},"-rw-r--r--@",[154,1128,1129],{"class":353}," 1",[154,1131,1132],{"class":187}," fern",[154,1134,1135],{"class":187},"  staff",[154,1137,1138],{"class":353},"  85324800",[154,1140,1141],{"class":187}," Jan",[154,1143,1144],{"class":353}," 10",[154,1146,1147],{"class":187}," 10:25",[154,1149,1080],{"class":187},[12,1151,1152,1153,1158],{},"Vous pouvez également utiliser le ",[64,1154,1157],{"href":1155,"rel":1156},"https://docs.gitlab.com/user/application_security/offline_deployments/#using-the-official-gitlab-template",[],"template\nGitLab officiel","\ndans un environnement connecté à Internet pour télécharger les images de conteneurs\nnécessaires aux scanners de sécurité, puis les enregistrer en tant qu'artefacts de job ou effectuer un push\nvers le registre de conteneurs du projet où s'exécute le pipeline.",[273,1160,1162],{"id":1161},"transférer-les-images-vers-un-environnement-hors-ligne","Transférer les images vers un environnement hors ligne",[12,1164,1165],{},"Transférons maintenant le tarball vers notre environnement air-gapped.\nPlusieurs méthodes sont possibles selon vos besoins :",[19,1167,1168,1171,1174,1177],{},[22,1169,1170],{},"Transfert de supports physiques",[22,1172,1173],{},"Diodes de données",[22,1175,1176],{},"Systèmes de protection",[22,1178,1179],{},"Solutions interdomaines (CDS)",[12,1181,1182],{},"Nous allons utiliser le protocole SCP (Secure Copy Protocol) pour copier directement le tarball sur notre machine virtuelle sans\naccès sortant, mais qui autorise l'Ingress. Cette procédure est présentée à titre de\ndémonstration uniquement. Avant toute mise en œuvre réelle, vérifiez toujours les\npolitiques de sécurité et les protocoles officiels de transfert de votre entreprise pour les environnements air-gapped.",[1184,1185,1187],"h4",{"id":1186},"vérifier-que-limage-nest-pas-mise-en-cache","Vérifier que l'image n'est pas mise en cache",[12,1189,1190],{},"Avant de transférer le fichier, nous allons supprimer les images Docker liées à la détection des secrets présentes sur notre instance\nGitLab afin d'éliminer toute version mise en cache :",[144,1192,1194],{"className":310,"code":1193,"language":312,"meta":149,"style":149},"\n$ docker images\n\nREPOSITORY\nTAG              IMAGE ID       CREATED        SIZE\n\nregistry.gitlab.com/security-products/secrets\n6                0235ed43fc7f   9 hours ago    84.8MB\n\nregistry.gitlab.com/security-products/secrets\n\u003Cnone>           16d88433af61   17 hours ago   74.9MB\n\n\n$ docker image rmi 16d88433af61 -f\n\nUntagged:\nregistry.gitlab.com/security-products/secrets@sha256:f331da6631d791fcd58d3f23d868475a520f50b02d64000e2faf1def66c75d48\n\nDeleted:\nsha256:16d88433af618f0b405945031de39fe40b3e8ef1bddb91ca036de0f5b32399d7\n\nDeleted:\nsha256:1bb06f72f06810e95a70039e797481736e492201f51a03b02d27db055248ab6f\n\nDeleted:\nsha256:a5ef2325ce4be9b39993ce301f8ed7aad1c854d7ee66f26a56a96967c6606510\n\nDeleted:\nsha256:f7cdac818a36d6c023763b76a6589c0db7609ca883306af4f38b819e62f29471\n\nDeleted:\nsha256:5eabf4d47287dee9887b9692d55c8b5f848b50b3b7248f67913036014e74a0e9\n\nDeleted:\nsha256:51b7cb600604c0737356f17bc02c22bac3a63697f0bf95ba7bacb5b421fdb7da\n\nDeleted:\nsha256:1546193b011d192aa769a15d3fdd55eb4e187f201f5ff7506243abb02525dc06\n\nDeleted:\nsha256:1ea72408d0484c3059cc0008539e6f494dc829caa1a97d156795687d42d9cb57\n\nDeleted:\nsha256:1313ee9da7716d85f63cfdd1129f715e9bbb6c9c0306e4708ee73672b3e40f26\n\nDeleted:\nsha256:954ebfd83406f0dfed93eb5157ba841af5426aa95d4054174fff45095fd873a1\n\n\n$ docker image rmi 0235ed43fc7f -f\n\nUntagged: registry.gitlab.com/security-products/secrets:6\n\nDeleted:\nsha256:0235ed43fc7fb2852c76e2d6196601968ae0375c72a517bef714cd712600f894\n\nDeleted:\nsha256:f05f85850cf4fac79e279d93afb6645c026de0223d07b396fce86c2f76096c1f\n\nDeleted:\nsha256:7432b0766b885144990edd3166fbabed081be71d28d186f4d525e52729f06b1f\n\nDeleted:\nsha256:2c6e3361c2ee2f43bd75fb9c7c12d981ce06df2d51a134965fa47754760efff0\n\nDeleted:\nsha256:7ad7f7245b45fbe758ebd5788e0ba268a56829715527a9a4bc51708c21af1c7f\n\nDeleted:\nsha256:3b73a621115a59564979f41552181dce07f3baa17e27428f7fff2155042a1901\n\nDeleted:\nsha256:78648c2606a7c4c76885806ed976b13e4d008940bd3d7a18b52948a6be71b60d\n\nDeleted:\nsha256:383d4a6dc5be9914878700809b4a3925379c80ab792dfe9e79d14b0c1d6b5fad\n\n",[151,1195,1196,1200,1209,1213,1218,1234,1238,1243,1261,1265,1269,1284,1288,1292,1309,1313,1318,1323,1327,1332,1337,1341,1345,1350,1354,1358,1363,1367,1371,1376,1380,1384,1389,1393,1397,1402,1406,1410,1415,1419,1423,1428,1432,1436,1441,1445,1449,1454,1458,1462,1478,1483,1491,1496,1501,1506,1511,1516,1522,1527,1532,1538,1543,1548,1554,1559,1564,1570,1575,1580,1586,1591,1596,1602,1607,1612],{"__ignoreMap":149},[154,1197,1198],{"class":156,"line":157},[154,1199,161],{"emptyLinePlaceholder":160},[154,1201,1202,1204,1207],{"class":156,"line":164},[154,1203,335],{"class":334},[154,1205,1206],{"class":187}," docker",[154,1208,987],{"class":187},[154,1210,1211],{"class":156,"line":175},[154,1212,161],{"emptyLinePlaceholder":160},[154,1214,1215],{"class":156,"line":331},[154,1216,1217],{"class":334},"REPOSITORY\n",[154,1219,1220,1223,1226,1228,1231],{"class":156,"line":357},[154,1221,1222],{"class":334},"TAG",[154,1224,1225],{"class":187},"              IMAGE",[154,1227,1010],{"class":187},[154,1229,1230],{"class":187},"       CREATED",[154,1232,1233],{"class":187},"        SIZE\n",[154,1235,1236],{"class":156,"line":365},[154,1237,161],{"emptyLinePlaceholder":160},[154,1239,1240],{"class":156,"line":373},[154,1241,1242],{"class":334},"registry.gitlab.com/security-products/secrets\n",[154,1244,1245,1248,1251,1254,1256,1258],{"class":156,"line":381},[154,1246,1247],{"class":334},"6",[154,1249,1250],{"class":187},"                0235ed43fc7f",[154,1252,1253],{"class":353},"   9",[154,1255,1042],{"class":187},[154,1257,1045],{"class":187},[154,1259,1260],{"class":187},"    84.8MB\n",[154,1262,1263],{"class":156,"line":389},[154,1264,161],{"emptyLinePlaceholder":160},[154,1266,1267],{"class":156,"line":397},[154,1268,1242],{"class":334},[154,1270,1271,1275,1278,1281],{"class":156,"line":405},[154,1272,1274],{"class":1273},"sD7c4","\u003C",[154,1276,1277],{"class":171},"none",[154,1279,1280],{"class":1273},">",[154,1282,1283],{"class":171},"           16d88433af61   17 hours ago   74.9MB\n",[154,1285,1286],{"class":156,"line":411},[154,1287,161],{"emptyLinePlaceholder":160},[154,1289,1290],{"class":156,"line":416},[154,1291,161],{"emptyLinePlaceholder":160},[154,1293,1294,1296,1298,1300,1303,1306],{"class":156,"line":422},[154,1295,335],{"class":334},[154,1297,1206],{"class":187},[154,1299,755],{"class":187},[154,1301,1302],{"class":187}," rmi",[154,1304,1305],{"class":187}," 16d88433af61",[154,1307,1308],{"class":353}," -f\n",[154,1310,1311],{"class":156,"line":427},[154,1312,161],{"emptyLinePlaceholder":160},[154,1314,1315],{"class":156,"line":445},[154,1316,1317],{"class":334},"Untagged:\n",[154,1319,1320],{"class":156,"line":452},[154,1321,1322],{"class":334},"registry.gitlab.com/security-products/secrets@sha256:f331da6631d791fcd58d3f23d868475a520f50b02d64000e2faf1def66c75d48\n",[154,1324,1325],{"class":156,"line":460},[154,1326,161],{"emptyLinePlaceholder":160},[154,1328,1329],{"class":156,"line":467},[154,1330,1331],{"class":334},"Deleted:\n",[154,1333,1334],{"class":156,"line":475},[154,1335,1336],{"class":334},"sha256:16d88433af618f0b405945031de39fe40b3e8ef1bddb91ca036de0f5b32399d7\n",[154,1338,1339],{"class":156,"line":482},[154,1340,161],{"emptyLinePlaceholder":160},[154,1342,1343],{"class":156,"line":490},[154,1344,1331],{"class":334},[154,1346,1347],{"class":156,"line":495},[154,1348,1349],{"class":334},"sha256:1bb06f72f06810e95a70039e797481736e492201f51a03b02d27db055248ab6f\n",[154,1351,1352],{"class":156,"line":500},[154,1353,161],{"emptyLinePlaceholder":160},[154,1355,1356],{"class":156,"line":506},[154,1357,1331],{"class":334},[154,1359,1360],{"class":156,"line":511},[154,1361,1362],{"class":334},"sha256:a5ef2325ce4be9b39993ce301f8ed7aad1c854d7ee66f26a56a96967c6606510\n",[154,1364,1365],{"class":156,"line":531},[154,1366,161],{"emptyLinePlaceholder":160},[154,1368,1369],{"class":156,"line":539},[154,1370,1331],{"class":334},[154,1372,1373],{"class":156,"line":875},[154,1374,1375],{"class":334},"sha256:f7cdac818a36d6c023763b76a6589c0db7609ca883306af4f38b819e62f29471\n",[154,1377,1378],{"class":156,"line":882},[154,1379,161],{"emptyLinePlaceholder":160},[154,1381,1382],{"class":156,"line":888},[154,1383,1331],{"class":334},[154,1385,1386],{"class":156,"line":893},[154,1387,1388],{"class":334},"sha256:5eabf4d47287dee9887b9692d55c8b5f848b50b3b7248f67913036014e74a0e9\n",[154,1390,1391],{"class":156,"line":901},[154,1392,161],{"emptyLinePlaceholder":160},[154,1394,1395],{"class":156,"line":907},[154,1396,1331],{"class":334},[154,1398,1399],{"class":156,"line":912},[154,1400,1401],{"class":334},"sha256:51b7cb600604c0737356f17bc02c22bac3a63697f0bf95ba7bacb5b421fdb7da\n",[154,1403,1404],{"class":156,"line":928},[154,1405,161],{"emptyLinePlaceholder":160},[154,1407,1408],{"class":156,"line":933},[154,1409,1331],{"class":334},[154,1411,1412],{"class":156,"line":947},[154,1413,1414],{"class":334},"sha256:1546193b011d192aa769a15d3fdd55eb4e187f201f5ff7506243abb02525dc06\n",[154,1416,1417],{"class":156,"line":959},[154,1418,161],{"emptyLinePlaceholder":160},[154,1420,1421],{"class":156,"line":964},[154,1422,1331],{"class":334},[154,1424,1425],{"class":156,"line":970},[154,1426,1427],{"class":334},"sha256:1ea72408d0484c3059cc0008539e6f494dc829caa1a97d156795687d42d9cb57\n",[154,1429,1430],{"class":156,"line":975},[154,1431,161],{"emptyLinePlaceholder":160},[154,1433,1434],{"class":156,"line":980},[154,1435,1331],{"class":334},[154,1437,1438],{"class":156,"line":990},[154,1439,1440],{"class":334},"sha256:1313ee9da7716d85f63cfdd1129f715e9bbb6c9c0306e4708ee73672b3e40f26\n",[154,1442,1443],{"class":156,"line":995},[154,1444,161],{"emptyLinePlaceholder":160},[154,1446,1447],{"class":156,"line":1004},[154,1448,1331],{"class":334},[154,1450,1451],{"class":156,"line":1019},[154,1452,1453],{"class":334},"sha256:954ebfd83406f0dfed93eb5157ba841af5426aa95d4054174fff45095fd873a1\n",[154,1455,1456],{"class":156,"line":1024},[154,1457,161],{"emptyLinePlaceholder":160},[154,1459,1460],{"class":156,"line":1033},[154,1461,161],{"emptyLinePlaceholder":160},[154,1463,1465,1467,1469,1471,1473,1476],{"class":156,"line":1464},50,[154,1466,335],{"class":334},[154,1468,1206],{"class":187},[154,1470,755],{"class":187},[154,1472,1302],{"class":187},[154,1474,1475],{"class":187}," 0235ed43fc7f",[154,1477,1308],{"class":353},[154,1479,1481],{"class":156,"line":1480},51,[154,1482,161],{"emptyLinePlaceholder":160},[154,1484,1486,1489],{"class":156,"line":1485},52,[154,1487,1488],{"class":334},"Untagged:",[154,1490,726],{"class":187},[154,1492,1494],{"class":156,"line":1493},53,[154,1495,161],{"emptyLinePlaceholder":160},[154,1497,1499],{"class":156,"line":1498},54,[154,1500,1331],{"class":334},[154,1502,1504],{"class":156,"line":1503},55,[154,1505,904],{"class":334},[154,1507,1509],{"class":156,"line":1508},56,[154,1510,161],{"emptyLinePlaceholder":160},[154,1512,1514],{"class":156,"line":1513},57,[154,1515,1331],{"class":334},[154,1517,1519],{"class":156,"line":1518},58,[154,1520,1521],{"class":334},"sha256:f05f85850cf4fac79e279d93afb6645c026de0223d07b396fce86c2f76096c1f\n",[154,1523,1525],{"class":156,"line":1524},59,[154,1526,161],{"emptyLinePlaceholder":160},[154,1528,1530],{"class":156,"line":1529},60,[154,1531,1331],{"class":334},[154,1533,1535],{"class":156,"line":1534},61,[154,1536,1537],{"class":334},"sha256:7432b0766b885144990edd3166fbabed081be71d28d186f4d525e52729f06b1f\n",[154,1539,1541],{"class":156,"line":1540},62,[154,1542,161],{"emptyLinePlaceholder":160},[154,1544,1546],{"class":156,"line":1545},63,[154,1547,1331],{"class":334},[154,1549,1551],{"class":156,"line":1550},64,[154,1552,1553],{"class":334},"sha256:2c6e3361c2ee2f43bd75fb9c7c12d981ce06df2d51a134965fa47754760efff0\n",[154,1555,1557],{"class":156,"line":1556},65,[154,1558,161],{"emptyLinePlaceholder":160},[154,1560,1562],{"class":156,"line":1561},66,[154,1563,1331],{"class":334},[154,1565,1567],{"class":156,"line":1566},67,[154,1568,1569],{"class":334},"sha256:7ad7f7245b45fbe758ebd5788e0ba268a56829715527a9a4bc51708c21af1c7f\n",[154,1571,1573],{"class":156,"line":1572},68,[154,1574,161],{"emptyLinePlaceholder":160},[154,1576,1578],{"class":156,"line":1577},69,[154,1579,1331],{"class":334},[154,1581,1583],{"class":156,"line":1582},70,[154,1584,1585],{"class":334},"sha256:3b73a621115a59564979f41552181dce07f3baa17e27428f7fff2155042a1901\n",[154,1587,1589],{"class":156,"line":1588},71,[154,1590,161],{"emptyLinePlaceholder":160},[154,1592,1594],{"class":156,"line":1593},72,[154,1595,1331],{"class":334},[154,1597,1599],{"class":156,"line":1598},73,[154,1600,1601],{"class":334},"sha256:78648c2606a7c4c76885806ed976b13e4d008940bd3d7a18b52948a6be71b60d\n",[154,1603,1605],{"class":156,"line":1604},74,[154,1606,161],{"emptyLinePlaceholder":160},[154,1608,1610],{"class":156,"line":1609},75,[154,1611,1331],{"class":334},[154,1613,1615],{"class":156,"line":1614},76,[154,1616,1617],{"class":334},"sha256:383d4a6dc5be9914878700809b4a3925379c80ab792dfe9e79d14b0c1d6b5fad\n",[12,1619,1620],{},"Ensuite, nous allons relancer le job pour afficher l'erreur :",[12,1622,1623],{},[195,1624],{"alt":1625,"src":1626},"GitLab Runner sans accès Internet qui ne parvient pas à effectuer le pull d'une image depuis le\ncache\ndu registre","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099328/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750099328580.png",[200,1628,1629],{},[203,1630,1631],{},"GitLab Runner sans accès Internet qui ne parvient pas à effectuer le pull d'une image depuis le\ncache du registre interne",[1184,1633,1635],{"id":1634},"transférer-le-fichier-scp-vers-linstance-gitlab","Transférer le fichier SCP vers l'instance GitLab",[12,1637,1638],{},"Depuis notre ordinateur local, nous allons transférer le fichier vers notre instance GitLab à l'aide du protocole SCP, comme\nsuit :",[144,1640,1642],{"className":310,"code":1641,"language":312,"meta":149,"style":149},"\n$ gcloud compute scp secret-detection.tar INSTANCE:~ --zone=ZONE\n\nsecret-detection.tar\n100%   81MB  21.5MB/s   00:03\n\n",[151,1643,1644,1648,1668,1672,1677],{"__ignoreMap":149},[154,1645,1646],{"class":156,"line":157},[154,1647,161],{"emptyLinePlaceholder":160},[154,1649,1650,1652,1654,1656,1659,1662,1665],{"class":156,"line":164},[154,1651,335],{"class":334},[154,1653,338],{"class":187},[154,1655,341],{"class":187},[154,1657,1658],{"class":187}," scp",[154,1660,1661],{"class":187}," secret-detection.tar",[154,1663,1664],{"class":187}," INSTANCE:~",[154,1666,1667],{"class":353}," --zone=ZONE\n",[154,1669,1670],{"class":156,"line":175},[154,1671,161],{"emptyLinePlaceholder":160},[154,1673,1674],{"class":156,"line":331},[154,1675,1676],{"class":334},"secret-detection.tar\n",[154,1678,1679,1682,1685,1688],{"class":156,"line":357},[154,1680,1681],{"class":334},"100%",[154,1683,1684],{"class":187},"   81MB",[154,1686,1687],{"class":187},"  21.5MB/s",[154,1689,1690],{"class":187},"   00:03\n",[273,1692,1694],{"id":1693},"charger-les-images-transférées-dans-le-registre-de-conteneurs-hors-ligne","Charger les images transférées dans le registre de conteneurs hors ligne",[12,1696,1697],{},"Ensuite, nous allons nous connecter à notre MV via SSH et charger l'image Docker :",[144,1699,1701],{"className":310,"code":1700,"language":312,"meta":149,"style":149},"\n$ gcloud compute ssh INSTANCE --zone=ZONE\n\n\n$ sudo docker load -i secret-detection.tar\n\nc3c8e454c212: Loading layer\n[==================================================>]  2.521MB/2.521MB\n\n51e93afaeedc: Loading layer\n[==================================================>]  32.55MB/32.55MB\n\ne8a25e39bb30: Loading layer\n[==================================================>]  221.2kB/221.2kB\n\n390704968493: Loading layer\n[==================================================>]  225.8kB/225.8kB\n\n76cf57e75f63: Loading layer\n[==================================================>]  17.64MB/17.64MB\n\nc4c7a681fd10: Loading layer\n[==================================================>]  4.608kB/4.608kB\n\nf0690f406157: Loading layer\n[==================================================>]  24.01MB/24.01MB\n\nLoaded image: registry.gitlab.com/security-products/secrets:6\n\n",[151,1702,1703,1707,1723,1727,1731,1748,1752,1763,1774,1778,1787,1796,1800,1809,1818,1822,1831,1840,1844,1853,1862,1866,1875,1884,1888,1897,1906,1910],{"__ignoreMap":149},[154,1704,1705],{"class":156,"line":157},[154,1706,161],{"emptyLinePlaceholder":160},[154,1708,1709,1711,1713,1715,1718,1721],{"class":156,"line":164},[154,1710,335],{"class":334},[154,1712,338],{"class":187},[154,1714,341],{"class":187},[154,1716,1717],{"class":187}," ssh",[154,1719,1720],{"class":187}," INSTANCE",[154,1722,1667],{"class":353},[154,1724,1725],{"class":156,"line":175},[154,1726,161],{"emptyLinePlaceholder":160},[154,1728,1729],{"class":156,"line":331},[154,1730,161],{"emptyLinePlaceholder":160},[154,1732,1733,1735,1738,1740,1743,1746],{"class":156,"line":357},[154,1734,335],{"class":334},[154,1736,1737],{"class":187}," sudo",[154,1739,1206],{"class":187},[154,1741,1742],{"class":187}," load",[154,1744,1745],{"class":353}," -i",[154,1747,1080],{"class":187},[154,1749,1750],{"class":156,"line":365},[154,1751,161],{"emptyLinePlaceholder":160},[154,1753,1754,1757,1760],{"class":156,"line":373},[154,1755,1756],{"class":334},"c3c8e454c212:",[154,1758,1759],{"class":187}," Loading",[154,1761,1762],{"class":187}," layer\n",[154,1764,1765,1768,1771],{"class":156,"line":381},[154,1766,1767],{"class":171},"[",[154,1769,1770],{"class":1273},"==================================================>",[154,1772,1773],{"class":171},"]  2.521MB/2.521MB\n",[154,1775,1776],{"class":156,"line":389},[154,1777,161],{"emptyLinePlaceholder":160},[154,1779,1780,1783,1785],{"class":156,"line":397},[154,1781,1782],{"class":334},"51e93afaeedc:",[154,1784,1759],{"class":187},[154,1786,1762],{"class":187},[154,1788,1789,1791,1793],{"class":156,"line":405},[154,1790,1767],{"class":171},[154,1792,1770],{"class":1273},[154,1794,1795],{"class":171},"]  32.55MB/32.55MB\n",[154,1797,1798],{"class":156,"line":411},[154,1799,161],{"emptyLinePlaceholder":160},[154,1801,1802,1805,1807],{"class":156,"line":416},[154,1803,1804],{"class":334},"e8a25e39bb30:",[154,1806,1759],{"class":187},[154,1808,1762],{"class":187},[154,1810,1811,1813,1815],{"class":156,"line":422},[154,1812,1767],{"class":171},[154,1814,1770],{"class":1273},[154,1816,1817],{"class":171},"]  221.2kB/221.2kB\n",[154,1819,1820],{"class":156,"line":427},[154,1821,161],{"emptyLinePlaceholder":160},[154,1823,1824,1827,1829],{"class":156,"line":445},[154,1825,1826],{"class":334},"390704968493:",[154,1828,1759],{"class":187},[154,1830,1762],{"class":187},[154,1832,1833,1835,1837],{"class":156,"line":452},[154,1834,1767],{"class":171},[154,1836,1770],{"class":1273},[154,1838,1839],{"class":171},"]  225.8kB/225.8kB\n",[154,1841,1842],{"class":156,"line":460},[154,1843,161],{"emptyLinePlaceholder":160},[154,1845,1846,1849,1851],{"class":156,"line":467},[154,1847,1848],{"class":334},"76cf57e75f63:",[154,1850,1759],{"class":187},[154,1852,1762],{"class":187},[154,1854,1855,1857,1859],{"class":156,"line":475},[154,1856,1767],{"class":171},[154,1858,1770],{"class":1273},[154,1860,1861],{"class":171},"]  17.64MB/17.64MB\n",[154,1863,1864],{"class":156,"line":482},[154,1865,161],{"emptyLinePlaceholder":160},[154,1867,1868,1871,1873],{"class":156,"line":490},[154,1869,1870],{"class":334},"c4c7a681fd10:",[154,1872,1759],{"class":187},[154,1874,1762],{"class":187},[154,1876,1877,1879,1881],{"class":156,"line":495},[154,1878,1767],{"class":171},[154,1880,1770],{"class":1273},[154,1882,1883],{"class":171},"]  4.608kB/4.608kB\n",[154,1885,1886],{"class":156,"line":500},[154,1887,161],{"emptyLinePlaceholder":160},[154,1889,1890,1893,1895],{"class":156,"line":506},[154,1891,1892],{"class":334},"f0690f406157:",[154,1894,1759],{"class":187},[154,1896,1762],{"class":187},[154,1898,1899,1901,1903],{"class":156,"line":511},[154,1900,1767],{"class":171},[154,1902,1770],{"class":1273},[154,1904,1905],{"class":171},"]  24.01MB/24.01MB\n",[154,1907,1908],{"class":156,"line":531},[154,1909,161],{"emptyLinePlaceholder":160},[154,1911,1912,1915,1918],{"class":156,"line":539},[154,1913,1914],{"class":334},"Loaded",[154,1916,1917],{"class":187}," image:",[154,1919,726],{"class":187},[273,1921,1923],{"id":1922},"exécuter-les-scanners","Exécuter les scanners",[12,1925,1926,1927,1932],{},"Nous allons ",[64,1928,1931],{"href":1929,"rel":1930},"https://docs.gitlab.com/ci/pipelines/#run-a-pipeline-manually",[],"relancer le pipeline\nmanuellement","\nafin que le scanner fasse l'objet d'un pull depuis le cache. Une fois l'exécution du pipeline terminée,\nvous constatez que le job de détection des secrets n'émet plus d'erreur :",[12,1934,1935],{},[195,1936],{"alt":1937,"src":1938},"GitLab Runner sans accès Internet qui effectue correctement un pull depuis\nle cache du registre interne après le chargement de\nl'image","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099328/Blog/Content%20Images/Blog/Content%20Images/image7_aHR0cHM6_1750099328581.png",[200,1940,1941],{},[203,1942,1943],{},"GitLab Runner sans accès Internet qui effectue correctement un pull depuis\nle cache du registre interne après le chargement de l'image",[12,1945,1946,1948],{},[209,1947],{},[209,1949],{},[12,1951,1952],{},"Si vous souhaitez effectuer un pull de l'image depuis un autre emplacement ou utiliser un autre système de tags pour vos\nimages, vous pouvez modifier la configuration comme suit :",[144,1954,1956],{"className":146,"code":1955,"language":148,"meta":149,"style":149},"\ninclude:\n  - template: Jobs/Secret-Detection.gitlab-ci.yml\n\nvariables:\n  SECURE_ANALYZERS_PREFIX: \"localhost:5000/analyzers\"\n",[151,1957,1958,1962,1968,1978,1982,1989],{"__ignoreMap":149},[154,1959,1960],{"class":156,"line":157},[154,1961,161],{"emptyLinePlaceholder":160},[154,1963,1964,1966],{"class":156,"line":164},[154,1965,168],{"class":167},[154,1967,172],{"class":171},[154,1969,1970,1972,1974,1976],{"class":156,"line":175},[154,1971,178],{"class":171},[154,1973,181],{"class":167},[154,1975,184],{"class":171},[154,1977,188],{"class":187},[154,1979,1980],{"class":156,"line":331},[154,1981,161],{"emptyLinePlaceholder":160},[154,1983,1984,1987],{"class":156,"line":357},[154,1985,1986],{"class":167},"variables",[154,1988,172],{"class":171},[154,1990,1991,1994,1996],{"class":156,"line":365},[154,1992,1993],{"class":167},"  SECURE_ANALYZERS_PREFIX",[154,1995,184],{"class":171},[154,1997,1998],{"class":187},"\"localhost:5000/analyzers\"\n",[12,2000,2001,2002,2006],{},"Pour en savoir plus, consultez la ",[64,2003,2005],{"href":696,"rel":2004},[],"documentation\nsur les environnements hors ligne",".",[273,2008,2010],{"id":2009},"afficher-les-résultats-du-scanner","Afficher les résultats du scanner",[12,2012,2013],{},"Une fois que le scanner a terminé son analyse sur la branche par défaut, il génère automatiquement un\nrapport de vulnérabilités qui\nprésente l'ensemble des problèmes identifiés.",[12,2015,2016,2017,142],{},"Pour accéder à ce rapport, ouvrez l'onglet latéral et\nsélectionnez ",[25,2018,2019],{},"Sécurisation > Rapport de vulnérabilités",[12,2021,2022],{},[195,2023],{"alt":2024,"src":2025},"Rapport de vulnérabilités GitLab avec les résultats\nde la détection des secrets","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099328/Blog/Content%20Images/Blog/Content%20Images/vulnerability_report_aHR0cHM6_1750099328581.png",[200,2027,2028],{},[203,2029,2030],{},"Rapport de vulnérabilités GitLab avec les résultats de la détection des secrets",[12,2032,2033,2035],{},[209,2034],{},[209,2036],{},[12,2038,2039],{},"Le rapport de vulnérabilités du projet fournit :",[19,2041,2042,2045,2048,2051],{},[22,2043,2044],{},"Le nombre total de vulnérabilités par niveau de gravité",[22,2046,2047],{},"Des filtres pour les attributs de vulnérabilité les plus courants",[22,2049,2050],{},"Les détails de chaque vulnérabilité, présentés sous forme de tableau",[22,2052,2053],{},"Un horodatage indiquant la dernière mise à jour, y compris un lien vers le dernier\npipeline",[12,2055,2056],{},"Dans notre exemple, le scanner de détection de secrets\na détecté deux vulnérabilités. En cliquant sur l'une d'elles, nous accédons à sa\npage dédiée :",[12,2058,2059],{},[195,2060],{"alt":2061,"src":2062},"Page de vulnérabilité GitLab avec des\ninformations clés","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099329/Blog/Content%20Images/Blog/Content%20Images/insights_aHR0cHM6_1750099328582.png",[200,2064,2065],{},[203,2066,2067],{},"Page de vulnérabilité GitLab avec des informations clés",[12,2069,2070,2072],{},[209,2071],{},[209,2073],{},[12,2075,2076],{},"La page consacrée aux vulnérabilités fournit des informations clés\nqui permettent de les trier et d'identifier les mesures correctives à appliquer, à\nsavoir :",[19,2078,2079,2082,2085,2088,2091,2094,2097,2100],{},[22,2080,2081],{},"Sa description",[22,2083,2084],{},"La date de détection",[22,2086,2087],{},"Son statut actuel",[22,2089,2090],{},"Les actions disponibles pour y remédier",[22,2092,2093],{},"Les tickets liés à cette vulnérabilité",[22,2095,2096],{},"Le log des actions effectuées sur cette vulnérabilité",[22,2098,2099],{},"Le nom du fichier et le numéro de ligne de la vulnérabilité (si disponible)",[22,2101,2102],{},"Sa gravité",[70,2104,2106],{"id":2105},"en-savoir-plus","En savoir plus",[12,2108,2109],{},"Pour en savoir plus sur GitLab et l'exécution de scanners de sécurité dans des environments\nair-gapped, consultez les ressources suivantes :",[19,2111,2112,2118,2125,2131],{},[22,2113,2114],{},[64,2115,2117],{"href":287,"rel":2116},[],"GitLab Ultimate",[22,2119,2120],{},[64,2121,2124],{"href":2122,"rel":2123},"https://about.gitlab.com/fr-fr/solutions/application-security-testing/",[],"Solutions de sécurité de conformité\nGitLab",[22,2126,2127],{},[64,2128,2130],{"href":696,"rel":2129},[],"Documentation GitLab\nsur les déploiements hors ligne",[22,2132,2133],{},[64,2134,2137],{"href":2135,"rel":2136},"https://docs.gitlab.com/user/application_security/",[],"Documentation GitLab\nsur la sécurité des applications",[57,2139,2140],{},[12,2141,2142],{},[25,2143,2144],{},[64,2145,68],{"href":66,"rel":2146},[],[2148,2149,2150],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":149,"searchDepth":164,"depth":164,"links":2152},[2153,2156,2163],{"id":72,"depth":164,"text":73,"children":2154},[2155],{"id":275,"depth":175,"text":276},{"id":667,"depth":164,"text":668,"children":2157},[2158,2159,2160,2161,2162],{"id":689,"depth":175,"text":690},{"id":1161,"depth":175,"text":1162},{"id":1693,"depth":175,"text":1694},{"id":1922,"depth":175,"text":1923},{"id":2009,"depth":175,"text":2010},{"id":2105,"depth":164,"text":2106},"security","2025-11-04","Sécurisez vos environnements air-gapped avec le scanning de sécurité GitLab et détectez les menaces internes pour garantir l'intégrité de vos systèmes.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099301/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_1097303277_6gTk7M1DNx0tFuovupVFB1_1750099300786.jpg",{},"/fr-fr/blog/tutorial-security-scanning-in-air-gapped-environments",{"title":5,"description":2166,"ogTitle":5,"ogDescription":2166,"noIndex":2173,"ogImage":2169,"ogUrl":2174,"ogSiteName":2175,"ogType":2176,"canonicalUrls":2174},false,"https://about.gitlab.com/blog/tutorial-security-scanning-in-air-gapped-environments","https://about.gitlab.com","article","tutorial-security-scanning-in-air-gapped-environments","fr-fr/blog/tutorial-security-scanning-in-air-gapped-environments",[2180,2164,2181,2182,2183],"tutorial","public sector","DevSecOps platform","features","BlogPost","OpZ8ALF5NVpCuHaOo7bV1YIAnN2ubjIkaQep5f3N3mI",{"logo":2187,"freeTrial":2192,"sales":2197,"login":2202,"items":2207,"search":2534,"minimal":2570,"duo":2589,"switchNav":2598,"pricingDeployment":2609},{"config":2188},{"href":2189,"dataGaName":2190,"dataGaLocation":2191},"/fr-fr/","gitlab logo","header",{"text":2193,"config":2194},"Commencer un essai gratuit",{"href":2195,"dataGaName":2196,"dataGaLocation":2191},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":2198,"config":2199},"Demander une démo",{"href":2200,"dataGaName":2201,"dataGaLocation":2191},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":2203,"config":2204},"Connexion",{"href":2205,"dataGaName":2206,"dataGaLocation":2191},"https://gitlab.com/users/sign_in/","sign in",[2208,2236,2337,2342,2456,2512],{"text":2209,"config":2210,"menu":2212},"Plateforme",{"dataNavLevelOne":2211},"platform",{"type":2213,"columns":2214},"cards",[2215,2221,2229],{"title":2209,"description":2216,"link":2217},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":2218,"config":2219},"Explorer notre plateforme",{"href":2220,"dataGaName":2211,"dataGaLocation":2191},"/fr-fr/platform/",{"title":2222,"description":2223,"link":2224},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":2225,"config":2226},"Découvrir GitLab Duo",{"href":2227,"dataGaName":2228,"dataGaLocation":2191},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":2230,"description":2231,"link":2232},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":2106,"config":2233},{"href":2234,"dataGaName":2235,"dataGaLocation":2191},"/fr-fr/why-gitlab/","why gitlab",{"text":2237,"left":160,"config":2238,"menu":2240},"Produit",{"dataNavLevelOne":2239},"solutions",{"type":2241,"link":2242,"columns":2246,"feature":2317},"lists",{"text":2243,"config":2244},"Voir toutes les solutions",{"href":2245,"dataGaName":2239,"dataGaLocation":2191},"/fr-fr/solutions/",[2247,2272,2295],{"title":2248,"description":2249,"link":2250,"items":2255},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":2251},{"icon":2252,"href":2253,"dataGaName":2254,"dataGaLocation":2191},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[2256,2260,2263,2268],{"text":2257,"config":2258},"CI/CD",{"href":2259,"dataGaLocation":2191,"dataGaName":2257},"/fr-fr/solutions/continuous-integration/",{"text":2222,"config":2261},{"href":2227,"dataGaLocation":2191,"dataGaName":2262},"gitlab duo agent platform - product menu",{"text":2264,"config":2265},"Gestion du code source",{"href":2266,"dataGaLocation":2191,"dataGaName":2267},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":2269,"config":2270},"Livraison de logiciels automatisée",{"href":2253,"dataGaLocation":2191,"dataGaName":2271},"Automated software delivery",{"title":2273,"description":2274,"link":2275,"items":2280},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":2276},{"href":2277,"dataGaName":2278,"dataGaLocation":2191,"icon":2279},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[2281,2285,2290],{"text":2282,"config":2283},"Tests de sécurité des applications",{"href":2277,"dataGaName":2284,"dataGaLocation":2191},"Application security testing",{"text":2286,"config":2287},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":2288,"dataGaLocation":2191,"dataGaName":2289},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":2291,"config":2292},"Conformité logicielle",{"href":2293,"dataGaName":2294,"dataGaLocation":2191},"/fr-fr/solutions/software-compliance/","software compliance",{"title":2296,"link":2297,"items":2302},"Mesures",{"config":2298},{"icon":2299,"href":2300,"dataGaName":2301,"dataGaLocation":2191},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[2303,2307,2312],{"text":2304,"config":2305},"Visibilité et mesures",{"href":2300,"dataGaLocation":2191,"dataGaName":2306},"Visibility and Measurement",{"text":2308,"config":2309},"Gestion de la chaîne de valeur",{"href":2310,"dataGaLocation":2191,"dataGaName":2311},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":2313,"config":2314},"Analyses et informations",{"href":2315,"dataGaLocation":2191,"dataGaName":2316},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":2318,"type":2241,"items":2319},"GitLab",[2320,2326,2332],{"text":2321,"config":2322},"Entreprises",{"icon":2323,"href":2324,"dataGaLocation":2191,"dataGaName":2325},"Building","/fr-fr/enterprise/","enterprise",{"text":2327,"config":2328},"Pour les PME",{"icon":2329,"href":2330,"dataGaLocation":2191,"dataGaName":2331},"Work","/fr-fr/small-business/","small business",{"text":2333,"config":2334},"Pour le secteur public",{"icon":2335,"href":2336,"dataGaLocation":2191,"dataGaName":2181},"Organization","/fr-fr/solutions/public-sector/",{"text":2338,"config":2339},"Tarifs",{"href":2340,"dataGaName":2341,"dataGaLocation":2191,"dataNavLevelOne":2341},"/fr-fr/pricing/","pricing",{"text":2343,"config":2344,"menu":2346},"Ressources",{"dataNavLevelOne":2345},"resources",{"type":2241,"link":2347,"columns":2351,"feature":2445},{"text":2348,"config":2349},"Afficher toutes les ressources",{"href":2350,"dataGaName":2345,"dataGaLocation":2191},"/fr-fr/resources/",[2352,2385,2412],{"title":2353,"items":2354},"Premiers pas",[2355,2360,2365,2370,2375,2380],{"text":2356,"config":2357},"Installation",{"href":2358,"dataGaName":2359,"dataGaLocation":2191},"/fr-fr/install/","install",{"text":2361,"config":2362},"Guides de démarrage",{"href":2363,"dataGaName":2364,"dataGaLocation":2191},"/fr-fr/get-started/","quick setup checklists",{"text":2366,"config":2367},"Apprentissage",{"href":2368,"dataGaLocation":2191,"dataGaName":2369},"https://university.gitlab.com/","learn",{"text":2371,"config":2372},"Documentation",{"href":2373,"dataGaName":2374,"dataGaLocation":2191},"https://docs.gitlab.com/","product documentation",{"text":2376,"config":2377},"Vidéos sur les bonnes pratiques",{"href":2378,"dataGaName":2379,"dataGaLocation":2191},"/fr-fr/getting-started-videos/","best practice videos",{"text":2381,"config":2382},"Intégrations",{"href":2383,"dataGaName":2384,"dataGaLocation":2191},"/fr-fr/integrations/","integrations",{"title":2386,"items":2387},"Découvrir",[2388,2393,2398,2403,2407],{"text":2389,"config":2390},"Témoignages clients",{"href":2391,"dataGaName":2392,"dataGaLocation":2191},"/fr-fr/customers/","customer success stories",{"text":2394,"config":2395},"Blog",{"href":2396,"dataGaName":2397,"dataGaLocation":2191},"/fr-fr/blog/","blog",{"text":2399,"config":2400},"Demo Hub",{"href":2401,"dataGaName":2402,"dataGaLocation":2191},"/fr-fr/demo-hub/","demo hub",{"text":2404,"config":2405},"The Source",{"href":2406,"dataGaName":2397,"dataGaLocation":2191},"/fr-fr/the-source/",{"text":2408,"config":2409},"Travail à distance",{"href":2410,"dataGaName":2411,"dataGaLocation":2191},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":2413,"items":2414},"Connecter",[2415,2420,2425,2430,2435,2440],{"text":2416,"config":2417},"Services GitLab",{"href":2418,"dataGaName":2419,"dataGaLocation":2191},"/fr-fr/services/","services",{"text":2421,"config":2422},"Contribuer",{"href":2423,"dataGaName":2424,"dataGaLocation":2191},"https://contributors.gitlab.com","contribute",{"text":2426,"config":2427},"Communauté",{"href":2428,"dataGaName":2429,"dataGaLocation":2191},"/community/","community",{"text":2431,"config":2432},"Forum",{"href":2433,"dataGaName":2434,"dataGaLocation":2191},"https://forum.gitlab.com/","forum",{"text":2436,"config":2437},"Événements",{"href":2438,"dataGaName":2439,"dataGaLocation":2191},"/events/","events",{"text":2441,"config":2442},"Partenaires",{"href":2443,"dataGaName":2444,"dataGaLocation":2191},"/fr-fr/partners/","partners",{"config":2446,"title":2449,"text":2450,"link":2451},{"background":2447,"textColor":2448},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":2452,"config":2453},"Lire les articles les plus récents",{"href":2454,"dataGaName":2455,"dataGaLocation":2191},"/fr-fr/whats-new/","whats new",{"text":2457,"config":2458,"menu":2460},"Société",{"dataNavLevelOne":2459},"company",{"type":2241,"columns":2461},[2462],{"items":2463},[2464,2469,2475,2477,2482,2487,2492,2497,2502,2507],{"text":2465,"config":2466},"À propos",{"href":2467,"dataGaName":2468,"dataGaLocation":2191},"/fr-fr/company/","about",{"text":2470,"config":2471,"footerGa":2474},"Carrières",{"href":2472,"dataGaName":2473,"dataGaLocation":2191},"/jobs/","jobs",{"dataGaName":2473},{"text":2436,"config":2476},{"href":2438,"dataGaName":2439,"dataGaLocation":2191},{"text":2478,"config":2479},"Leadership",{"href":2480,"dataGaName":2481,"dataGaLocation":2191},"/company/team/e-group/","leadership",{"text":2483,"config":2484},"Manuel",{"href":2485,"dataGaName":2486,"dataGaLocation":2191},"https://handbook.gitlab.com/","handbook",{"text":2488,"config":2489},"Relations avec les investisseurs",{"href":2490,"dataGaName":2491,"dataGaLocation":2191},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2493,"config":2494},"Trust Center",{"href":2495,"dataGaName":2496,"dataGaLocation":2191},"/fr-fr/security/","trust center",{"text":2498,"config":2499},"Centre pour la transparence de l'IA",{"href":2500,"dataGaName":2501,"dataGaLocation":2191},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":2503,"config":2504},"Newsletter",{"href":2505,"dataGaName":2506,"dataGaLocation":2191},"/company/contact/#contact-forms","newsletter",{"text":2508,"config":2509},"Presse",{"href":2510,"dataGaName":2511,"dataGaLocation":2191},"/press/","press",{"text":2513,"config":2514,"menu":2515},"Nous contacter",{"dataNavLevelOne":2459},{"type":2241,"columns":2516},[2517],{"items":2518},[2519,2524,2529],{"text":2520,"config":2521},"Contacter l'équipe commerciale",{"href":2522,"dataGaName":2523,"dataGaLocation":2191},"/fr-fr/sales/","talk to sales",{"text":2525,"config":2526},"Assistance GitLab",{"href":2527,"dataGaName":2528,"dataGaLocation":2191},"https://support.gitlab.com/hc/en-us","support portal",{"text":2530,"config":2531},"Portail clients GitLab",{"href":2532,"dataGaName":2533,"dataGaLocation":2191},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2535,"login":2536,"suggestions":2543},"Fermer",{"text":2537,"link":2538},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":2539,"config":2540},"GitLab.com",{"href":2205,"dataGaName":2541,"dataGaLocation":2542},"search login","search",{"text":2544,"default":2545},"Suggestions",[2546,2549,2554,2556,2561,2566],{"text":2222,"config":2547},{"href":2227,"dataGaName":2548,"dataGaLocation":2542},"GitLab Duo Agent Platform",{"text":2550,"config":2551},"Suggestions de code (IA)",{"href":2552,"dataGaName":2553,"dataGaLocation":2542},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":2257,"config":2555},{"href":2259,"dataGaName":2257,"dataGaLocation":2542},{"text":2557,"config":2558},"GitLab sur AWS",{"href":2559,"dataGaName":2560,"dataGaLocation":2542},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":2562,"config":2563},"GitLab sur Google Cloud",{"href":2564,"dataGaName":2565,"dataGaLocation":2542},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2567,"config":2568},"Pourquoi utiliser GitLab ?",{"href":2234,"dataGaName":2569,"dataGaLocation":2542},"Why GitLab?",{"freeTrial":2571,"mobileIcon":2576,"desktopIcon":2581,"secondaryButton":2584},{"text":2572,"config":2573},"Commencer votre essai gratuit",{"href":2574,"dataGaName":2196,"dataGaLocation":2575},"https://gitlab.com/-/trials/new/","nav",{"altText":2577,"config":2578},"Icône GitLab",{"src":2579,"dataGaName":2580,"dataGaLocation":2575},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2577,"config":2582},{"src":2583,"dataGaName":2580,"dataGaLocation":2575},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2585,"config":2586},"Commencer",{"href":2587,"dataGaName":2588,"dataGaLocation":2575},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":2590,"mobileIcon":2594,"desktopIcon":2596},{"text":2591,"config":2592},"En savoir plus sur GitLab Duo",{"href":2227,"dataGaName":2593,"dataGaLocation":2575},"gitlab duo",{"altText":2577,"config":2595},{"src":2579,"dataGaName":2580,"dataGaLocation":2575},{"altText":2577,"config":2597},{"src":2583,"dataGaName":2580,"dataGaLocation":2575},{"button":2599,"mobileIcon":2604,"desktopIcon":2606},{"text":2600,"config":2601},"/switch",{"href":2602,"dataGaName":2603,"dataGaLocation":2575},"#contact","switch",{"altText":2577,"config":2605},{"src":2579,"dataGaName":2580,"dataGaLocation":2575},{"altText":2577,"config":2607},{"src":2608,"dataGaName":2580,"dataGaLocation":2575},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2610,"mobileIcon":2615,"desktopIcon":2617},{"text":2611,"config":2612},"Retour aux tarifs",{"href":2340,"dataGaName":2613,"dataGaLocation":2575,"icon":2614},"back to pricing","GoBack",{"altText":2577,"config":2616},{"src":2579,"dataGaName":2580,"dataGaLocation":2575},{"altText":2577,"config":2618},{"src":2583,"dataGaName":2580,"dataGaLocation":2575},{"title":2620,"button":2621,"config":2625},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":2106,"config":2622},{"href":2623,"dataGaName":2624,"dataGaLocation":2191},"/fr-fr/gitlab-orbit/","orbit",{"layout":2626,"disabled":2173},"release",{"data":2628},{"text":2629,"source":2630,"edit":2636,"contribute":2641,"config":2645,"items":2650,"minimal":2858},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":2631,"config":2632},"Afficher le code source de la page",{"href":2633,"dataGaName":2634,"dataGaLocation":2635},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2637,"config":2638},"Modifier cette page",{"href":2639,"dataGaName":2640,"dataGaLocation":2635},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2421,"config":2642},{"href":2643,"dataGaName":2644,"dataGaLocation":2635},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2646,"facebook":2647,"youtube":2648,"linkedin":2649},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2651,2697,2750,2793,2825],{"title":2338,"links":2652,"subMenu":2667},[2653,2657,2662],{"text":2654,"config":2655},"Voir les forfaits",{"href":2340,"dataGaName":2656,"dataGaLocation":2635},"view plans",{"text":2658,"config":2659},"GitLab Premium",{"href":2660,"dataGaName":2661,"dataGaLocation":2635},"/fr-fr/pricing/premium/","why premium",{"text":2663,"config":2664},"GitLab Ultimate",{"href":2665,"dataGaName":2666,"dataGaLocation":2635},"/fr-fr/pricing/ultimate/","why ultimate",[2668],{"title":2513,"links":2669},[2670,2672,2674,2677,2682,2687,2692],{"text":2520,"config":2671},{"href":2522,"dataGaName":2201,"dataGaLocation":2635},{"text":2525,"config":2673},{"href":2527,"dataGaName":2528,"dataGaLocation":2635},{"text":2675,"config":2676},"Portail clients",{"href":2532,"dataGaName":2533,"dataGaLocation":2635},{"text":2678,"config":2679},"Statut",{"href":2680,"dataGaName":2681,"dataGaLocation":2635},"https://status.gitlab.com/","status",{"text":2683,"config":2684},"Conditions d'utilisation",{"href":2685,"dataGaName":2686,"dataGaLocation":2635},"/terms/","terms of use",{"text":2688,"config":2689},"Politique de confidentialité",{"href":2690,"dataGaName":2691,"dataGaLocation":2635},"/fr-fr/privacy/","privacy statement",{"text":2693,"config":2694},"Gestion des cookies",{"dataGaName":2695,"dataGaLocation":2635,"id":2696,"isOneTrustButton":160},"cookie preferences","ot-sdk-btn",{"title":2237,"links":2698,"subMenu":2707},[2699,2703],{"text":2700,"config":2701},"Plateforme DevSecOps",{"href":2220,"dataGaName":2702,"dataGaLocation":2635},"devsecops platform",{"text":2704,"config":2705},"Développement assisté par l'IA",{"href":2227,"dataGaName":2706,"dataGaLocation":2635},"ai-assisted development",[2708],{"title":2709,"links":2710},"Thèmes",[2711,2715,2720,2725,2730,2735,2740,2745],{"text":2257,"config":2712},{"href":2713,"dataGaName":2714,"dataGaLocation":2635},"/fr-fr/topics/ci-cd/","cicd",{"text":2716,"config":2717},"GitOps",{"href":2718,"dataGaName":2719,"dataGaLocation":2635},"/fr-fr/topics/gitops/","gitops",{"text":2721,"config":2722},"DevOps",{"href":2723,"dataGaName":2724,"dataGaLocation":2635},"/fr-fr/topics/devops/","devops",{"text":2726,"config":2727},"Contrôle de version",{"href":2728,"dataGaName":2729,"dataGaLocation":2635},"/fr-fr/topics/version-control/","version control",{"text":2731,"config":2732},"DevSecOps",{"href":2733,"dataGaName":2734,"dataGaLocation":2635},"/fr-fr/topics/devsecops/","devsecops",{"text":2736,"config":2737},"Cloud-native",{"href":2738,"dataGaName":2739,"dataGaLocation":2635},"/fr-fr/topics/cloud-native/","cloud native",{"text":2741,"config":2742},"IA pour la programmation",{"href":2743,"dataGaName":2744,"dataGaLocation":2635},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":2746,"config":2747},"IA agentique",{"href":2748,"dataGaName":2749,"dataGaLocation":2635},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":2751,"links":2752},"Solutions",[2753,2756,2758,2763,2766,2769,2772,2775,2777,2780,2783,2788],{"text":2282,"config":2754},{"href":2277,"dataGaName":2755,"dataGaLocation":2635},"Application Security Testing",{"text":2269,"config":2757},{"href":2253,"dataGaName":2254,"dataGaLocation":2635},{"text":2759,"config":2760},"Développement Agile",{"href":2761,"dataGaName":2762,"dataGaLocation":2635},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":2264,"config":2764},{"href":2266,"dataGaName":2765,"dataGaLocation":2635},"source code management",{"text":2257,"config":2767},{"href":2259,"dataGaName":2768,"dataGaLocation":2635},"continuous integration & delivery",{"text":2308,"config":2770},{"href":2310,"dataGaName":2771,"dataGaLocation":2635},"value stream management",{"text":2716,"config":2773},{"href":2774,"dataGaName":2719,"dataGaLocation":2635},"/fr-fr/solutions/gitops/",{"text":2321,"config":2776},{"href":2324,"dataGaName":2325,"dataGaLocation":2635},{"text":2778,"config":2779},"PME",{"href":2330,"dataGaName":2331,"dataGaLocation":2635},{"text":2781,"config":2782},"Secteur public",{"href":2336,"dataGaName":2181,"dataGaLocation":2635},{"text":2784,"config":2785},"Éducation",{"href":2786,"dataGaName":2787,"dataGaLocation":2635},"/fr-fr/solutions/education/","education",{"text":2789,"config":2790},"Services financiers",{"href":2791,"dataGaName":2792,"dataGaLocation":2635},"/fr-fr/solutions/finance/","financial services",{"title":2343,"links":2794},[2795,2797,2799,2801,2804,2806,2809,2811,2813,2815,2817,2819,2821,2823],{"text":2356,"config":2796},{"href":2358,"dataGaName":2359,"dataGaLocation":2635},{"text":2361,"config":2798},{"href":2363,"dataGaName":2364,"dataGaLocation":2635},{"text":2366,"config":2800},{"href":2368,"dataGaName":2369,"dataGaLocation":2635},{"text":2371,"config":2802},{"href":2373,"dataGaName":2803,"dataGaLocation":2635},"docs",{"text":2394,"config":2805},{"href":2396,"dataGaName":2397,"dataGaLocation":2635},{"text":2807,"config":2808},"Nouveautés",{"href":2454,"dataGaName":2455,"dataGaLocation":2635},{"text":2389,"config":2810},{"href":2391,"dataGaName":2392,"dataGaLocation":2635},{"text":2408,"config":2812},{"href":2410,"dataGaName":2411,"dataGaLocation":2635},{"text":2416,"config":2814},{"href":2418,"dataGaName":2419,"dataGaLocation":2635},{"text":2421,"config":2816},{"href":2423,"dataGaName":2424,"dataGaLocation":2635},{"text":2426,"config":2818},{"href":2428,"dataGaName":2429,"dataGaLocation":2635},{"text":2431,"config":2820},{"href":2433,"dataGaName":2434,"dataGaLocation":2635},{"text":2436,"config":2822},{"href":2438,"dataGaName":2439,"dataGaLocation":2635},{"text":2441,"config":2824},{"href":2443,"dataGaName":2444,"dataGaLocation":2635},{"title":2457,"links":2826},[2827,2829,2831,2833,2835,2837,2842,2847,2849,2851,2853],{"text":2465,"config":2828},{"href":2467,"dataGaName":2459,"dataGaLocation":2635},{"text":2470,"config":2830},{"href":2472,"dataGaName":2473,"dataGaLocation":2635},{"text":2478,"config":2832},{"href":2480,"dataGaName":2481,"dataGaLocation":2635},{"text":2483,"config":2834},{"href":2485,"dataGaName":2486,"dataGaLocation":2635},{"text":2488,"config":2836},{"href":2490,"dataGaName":2491,"dataGaLocation":2635},{"text":2838,"config":2839},"Développement durable",{"href":2840,"dataGaName":2841,"dataGaLocation":2635},"/sustainability/","Sustainability",{"text":2843,"config":2844},"Diversité, inclusion et appartenance (DIB)",{"href":2845,"dataGaName":2846,"dataGaLocation":2635},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2493,"config":2848},{"href":2495,"dataGaName":2496,"dataGaLocation":2635},{"text":2503,"config":2850},{"href":2505,"dataGaName":2506,"dataGaLocation":2635},{"text":2508,"config":2852},{"href":2510,"dataGaName":2511,"dataGaLocation":2635},{"text":2854,"config":2855},"Déclaration de transparence sur l'esclavage moderne",{"href":2856,"dataGaName":2857,"dataGaLocation":2635},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2859},[2860,2862,2864],{"text":2683,"config":2861},{"href":2685,"dataGaName":2686,"dataGaLocation":2635},{"text":2693,"config":2863},{"dataGaName":2695,"dataGaLocation":2635,"id":2696,"isOneTrustButton":160},{"text":2688,"config":2865},{"href":2690,"dataGaName":2691,"dataGaLocation":2635},[2867],{"id":2868,"title":7,"body":2168,"config":2869,"content":2871,"description":2168,"extension":2875,"meta":2876,"navigation":160,"path":2877,"seo":2878,"stem":2879,"__hash__":2880},"blogAuthors/en-us/blog/authors/fernando-diaz.yml",{"template":2870},"BlogAuthor",{"name":7,"config":2872},{"headshot":2873,"ctfId":2874},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659556/Blog/Author%20Headshots/fern_diaz.png","fjdiaz","yml",{},"/en-us/blog/authors/fernando-diaz",{},"en-us/blog/authors/fernando-diaz","lxRJIOydP4_yzYZvsPcuQevP9AYAKREF7i8QmmdnOWc",[2882,2890,2895],{"title":2883,"description":2884,"heroImage":2885,"category":2164,"date":2886,"authors":2887,"slug":2889,"externalUrl":2168},"Le flow GitLab Duo Security Review détecte les failles logiques que les scanners n'identifient pas","Utilisez le raisonnement de sécurité piloté par l'IA pour détecter les failles d'autorisation, les erreurs de logique métier et les conditions de concurrence pendant la revue de code.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783980535/t3gez0gpayfndrhncunf.png","2026-07-17",[2888],"Mark Settle","gitlab-duo-security-review-flow",{"title":2891,"description":2892,"heroImage":2885,"category":2164,"date":2886,"authors":2893,"slug":2894,"externalUrl":2168},"Une mise à jour de version fait échouer votre build ? GitLab le corrige !","Mettez à niveau vos dépendances automatiquement, adaptez le code en cas de changements cassants et transférez les modifications pour approbation : découvrez ces fonctionnalités natives uniquement proposées par GitLab, avec un contexte complet.",[2888],"dependency-scanning-auto-remediation",{"title":2896,"description":2897,"heroImage":2898,"category":2164,"date":2899,"authors":2900,"slug":2902,"externalUrl":2168},"GitLab : 5 façons de corriger les niveaux de gravité trompeurs des vulnérabilités","Les scores CVSS par défaut ne reflètent pas vos risques réels. Utilisez les politiques de remplacement de la gravité GitLab pour automatiser les ajustements en fonction des CVE, des CWE, du chemin de fichier et du répertoire.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1772630163/akp8ly2mrsfrhsb0liyb.png","2026-07-07",[2901],"Grant Hickman","severity-override-vulnerability-management-policy",{"promotions":2904},[2905,2919,2931,2942],{"id":2906,"categories":2907,"header":2909,"text":2910,"button":2911,"image":2916},"ai-modernization",[2908],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":2912,"config":2913},"Obtenez votre score de maturité IA",{"href":2914,"dataGaName":2915,"dataGaLocation":2397},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":2917},{"src":2918},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2920,"categories":2921,"header":2923,"text":2910,"button":2924,"image":2928},"devops-modernization",[2922,2734],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":2925,"config":2926},"Obtenez votre score de maturité DevOps",{"href":2927,"dataGaName":2915,"dataGaLocation":2397},"/fr-fr/assessments/devops-modernization-assessment/",{"config":2929},{"src":2930},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2932,"categories":2933,"header":2934,"text":2910,"button":2935,"image":2939},"security-modernization",[2164],"Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":2936,"config":2937},"Obtenez votre score de maturité en matière de sécurité",{"href":2938,"dataGaName":2915,"dataGaLocation":2397},"/fr-fr/assessments/security-modernization-assessment/",{"config":2940},{"src":2941},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2943,"paths":2944,"header":2947,"text":2948,"button":2949,"image":2954},"github-azure-migration",[2945,2946],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Votre équipe est-elle prête pour la migration de GitHub vers Azure ?","GitHub a déjà commencé sa migration vers Azure. Découvrez ce que cela signifie pour vous.",{"text":2950,"config":2951},"Découvrez les différences entre GitLab et GitHub",{"href":2952,"dataGaName":2953,"dataGaLocation":2397},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2955},{"src":2930},{"header":2957,"blurb":2958,"button":2959,"secondaryButton":2963},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":2193,"config":2960},{"href":2961,"dataGaName":2196,"dataGaLocation":2962},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":2520,"config":2964},{"href":2522,"dataGaName":2201,"dataGaLocation":2962},1786803764173]