[{"data":1,"prerenderedAt":1912},["ShallowReactive",2],{"/fr-fr/blog/gitlab-secrets-manager-add-eso-terraform-api-support":3,"navigation-fr-fr":1151,"banner-fr-fr":1586,"footer-fr-fr":1593,"blog-post-authors-fr-fr-Erick Bajao|Joe Randazzo":1843,"blog-related-posts-fr-fr-gitlab-secrets-manager-add-eso-terraform-api-support":1869,"blog-share-wrapper-fr-fr":1893,"next-steps-fr-fr":1903},{"id":4,"title":5,"authors":6,"body":9,"category":1133,"date":1134,"description":1135,"extension":1136,"externalUrl":1137,"faq":1137,"featured":246,"heroImage":1138,"meta":1139,"navigation":246,"path":1140,"seo":1141,"slug":1144,"stem":1145,"tags":1146,"template":1149,"updatedDate":1137,"__hash__":1150},"blogPosts/fr-fr/blog/gitlab-secrets-manager-add-eso-terraform-api-support.md","GitLab Secrets Manager prend en charge ESO, Terraform et les API",[7,8],"Erick Bajao","Joe Randazzo",{"type":10,"value":11,"toc":1126},"minimark",[12,31,41,65,70,73,80,98,108,116,143,149,158,162,184,492,500,504,507,632,636,650,1096,1100,1108,1122],[13,14,15,16,23,24,30],"p",{},"Aujourd'hui, vous gérez peut-être des magasins de secrets distincts pour le ",[17,18,22],"a",{"href":19,"rel":20,"title":21},"https://about.gitlab.com/fr-fr/topics/ci-cd/",[],"Qu'est-ce que le CI/CD ?","CI/CD",", ",[17,25,29],{"href":26,"rel":27,"title":28},"https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/",[],"Qu'est-ce que Kubernetes ?","Kubernetes"," et Terraform. Cependant, cette approche vous demande de jongler entre plusieurs outils, de maintenir des modèles d'accès synchronisés et de corréler des pistes d'audit dispersées en cas d'incident.",[13,32,33,34,40],{},"GitLab Secrets Manager prend désormais en charge External Secrets Operator (ESO) et Terraform, et étend ainsi la récupération sécurisée des secrets au-delà des ",[17,35,39],{"href":36,"rel":37,"title":38},"https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/",[],"Qu'est-ce qu'un pipeline CI/CD ?","pipelines CI/CD",". Alimenté par OpenBao, GitLab Secrets Manager constitue une source de vérité unique pour les secrets de toute votre chaîne de livraison logicielle. Vous pouvez désormais utiliser le même magasin de secrets pour :",[42,43,44,48,51,54,57],"ul",{},[45,46,47],"li",{},"Les charges de travail Kubernetes via ESO",[45,49,50],{},"Les exécutions Terraform ou OpenTofu",[45,52,53],{},"OpenBao ou Vault CLI",[45,55,56],{},"Les jobs CI/CD dans GitLab (à partir de la version 19.0)",[45,58,59,60],{},"Toute automatisation externe via l'",[17,61,64],{"href":62,"rel":63},"https://docs.gitlab.com/api/secrets_manager/",[],"API Secrets Manager",[66,67,69],"h3",{"id":68},"kubernetes-external-secrets-operator","Kubernetes : External Secrets Operator",[13,71,72],{},"ESO synchronise les secrets depuis GitLab Secrets Manager à l'aide du fournisseur Vault. Une charge de travail dans votre cluster détient un JSON Web Token (JWT) à durée de vie limitée qu'ESO utilise pour s'authentifier auprès d'OpenBao, puis intègre le secret dans un secret Kubernetes.",[13,74,75],{},[76,77],"img",{"alt":78,"src":79},"External Secrets Operator","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785953823/ojlr4rv1r34oflo4fynv.png",[13,81,82,83,88,89,93,94,97],{},"Un ",[17,84,87],{"href":85,"rel":86},"https://external-secrets.io/latest/api/secretstore/",[],"SecretStore"," indique à ESO où récupérer les secrets et comment s'authentifier. GitLab Secrets Manager expose une API KV v2 compatible avec Vault, que vous configurez via le fournisseur Vault. Le champ ",[90,91,92],"code",{},"namespace"," correspond à votre hiérarchie GitLab (organisation, groupe, projet) et délimite les secrets accessibles par ce magasin. L'authentification repose sur un JWT généré par GitLab, stocké dans un secret Kubernetes et référencé par ",[90,95,96],{},"secretRef",".",[99,100,105],"pre",{"className":101,"code":103,"language":104},[102],"language-text","apiVersion: external-secrets.io/v1\nkind: SecretStore\nmetadata:\n  name: gitlab-secrets-manager\n  namespace: my-app\nspec:\n  provider:\n    vault:\n      server: https://secrets.gitlab.com      # provider.vault.server\n      path: secrets/kv                        # provider.vault.path\n      version: v2\n      namespace: org_5/group_42/project_99    # provider.vault.namespace\n      auth:\n        jwt:\n          path: api_jwt/cel                   # provider.vault.auth.jwt.path\n          role: all_api                       # provider.vault.auth.jwt.role\n          secretRef:\n            name: gitlab-access-token         # Kubernetes secret holding the minted token\n            key: token\n","text",[90,106,103],{"__ignoreMap":107},"",[13,109,82,110,115],{},[17,111,114],{"href":112,"rel":113},"https://external-secrets.io/latest/api/externalsecret/",[],"ExternalSecret"," définit les secrets à récupérer et l'endroit où les stocker. Il fait référence au SecretStore créé précédemment, puis mappe les secrets distants dans un secret Kubernetes que vos charges de travail peuvent monter ou référencer en tant que variables d'environnement.",[13,117,118,119,122,123,126,127,130,131,134,135,138,139,142],{},"ESO crée et gère le secret cible (",[90,120,121],{},"synced-secret","), en le récupérant depuis GitLab à chaque ",[90,124,125],{},"refreshInterval"," afin que les valeurs mises à jour se propagent sans redéploiement. Chaque entrée sous ",[90,128,129],{},"data"," associe un secret distant à une clé dans la cible : ",[90,132,133],{},"remoteRef.key"," correspond au chemin d'accès dans GitLab Secrets Manager, ",[90,136,137],{},"property"," sélectionne un champ au sein de ce secret, et ",[90,140,141],{},"secretKey"," est la clé sous laquelle il apparaît dans Kubernetes.",[99,144,147],{"className":145,"code":146,"language":104},[102],"apiVersion: external-secrets.io/v1\nkind: ExternalSecret\nmetadata:\n  name: my-secret\n  namespace: my-app\nspec:\n  refreshInterval: 45m\n  secretStoreRef:\n    name: gitlab-secrets-manager\n    kind: SecretStore\n  target:\n    name: synced-secret\n  data:\n    - secretKey: value\n      remoteRef:\n        key: explicit/\u003Csecret_name>           # \u003Csecrets_path>/\u003Csecret_name>\n        property: value\n",[90,148,146],{"__ignoreMap":107},[13,150,151,152,157],{},"Consultez le ",[17,153,156],{"href":154,"rel":155},"https://gitlab.com/guided-explorations/secrets-management/gitlab-secrets-manager-with-eso-and-k3s",[],"tutoriel"," dédié à GitLab Secrets Manager et ESO.",[66,159,161],{"id":160},"infrastructure-as-code-terraform-et-opentofu","Infrastructure as Code : Terraform et OpenTofu",[13,163,164,165,168,169,175,176,178,179,97],{},"Les fichiers d'état Terraform et les fichiers ",[90,166,167],{},".tfvars"," sont une source fréquente de fuite d'identifiants, car les secrets finissent par être écrits sur le disque ou intégrés par inadvertance dans le ",[17,170,174],{"href":171,"rel":172,"title":173},"https://about.gitlab.com/fr-fr/topics/version-control/",[],"Qu'est-ce que le contrôle de version ?","contrôle de version",". Terraform peut remédier à cette situation en lisant un secret GitLab comme source de données, en s'authentifiant à l'aide d'un JWT émis au moment de la planification ou de l'application. Référencez les identifiants directement dans Terraform, sans qu'ils soient stockés dans des fichiers ",[90,177,167],{}," ou des ",[17,180,183],{"href":181,"rel":182},"https://about.gitlab.com/fr-fr/blog/demystifying-ci-cd-variables/",[],"variables CI/CD",[99,185,189],{"className":186,"code":187,"language":188,"meta":107,"style":107},"language-shell shiki shiki-themes github-light","data \"external\" \"gitlab_secrets_token\" {\n  program = [\"bash\", \"${path.module}/scripts/mint_token.sh\"]\n\n  query = {\n    project_id = var.gitlab_project_id\n  }\n}\n\nprovider \"vault\" {\n  address   = data.external.gitlab_secrets_token.result.server\n  namespace = data.external.gitlab_secrets_token.result.namespace\n\n  auth_login_jwt {\n    mount = data.external.gitlab_secrets_token.result.auth_path\n    role  = data.external.gitlab_secrets_token.result.role\n    jwt   = data.external.gitlab_secrets_token.result.jwt\n  }\n}\n\ndata \"vault_kv_secret_v2\" \"my_secret\" {\n  mount = data.external.gitlab_secrets_token.result.mount\n  name  = \"${data.external.gitlab_secrets_token.result.secrets_path}/\u003Csecret_name>\"\n}\n\noutput \"secret_value\" {\n  value     = data.vault_kv_secret_v2.my_secret.data[\"value\"]\n  sensitive = true\n}\n","shell",[90,190,191,209,241,248,258,269,275,281,286,297,309,320,325,333,344,356,367,372,377,382,395,406,442,447,452,463,475,487],{"__ignoreMap":107},[192,193,196,199,203,206],"span",{"class":194,"line":195},"line",1,[192,197,129],{"class":198},"s7eDp",[192,200,202],{"class":201},"sYBdl"," \"external\"",[192,204,205],{"class":201}," \"gitlab_secrets_token\"",[192,207,208],{"class":201}," {\n",[192,210,212,215,218,222,225,227,230,233,235,238],{"class":194,"line":211},2,[192,213,214],{"class":198},"  program",[192,216,217],{"class":201}," =",[192,219,221],{"class":220},"sgsFI"," [",[192,223,224],{"class":201},"\"bash\"",[192,226,23],{"class":220},[192,228,229],{"class":201},"\"${",[192,231,232],{"class":220},"path",[192,234,97],{"class":201},[192,236,237],{"class":220},"module",[192,239,240],{"class":201},"}/scripts/mint_token.sh\"]\n",[192,242,244],{"class":194,"line":243},3,[192,245,247],{"emptyLinePlaceholder":246},true,"\n",[192,249,251,254,256],{"class":194,"line":250},4,[192,252,253],{"class":198},"  query",[192,255,217],{"class":201},[192,257,208],{"class":201},[192,259,261,264,266],{"class":194,"line":260},5,[192,262,263],{"class":198},"    project_id",[192,265,217],{"class":201},[192,267,268],{"class":201}," var.gitlab_project_id\n",[192,270,272],{"class":194,"line":271},6,[192,273,274],{"class":220},"  }\n",[192,276,278],{"class":194,"line":277},7,[192,279,280],{"class":220},"}\n",[192,282,284],{"class":194,"line":283},8,[192,285,247],{"emptyLinePlaceholder":246},[192,287,289,292,295],{"class":194,"line":288},9,[192,290,291],{"class":198},"provider",[192,293,294],{"class":201}," \"vault\"",[192,296,208],{"class":201},[192,298,300,303,306],{"class":194,"line":299},10,[192,301,302],{"class":198},"  address",[192,304,305],{"class":201},"   =",[192,307,308],{"class":201}," data.external.gitlab_secrets_token.result.server\n",[192,310,312,315,317],{"class":194,"line":311},11,[192,313,314],{"class":198},"  namespace",[192,316,217],{"class":201},[192,318,319],{"class":201}," data.external.gitlab_secrets_token.result.namespace\n",[192,321,323],{"class":194,"line":322},12,[192,324,247],{"emptyLinePlaceholder":246},[192,326,328,331],{"class":194,"line":327},13,[192,329,330],{"class":198},"  auth_login_jwt",[192,332,208],{"class":201},[192,334,336,339,341],{"class":194,"line":335},14,[192,337,338],{"class":198},"    mount",[192,340,217],{"class":201},[192,342,343],{"class":201}," data.external.gitlab_secrets_token.result.auth_path\n",[192,345,347,350,353],{"class":194,"line":346},15,[192,348,349],{"class":198},"    role",[192,351,352],{"class":201},"  =",[192,354,355],{"class":201}," data.external.gitlab_secrets_token.result.role\n",[192,357,359,362,364],{"class":194,"line":358},16,[192,360,361],{"class":198},"    jwt",[192,363,305],{"class":201},[192,365,366],{"class":201}," data.external.gitlab_secrets_token.result.jwt\n",[192,368,370],{"class":194,"line":369},17,[192,371,274],{"class":220},[192,373,375],{"class":194,"line":374},18,[192,376,280],{"class":220},[192,378,380],{"class":194,"line":379},19,[192,381,247],{"emptyLinePlaceholder":246},[192,383,385,387,390,393],{"class":194,"line":384},20,[192,386,129],{"class":198},[192,388,389],{"class":201}," \"vault_kv_secret_v2\"",[192,391,392],{"class":201}," \"my_secret\"",[192,394,208],{"class":201},[192,396,398,401,403],{"class":194,"line":397},21,[192,399,400],{"class":198},"  mount",[192,402,217],{"class":201},[192,404,405],{"class":201}," data.external.gitlab_secrets_token.result.mount\n",[192,407,409,412,414,417,419,421,424,426,429,431,434,436,439],{"class":194,"line":408},22,[192,410,411],{"class":198},"  name",[192,413,352],{"class":201},[192,415,416],{"class":201}," \"${",[192,418,129],{"class":220},[192,420,97],{"class":201},[192,422,423],{"class":220},"external",[192,425,97],{"class":201},[192,427,428],{"class":220},"gitlab_secrets_token",[192,430,97],{"class":201},[192,432,433],{"class":220},"result",[192,435,97],{"class":201},[192,437,438],{"class":220},"secrets_path",[192,440,441],{"class":201},"}/\u003Csecret_name>\"\n",[192,443,445],{"class":194,"line":444},23,[192,446,280],{"class":220},[192,448,450],{"class":194,"line":449},24,[192,451,247],{"emptyLinePlaceholder":246},[192,453,455,458,461],{"class":194,"line":454},25,[192,456,457],{"class":198},"output",[192,459,460],{"class":201}," \"secret_value\"",[192,462,208],{"class":201},[192,464,466,469,472],{"class":194,"line":465},26,[192,467,468],{"class":198},"  value",[192,470,471],{"class":201},"     =",[192,473,474],{"class":201}," data.vault_kv_secret_v2.my_secret.data[\"value\"]\n",[192,476,478,481,483],{"class":194,"line":477},27,[192,479,480],{"class":198},"  sensitive",[192,482,217],{"class":201},[192,484,486],{"class":485},"sYu0t"," true\n",[192,488,490],{"class":194,"line":489},28,[192,491,280],{"class":220},[13,493,494,495,97],{},"Pour en savoir plus, consultez la documentation sur la ",[17,496,499],{"href":497,"rel":498},"https://docs.gitlab.com/ci/secrets/secrets_manager/non_cicd_access/#use-with-terraform",[],"lecture de secrets dans Terraform",[66,501,503],{"id":502},"ligne-de-commande-openbao-ou-vault-cli","Ligne de commande : OpenBao ou Vault CLI",[13,505,506],{},"Tous les workflows ne passent pas directement par l'API. Si votre équipe utilise déjà des scripts qui s'appuient sur des outils compatibles avec Vault, OpenBao ou Vault CLI permet de lire des secrets depuis GitLab Secrets Manager de la même façon qu'avec Vault.",[99,508,510],{"className":186,"code":509,"language":188,"meta":107,"style":107},"export VAULT_ADDR=\"\u003Cserver>\"\nexport VAULT_NAMESPACE=\"\u003Cnamespace>\"\n\n# Exchange the minted JWT for an OpenBao token, then export it.\nvault write \"auth/\u003Cauth_jwt_path>/login\" role=\u003Crole> jwt=\u003Ctoken>\nexport VAULT_TOKEN=\"\u003Cclient_token>\"\n\n# Read the secret value.\nvault kv get -mount=\u003Cpath> \"\u003Csecrets_path>/\u003Csecret_name>\"\n",[90,511,512,527,539,543,549,589,601,605,610],{"__ignoreMap":107},[192,513,514,518,521,524],{"class":194,"line":195},[192,515,517],{"class":516},"sD7c4","export",[192,519,520],{"class":220}," VAULT_ADDR",[192,522,523],{"class":516},"=",[192,525,526],{"class":201},"\"\u003Cserver>\"\n",[192,528,529,531,534,536],{"class":194,"line":211},[192,530,517],{"class":516},[192,532,533],{"class":220}," VAULT_NAMESPACE",[192,535,523],{"class":516},[192,537,538],{"class":201},"\"\u003Cnamespace>\"\n",[192,540,541],{"class":194,"line":243},[192,542,247],{"emptyLinePlaceholder":246},[192,544,545],{"class":194,"line":250},[192,546,548],{"class":547},"sAwPA","# Exchange the minted JWT for an OpenBao token, then export it.\n",[192,550,551,554,557,560,563,566,569,572,575,578,580,583,586],{"class":194,"line":260},[192,552,553],{"class":198},"vault",[192,555,556],{"class":201}," write",[192,558,559],{"class":201}," \"auth/\u003Cauth_jwt_path>/login\"",[192,561,562],{"class":201}," role=",[192,564,565],{"class":516},"\u003C",[192,567,568],{"class":201},"rol",[192,570,571],{"class":220},"e",[192,573,574],{"class":516},">",[192,576,577],{"class":201}," jwt=",[192,579,565],{"class":516},[192,581,582],{"class":201},"toke",[192,584,585],{"class":220},"n",[192,587,588],{"class":516},">\n",[192,590,591,593,596,598],{"class":194,"line":271},[192,592,517],{"class":516},[192,594,595],{"class":220}," VAULT_TOKEN",[192,597,523],{"class":516},[192,599,600],{"class":201},"\"\u003Cclient_token>\"\n",[192,602,603],{"class":194,"line":277},[192,604,247],{"emptyLinePlaceholder":246},[192,606,607],{"class":194,"line":283},[192,608,609],{"class":547},"# Read the secret value.\n",[192,611,612,614,617,620,623,625,627,629],{"class":194,"line":288},[192,613,553],{"class":198},[192,615,616],{"class":201}," kv",[192,618,619],{"class":201}," get",[192,621,622],{"class":485}," -mount=",[192,624,565],{"class":516},[192,626,232],{"class":485},[192,628,574],{"class":516},[192,630,631],{"class":201}," \"\u003Csecrets_path>/\u003Csecret_name>\"\n",[66,633,635],{"id":634},"quand-utiliser-lapi-secrets-manager","Quand utiliser l'API Secrets Manager",[13,637,638,639,645,646,649],{},"Pour les automatisations qui ne s'intègrent pas à ",[17,640,644],{"href":641,"rel":642,"title":643},"https://about.gitlab.com/fr-fr/blog/what-is-gitlab-ci-cd/",[],"Qu'est-ce que GitLab CI/CD ?","GitLab CI/CD",", Kubernetes ou Terraform, l'",[17,647,64],{"href":62,"rel":648},[]," permet à tout système externe de récupérer des secrets depuis GitLab Secrets Manager, sans avoir à coder des identifiants en dur ni à maintenir des fichiers de variables séparés.",[99,651,653],{"className":186,"code":652,"language":188,"meta":107,"style":107},"# Request JWT token using Service Account\nRESPONSE=$(curl --silent --request POST \\\n  --header \"PRIVATE-TOKEN: \u003Cyour_access_token>\" \\\n  --url \"https://gitlab.example.com/api/v4/projects/\u003Cproject_id>/secrets_manager/access_token\")\n\nSERVER=$(echo \"$RESPONSE\" | jq --raw-output .provider.vault.server)\nNAMESPACE=$(echo \"$RESPONSE\" | jq --raw-output .provider.vault.namespace)\nMOUNT=$(echo \"$RESPONSE\" | jq --raw-output .provider.vault.path)\nSECRETS_PATH=$(echo \"$RESPONSE\" | jq --raw-output .provider.vault.secrets_path)\nAUTH_PATH=$(echo \"$RESPONSE\" | jq --raw-output .provider.vault.auth.jwt.path)\nROLE=$(echo \"$RESPONSE\" | jq --raw-output .provider.vault.auth.jwt.role)\nJWT=$(echo \"$RESPONSE\" | jq --raw-output .provider.vault.auth.jwt.token)\n\n# Exchange the JWT for a short-lived OpenBao token.\nVAULT_TOKEN=$(curl --silent --request POST \\\n  --header \"X-Vault-Namespace: $NAMESPACE\" \\\n  --data \"{\\\"role\\\":\\\"$ROLE\\\",\\\"jwt\\\":\\\"$JWT\\\"}\" \\\n  \"$SERVER/v1/auth/$AUTH_PATH/login\" | jq --raw-output .auth.client_token)\n\n# Read the secret value.\ncurl --silent \\\n  --header \"X-Vault-Token: $VAULT_TOKEN\" \\\n  --header \"X-Vault-Namespace: $NAMESPACE\" \\\n  \"$SERVER/v1/$MOUNT/data/$SECRETS_PATH/\u003Csecret_name>\"\n",[90,654,655,660,685,695,706,710,745,773,801,829,857,885,913,917,922,941,955,1005,1033,1037,1041,1049,1063,1075],{"__ignoreMap":107},[192,656,657],{"class":194,"line":195},[192,658,659],{"class":547},"# Request JWT token using Service Account\n",[192,661,662,665,667,670,673,676,679,682],{"class":194,"line":211},[192,663,664],{"class":220},"RESPONSE",[192,666,523],{"class":516},[192,668,669],{"class":220},"$(",[192,671,672],{"class":198},"curl",[192,674,675],{"class":485}," --silent",[192,677,678],{"class":485}," --request",[192,680,681],{"class":201}," POST",[192,683,684],{"class":485}," \\\n",[192,686,687,690,693],{"class":194,"line":243},[192,688,689],{"class":485},"  --header",[192,691,692],{"class":201}," \"PRIVATE-TOKEN: \u003Cyour_access_token>\"",[192,694,684],{"class":485},[192,696,697,700,703],{"class":194,"line":250},[192,698,699],{"class":485},"  --url",[192,701,702],{"class":201}," \"https://gitlab.example.com/api/v4/projects/\u003Cproject_id>/secrets_manager/access_token\"",[192,704,705],{"class":220},")\n",[192,707,708],{"class":194,"line":260},[192,709,247],{"emptyLinePlaceholder":246},[192,711,712,715,717,719,722,725,728,731,734,737,740,743],{"class":194,"line":271},[192,713,714],{"class":220},"SERVER",[192,716,523],{"class":516},[192,718,669],{"class":220},[192,720,721],{"class":485},"echo",[192,723,724],{"class":201}," \"",[192,726,727],{"class":220},"$RESPONSE",[192,729,730],{"class":201},"\"",[192,732,733],{"class":516}," |",[192,735,736],{"class":198}," jq",[192,738,739],{"class":485}," --raw-output",[192,741,742],{"class":201}," .provider.vault.server",[192,744,705],{"class":220},[192,746,747,750,752,754,756,758,760,762,764,766,768,771],{"class":194,"line":277},[192,748,749],{"class":220},"NAMESPACE",[192,751,523],{"class":516},[192,753,669],{"class":220},[192,755,721],{"class":485},[192,757,724],{"class":201},[192,759,727],{"class":220},[192,761,730],{"class":201},[192,763,733],{"class":516},[192,765,736],{"class":198},[192,767,739],{"class":485},[192,769,770],{"class":201}," .provider.vault.namespace",[192,772,705],{"class":220},[192,774,775,778,780,782,784,786,788,790,792,794,796,799],{"class":194,"line":283},[192,776,777],{"class":220},"MOUNT",[192,779,523],{"class":516},[192,781,669],{"class":220},[192,783,721],{"class":485},[192,785,724],{"class":201},[192,787,727],{"class":220},[192,789,730],{"class":201},[192,791,733],{"class":516},[192,793,736],{"class":198},[192,795,739],{"class":485},[192,797,798],{"class":201}," .provider.vault.path",[192,800,705],{"class":220},[192,802,803,806,808,810,812,814,816,818,820,822,824,827],{"class":194,"line":288},[192,804,805],{"class":220},"SECRETS_PATH",[192,807,523],{"class":516},[192,809,669],{"class":220},[192,811,721],{"class":485},[192,813,724],{"class":201},[192,815,727],{"class":220},[192,817,730],{"class":201},[192,819,733],{"class":516},[192,821,736],{"class":198},[192,823,739],{"class":485},[192,825,826],{"class":201}," .provider.vault.secrets_path",[192,828,705],{"class":220},[192,830,831,834,836,838,840,842,844,846,848,850,852,855],{"class":194,"line":299},[192,832,833],{"class":220},"AUTH_PATH",[192,835,523],{"class":516},[192,837,669],{"class":220},[192,839,721],{"class":485},[192,841,724],{"class":201},[192,843,727],{"class":220},[192,845,730],{"class":201},[192,847,733],{"class":516},[192,849,736],{"class":198},[192,851,739],{"class":485},[192,853,854],{"class":201}," .provider.vault.auth.jwt.path",[192,856,705],{"class":220},[192,858,859,862,864,866,868,870,872,874,876,878,880,883],{"class":194,"line":311},[192,860,861],{"class":220},"ROLE",[192,863,523],{"class":516},[192,865,669],{"class":220},[192,867,721],{"class":485},[192,869,724],{"class":201},[192,871,727],{"class":220},[192,873,730],{"class":201},[192,875,733],{"class":516},[192,877,736],{"class":198},[192,879,739],{"class":485},[192,881,882],{"class":201}," .provider.vault.auth.jwt.role",[192,884,705],{"class":220},[192,886,887,890,892,894,896,898,900,902,904,906,908,911],{"class":194,"line":322},[192,888,889],{"class":220},"JWT",[192,891,523],{"class":516},[192,893,669],{"class":220},[192,895,721],{"class":485},[192,897,724],{"class":201},[192,899,727],{"class":220},[192,901,730],{"class":201},[192,903,733],{"class":516},[192,905,736],{"class":198},[192,907,739],{"class":485},[192,909,910],{"class":201}," .provider.vault.auth.jwt.token",[192,912,705],{"class":220},[192,914,915],{"class":194,"line":327},[192,916,247],{"emptyLinePlaceholder":246},[192,918,919],{"class":194,"line":335},[192,920,921],{"class":547},"# Exchange the JWT for a short-lived OpenBao token.\n",[192,923,924,927,929,931,933,935,937,939],{"class":194,"line":346},[192,925,926],{"class":220},"VAULT_TOKEN",[192,928,523],{"class":516},[192,930,669],{"class":220},[192,932,672],{"class":198},[192,934,675],{"class":485},[192,936,678],{"class":485},[192,938,681],{"class":201},[192,940,684],{"class":485},[192,942,943,945,948,951,953],{"class":194,"line":358},[192,944,689],{"class":485},[192,946,947],{"class":201}," \"X-Vault-Namespace: ",[192,949,950],{"class":220},"$NAMESPACE",[192,952,730],{"class":201},[192,954,684],{"class":485},[192,956,957,960,963,966,969,971,974,976,979,981,984,986,989,991,993,995,998,1000,1003],{"class":194,"line":369},[192,958,959],{"class":485},"  --data",[192,961,962],{"class":201}," \"{",[192,964,965],{"class":485},"\\\"",[192,967,968],{"class":201},"role",[192,970,965],{"class":485},[192,972,973],{"class":201},":",[192,975,965],{"class":485},[192,977,978],{"class":220},"$ROLE",[192,980,965],{"class":485},[192,982,983],{"class":201},",",[192,985,965],{"class":485},[192,987,988],{"class":201},"jwt",[192,990,965],{"class":485},[192,992,973],{"class":201},[192,994,965],{"class":485},[192,996,997],{"class":220},"$JWT",[192,999,965],{"class":485},[192,1001,1002],{"class":201},"}\"",[192,1004,684],{"class":485},[192,1006,1007,1010,1013,1016,1019,1022,1024,1026,1028,1031],{"class":194,"line":374},[192,1008,1009],{"class":201},"  \"",[192,1011,1012],{"class":220},"$SERVER",[192,1014,1015],{"class":201},"/v1/auth/",[192,1017,1018],{"class":220},"$AUTH_PATH",[192,1020,1021],{"class":201},"/login\"",[192,1023,733],{"class":516},[192,1025,736],{"class":198},[192,1027,739],{"class":485},[192,1029,1030],{"class":201}," .auth.client_token",[192,1032,705],{"class":220},[192,1034,1035],{"class":194,"line":379},[192,1036,247],{"emptyLinePlaceholder":246},[192,1038,1039],{"class":194,"line":384},[192,1040,609],{"class":547},[192,1042,1043,1045,1047],{"class":194,"line":397},[192,1044,672],{"class":198},[192,1046,675],{"class":485},[192,1048,684],{"class":485},[192,1050,1051,1053,1056,1059,1061],{"class":194,"line":408},[192,1052,689],{"class":485},[192,1054,1055],{"class":201}," \"X-Vault-Token: ",[192,1057,1058],{"class":220},"$VAULT_TOKEN",[192,1060,730],{"class":201},[192,1062,684],{"class":485},[192,1064,1065,1067,1069,1071,1073],{"class":194,"line":444},[192,1066,689],{"class":485},[192,1068,947],{"class":201},[192,1070,950],{"class":220},[192,1072,730],{"class":201},[192,1074,684],{"class":485},[192,1076,1077,1079,1081,1084,1087,1090,1093],{"class":194,"line":449},[192,1078,1009],{"class":201},[192,1080,1012],{"class":220},[192,1082,1083],{"class":201},"/v1/",[192,1085,1086],{"class":220},"$MOUNT",[192,1088,1089],{"class":201},"/data/",[192,1091,1092],{"class":220},"$SECRETS_PATH",[192,1094,1095],{"class":201},"/\u003Csecret_name>\"\n",[66,1097,1099],{"id":1098},"premiers-pas","Premiers pas",[13,1101,1102,1107],{},[17,1103,1106],{"href":1104,"rel":1105},"https://about.gitlab.com/fr-fr/blog/secrets-manager-in-public-beta/",[],"GitLab Secrets Manager est disponible en accès limité"," sous forme de module d'extension payant facturé via les GitLab Credits pour les utilisateurs GitLab Premium et GitLab Ultimate sur GitLab.com. GitLab Secrets Manager est en version bêta pour les déploiements auto-gérés, et la prise en charge de GitLab Dedicated sera bientôt disponible.",[13,1109,1110,1115,1116,1121],{},[17,1111,1114],{"href":1112,"rel":1113},"https://docs.gitlab.com/ci/secrets/secrets_manager/non_cicd_access/",[],"Consultez notre documentation"," pour vous lancer. Si vous constatez une lacune ou souhaitez nous faire part d'une demande, n'hésitez pas à laisser ",[17,1117,1120],{"href":1118,"rel":1119},"https://gitlab.com/gitlab-org/gitlab/-/work_items/598100",[],"un commentaire dans ce ticket",", car nous collectons les retours avant la mise en disponibilité générale.",[1123,1124,1125],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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 .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":107,"searchDepth":211,"depth":211,"links":1127},[1128,1129,1130,1131,1132],{"id":68,"depth":243,"text":69},{"id":160,"depth":243,"text":161},{"id":502,"depth":243,"text":503},{"id":634,"depth":243,"text":635},{"id":1098,"depth":243,"text":1099},"security","2026-08-26","Simplifiez la gestion des identifiants sur l'ensemble de votre pile. GitLab Secrets Manager offre une récupération sécurisée dans Kubernetes, Terraform et les workflows externes.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1759320418/xjmqcozxzt4frx0hori3.png",{},"/fr-fr/blog/gitlab-secrets-manager-add-eso-terraform-api-support",{"title":5,"description":1135,"config":1142},{"noIndex":1143},false,"gitlab-secrets-manager-add-eso-terraform-api-support","fr-fr/blog/gitlab-secrets-manager-add-eso-terraform-api-support",[1133,1147,1148],"features","product","BlogPost","-u0KppTICuvCJVwgUv3K1cRu9qbj8aLUcCD4CjwCdbI",{"logo":1152,"freeTrial":1157,"sales":1162,"login":1167,"items":1172,"search":1502,"minimal":1537,"duo":1556,"switchNav":1565,"pricingDeployment":1576},{"config":1153},{"href":1154,"dataGaName":1155,"dataGaLocation":1156},"/fr-fr/","gitlab logo","header",{"text":1158,"config":1159},"Commencer un essai gratuit",{"href":1160,"dataGaName":1161,"dataGaLocation":1156},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":1163,"config":1164},"Demander une démo",{"href":1165,"dataGaName":1166,"dataGaLocation":1156},"/request-a-demo/","sales",{"text":1168,"config":1169},"Connexion",{"href":1170,"dataGaName":1171,"dataGaLocation":1156},"https://gitlab.com/users/sign_in/","sign in",[1173,1258,1346,1351,1426,1480],{"text":1174,"left":246,"config":1175,"menu":1177},"Plateforme",{"dataNavLevelOne":1176},"platform",{"type":1178,"link":1179,"columns":1183,"feature":1247},"lists",{"text":1180,"config":1181},"Explorer la plateforme",{"href":1182,"dataGaName":1176,"dataGaLocation":1156},"/fr-fr/platform/",[1184,1206,1229],{"title":1185,"items":1186},"Exécution et workflows",[1187,1191,1196,1201],{"text":22,"config":1188},{"href":1189,"dataGaLocation":1156,"dataGaName":1190},"/fr-fr/solutions/continuous-integration/","ci/cd",{"text":1192,"config":1193},"Gestion du code source",{"href":1194,"dataGaLocation":1156,"dataGaName":1195},"/fr-fr/solutions/source-code-management/","source code management",{"text":1197,"config":1198},"Méthode de livraison selon les principes Agile",{"href":1199,"dataGaLocation":1156,"dataGaName":1200},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":1202,"config":1203},"Gestion des artefacts",{"href":1204,"dataGaLocation":1156,"dataGaName":1205},"/fr-fr/artifact-central/","artifact management",{"title":1207,"items":1208},"Sécurité et gouvernance",[1209,1214,1219,1224],{"text":1210,"config":1211},"Test de sécurité des applications",{"href":1212,"dataGaLocation":1156,"dataGaName":1213},"/fr-fr/solutions/application-security-testing/","application security testing",{"text":1215,"config":1216},"Gouvernance et conformité",{"href":1217,"dataGaLocation":1156,"dataGaName":1218},"/fr-fr/solutions/software-compliance/","governance and compliance",{"text":1220,"config":1221},"Gestion des secrets",{"href":1222,"dataGaLocation":1156,"dataGaName":1223},"/fr-fr/gitlab-secrets-manager/","secrets management",{"text":1225,"config":1226},"Sécurité de la chaîne d'approvisionnement",{"href":1227,"dataGaLocation":1156,"dataGaName":1228},"/fr-fr/solutions/supply-chain/","supply chain security",{"title":1230,"items":1231},"Contexte et IA",[1232,1237,1242],{"text":1233,"config":1234},"Orchestration agentique",{"href":1235,"dataGaLocation":1156,"dataGaName":1236},"/fr-fr/gitlab-duo-agent-platform/","agentic orchestration",{"text":1238,"config":1239},"Graphe de contexte",{"href":1240,"dataGaLocation":1156,"dataGaName":1241},"/fr-fr/gitlab-orbit/","context graph",{"text":1243,"config":1244},"Visibilité et mesures",{"href":1245,"dataGaLocation":1156,"dataGaName":1246},"/fr-fr/solutions/visibility-measurement/","visibility and measurement",{"config":1248,"title":1251,"text":1252,"link":1253},{"background":1249,"textColor":1250},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","Pourquoi utiliser GitLab","Une plateforme unique offrant une rapidité maîtrisée tout au long du cycle de développement logiciel.",{"text":1254,"config":1255},"En savoir plus",{"href":1256,"dataGaName":1257,"dataGaLocation":1156},"/fr-fr/why-gitlab/","why gitlab",{"text":1259,"left":246,"config":1260,"menu":1262},"Solutions",{"dataNavLevelOne":1261},"solutions",{"type":1178,"link":1263,"columns":1267,"feature":1337},{"text":1264,"config":1265},"Voir toutes les solutions",{"href":1266,"dataGaName":1261,"dataGaLocation":1156},"/fr-fr/solutions/",[1268,1286,1304],{"title":1269,"items":1270},"Résultats",[1271,1276,1281],{"text":1272,"config":1273},"Modernisation DevOps",{"href":1274,"dataGaLocation":1156,"dataGaName":1275},"/fr-fr/assessments/devops-modernization-assessment/","devops modernization",{"text":1277,"config":1278},"Modernisation de la sécurité",{"href":1279,"dataGaLocation":1156,"dataGaName":1280},"/fr-fr/assessments/security-modernization-assessment/","security modernization",{"text":1282,"config":1283},"Modernisation de l'IA",{"href":1284,"dataGaLocation":1156,"dataGaName":1285},"/fr-fr/assessments/ai-modernization-assessment/","ai modernization",{"title":1287,"items":1288},"Par taille",[1289,1294,1299],{"text":1290,"config":1291},"Entreprises",{"href":1292,"dataGaLocation":1156,"dataGaName":1293},"/fr-fr/enterprise/","enterprise",{"text":1295,"config":1296},"PME",{"href":1297,"dataGaLocation":1156,"dataGaName":1298},"/fr-fr/small-business/","small business",{"text":1300,"config":1301},"Start-up",{"href":1302,"dataGaLocation":1156,"dataGaName":1303},"/fr-fr/solutions/startups/","startups",{"title":1305,"items":1306},"Secteurs",[1307,1312,1317,1322,1327,1332],{"text":1308,"config":1309},"Services financiers",{"href":1310,"dataGaLocation":1156,"dataGaName":1311},"/fr-fr/solutions/finance/","financial services",{"text":1313,"config":1314},"Secteur public",{"href":1315,"dataGaLocation":1156,"dataGaName":1316},"/fr-fr/solutions/public-sector/","public sector",{"text":1318,"config":1319},"Télécommunications",{"href":1320,"dataGaLocation":1156,"dataGaName":1321},"/fr-fr/solutions/telecommunications/","telecommunications",{"text":1323,"config":1324},"Automobile",{"href":1325,"dataGaLocation":1156,"dataGaName":1326},"/fr-fr/solutions/automotive/","automotive",{"text":1328,"config":1329},"Éducation",{"href":1330,"dataGaLocation":1156,"dataGaName":1331},"/fr-fr/solutions/education/","education",{"text":1333,"config":1334},"Aérospatiale",{"href":1335,"dataGaLocation":1156,"dataGaName":1336},"/fr-fr/solutions/aerospace/","aerospace",{"config":1338,"title":1339,"text":1340,"link":1341},{"background":1249,"textColor":1250},"GitLab Security Standard","Découvrez comment renforcer votre usine logicielle et permettre aux agents d'IA de gagner en autonomie sans sacrifier la sécurité.",{"text":1342,"config":1343},"Découvrir GitLab Security Standard",{"href":1344,"dataGaName":1345,"dataGaLocation":1156},"/fr-fr/gitlab-security-standard/","gitlab security standard",{"text":1347,"config":1348},"Tarifs",{"href":1349,"dataGaName":1350,"dataGaLocation":1156,"dataNavLevelOne":1350},"/fr-fr/pricing/","pricing",{"text":1352,"config":1353,"menu":1355},"Ressources",{"dataNavLevelOne":1354},"resources",{"type":1178,"link":1356,"columns":1360,"feature":1417},{"text":1357,"config":1358},"Afficher toutes les ressources",{"href":1359,"dataGaName":1354,"dataGaLocation":1156},"/fr-fr/resources/",[1361,1389],{"title":1362,"items":1363},"Découvrir",[1364,1369,1374,1379,1384],{"text":1365,"config":1366},"Documentation",{"href":1367,"dataGaName":1368,"dataGaLocation":1156},"https://docs.gitlab.com/","docs",{"text":1370,"config":1371},"GitLab University",{"href":1372,"dataGaName":1373,"dataGaLocation":1156},"https://university.gitlab.com/","university",{"text":1375,"config":1376},"Démos",{"href":1377,"dataGaName":1378,"dataGaLocation":1156},"/fr-fr/gitlab-technical-demo-series/","demo series",{"text":1380,"config":1381},"Centre de démos",{"href":1382,"dataGaName":1383,"dataGaLocation":1156},"/fr-fr/demo-hub/","demo hub",{"text":1385,"config":1386},"Services",{"href":1387,"dataGaName":1388,"dataGaLocation":1156},"/fr-fr/services/","services",{"title":1390,"items":1391},"Connecter",[1392,1397,1402,1407,1412],{"text":1393,"config":1394},"Blog",{"href":1395,"dataGaName":1396,"dataGaLocation":1156},"/fr-fr/blog/","blog",{"text":1398,"config":1399},"Communauté",{"href":1400,"dataGaName":1401,"dataGaLocation":1156},"/community/","community",{"text":1403,"config":1404},"Clients",{"href":1405,"dataGaName":1406,"dataGaLocation":1156},"/fr-fr/customers/","customers",{"text":1408,"config":1409},"Partenaires",{"href":1410,"dataGaName":1411,"dataGaLocation":1156},"/fr-fr/partners/","partners",{"text":1413,"config":1414},"Événements",{"href":1415,"dataGaName":1416,"dataGaLocation":1156},"/events/","events",{"config":1418,"title":1419,"text":1420,"link":1421},{"background":1249,"textColor":1250},"Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":1422,"config":1423},"Lire les articles les plus récents",{"href":1424,"dataGaName":1425,"dataGaLocation":1156},"/fr-fr/whats-new/","whats new",{"text":1427,"config":1428,"menu":1430},"Société",{"dataNavLevelOne":1429},"company",{"type":1178,"columns":1431},[1432],{"items":1433},[1434,1439,1445,1450,1455,1460,1465,1470,1475],{"text":1435,"config":1436},"À propos",{"href":1437,"dataGaName":1438,"dataGaLocation":1156},"/fr-fr/company/","about",{"text":1440,"config":1441,"footerGa":1444},"Carrières",{"href":1442,"dataGaName":1443,"dataGaLocation":1156},"/jobs/","jobs",{"dataGaName":1443},{"text":1446,"config":1447},"Presse",{"href":1448,"dataGaName":1449,"dataGaLocation":1156},"/press/","press",{"text":1451,"config":1452},"Manuel",{"href":1453,"dataGaName":1454,"dataGaLocation":1156},"https://handbook.gitlab.com/","handbook",{"text":1456,"config":1457},"Leadership",{"href":1458,"dataGaName":1459,"dataGaLocation":1156},"/company/team/e-group/","leadership",{"text":1461,"config":1462},"Relations avec les investisseurs",{"href":1463,"dataGaName":1464,"dataGaLocation":1156},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1466,"config":1467},"Trust Center",{"href":1468,"dataGaName":1469,"dataGaLocation":1156},"/fr-fr/security/","trust center",{"text":1471,"config":1472},"Centre pour la transparence de l'IA",{"href":1473,"dataGaName":1474,"dataGaLocation":1156},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":1476,"config":1477},"Newsletter",{"href":1478,"dataGaName":1479,"dataGaLocation":1156},"/company/contact/#contact-forms","newsletter",{"text":1481,"config":1482,"menu":1483},"Nous contacter",{"dataNavLevelOne":1429},{"type":1178,"columns":1484},[1485],{"items":1486},[1487,1492,1497],{"text":1488,"config":1489},"Contacter l'équipe commerciale",{"href":1490,"dataGaName":1491,"dataGaLocation":1156},"/fr-fr/sales/","talk to sales",{"text":1493,"config":1494},"Assistance GitLab",{"href":1495,"dataGaName":1496,"dataGaLocation":1156},"https://support.gitlab.com/hc/en-us","support portal",{"text":1498,"config":1499},"Portail clients GitLab",{"href":1500,"dataGaName":1501,"dataGaLocation":1156},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1503,"login":1504,"suggestions":1511},"Fermer",{"text":1505,"link":1506},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1507,"config":1508},"GitLab.com",{"href":1170,"dataGaName":1509,"dataGaLocation":1510},"search login","search",{"text":1512,"default":1513},"Suggestions",[1514,1518,1522,1524,1529,1534],{"text":1515,"config":1516},"GitLab Duo Agent Platform",{"href":1235,"dataGaName":1517,"dataGaLocation":1510},"GitLab Duo Agent Platform",{"text":1519,"config":1520},"Suggestions de code (IA)",{"href":1235,"dataGaName":1521,"dataGaLocation":1510},"Code Suggestions (AI)",{"text":22,"config":1523},{"href":1189,"dataGaName":22,"dataGaLocation":1510},{"text":1525,"config":1526},"GitLab sur AWS",{"href":1527,"dataGaName":1528,"dataGaLocation":1510},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1530,"config":1531},"GitLab sur Google Cloud",{"href":1532,"dataGaName":1533,"dataGaLocation":1510},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1251,"config":1535},{"href":1256,"dataGaName":1536,"dataGaLocation":1510},"Why GitLab?",{"freeTrial":1538,"mobileIcon":1543,"desktopIcon":1548,"secondaryButton":1551},{"text":1539,"config":1540},"Commencer votre essai gratuit",{"href":1541,"dataGaName":1161,"dataGaLocation":1542},"https://gitlab.com/-/trials/new/","nav",{"altText":1544,"config":1545},"Icône GitLab",{"src":1546,"dataGaName":1547,"dataGaLocation":1542},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1544,"config":1549},{"src":1550,"dataGaName":1547,"dataGaLocation":1542},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1552,"config":1553},"Commencer",{"href":1554,"dataGaName":1555,"dataGaLocation":1542},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1557,"mobileIcon":1561,"desktopIcon":1563},{"text":1558,"config":1559},"En savoir plus sur GitLab Duo",{"href":1235,"dataGaName":1560,"dataGaLocation":1542},"gitlab duo",{"altText":1544,"config":1562},{"src":1546,"dataGaName":1547,"dataGaLocation":1542},{"altText":1544,"config":1564},{"src":1550,"dataGaName":1547,"dataGaLocation":1542},{"button":1566,"mobileIcon":1571,"desktopIcon":1573},{"text":1567,"config":1568},"/switch",{"href":1569,"dataGaName":1570,"dataGaLocation":1542},"#contact","switch",{"altText":1544,"config":1572},{"src":1546,"dataGaName":1547,"dataGaLocation":1542},{"altText":1544,"config":1574},{"src":1575,"dataGaName":1547,"dataGaLocation":1542},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1577,"mobileIcon":1582,"desktopIcon":1584},{"text":1578,"config":1579},"Retour aux tarifs",{"href":1349,"dataGaName":1580,"dataGaLocation":1542,"icon":1581},"back to pricing","GoBack",{"altText":1544,"config":1583},{"src":1546,"dataGaName":1547,"dataGaLocation":1542},{"altText":1544,"config":1585},{"src":1550,"dataGaName":1547,"dataGaLocation":1542},{"title":1587,"button":1588,"config":1591},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":1254,"config":1589},{"href":1240,"dataGaName":1590,"dataGaLocation":1156},"orbit",{"layout":1592,"disabled":1143},"release",{"data":1594},{"text":1595,"source":1596,"edit":1602,"contribute":1607,"config":1612,"items":1617,"minimal":1835},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1597,"config":1598},"Afficher le code source de la page",{"href":1599,"dataGaName":1600,"dataGaLocation":1601},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1603,"config":1604},"Modifier cette page",{"href":1605,"dataGaName":1606,"dataGaLocation":1601},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1608,"config":1609},"Contribuer",{"href":1610,"dataGaName":1611,"dataGaLocation":1601},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1613,"facebook":1614,"youtube":1615,"linkedin":1616},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1618,1663,1720,1761,1802],{"title":1347,"links":1619,"subMenu":1634},[1620,1624,1629],{"text":1621,"config":1622},"Voir les forfaits",{"href":1349,"dataGaName":1623,"dataGaLocation":1601},"view plans",{"text":1625,"config":1626},"GitLab Premium",{"href":1627,"dataGaName":1628,"dataGaLocation":1601},"/fr-fr/pricing/premium/","why premium",{"text":1630,"config":1631},"GitLab Ultimate",{"href":1632,"dataGaName":1633,"dataGaLocation":1601},"/fr-fr/pricing/ultimate/","why ultimate",[1635],{"title":1481,"links":1636},[1637,1639,1641,1643,1648,1653,1658],{"text":1488,"config":1638},{"href":1490,"dataGaName":1166,"dataGaLocation":1601},{"text":1493,"config":1640},{"href":1495,"dataGaName":1496,"dataGaLocation":1601},{"text":1498,"config":1642},{"href":1500,"dataGaName":1501,"dataGaLocation":1601},{"text":1644,"config":1645},"Statut",{"href":1646,"dataGaName":1647,"dataGaLocation":1601},"https://status.gitlab.com/","status",{"text":1649,"config":1650},"Conditions d'utilisation",{"href":1651,"dataGaName":1652,"dataGaLocation":1601},"/terms/","terms of use",{"text":1654,"config":1655},"Politique de confidentialité",{"href":1656,"dataGaName":1657,"dataGaLocation":1601},"/fr-fr/privacy/","privacy statement",{"text":1659,"config":1660},"Gestion des cookies",{"dataGaName":1661,"dataGaLocation":1601,"id":1662,"isOneTrustButton":246},"cookie preferences","ot-sdk-btn",{"title":1174,"links":1664,"subMenu":1677},[1665,1667,1669,1671,1673,1675],{"text":1180,"config":1666},{"href":1182,"dataGaName":1176,"dataGaLocation":1601},{"text":1233,"config":1668},{"href":1235,"dataGaName":1236,"dataGaLocation":1601},{"text":22,"config":1670},{"href":1189,"dataGaName":1190,"dataGaLocation":1601},{"text":1238,"config":1672},{"href":1240,"dataGaName":1241,"dataGaLocation":1601},{"text":1220,"config":1674},{"href":1222,"dataGaName":1223,"dataGaLocation":1601},{"text":1251,"config":1676},{"href":1256,"dataGaName":1257,"dataGaLocation":1601},[1678],{"title":1679,"links":1680},"Thèmes",[1681,1685,1690,1695,1700,1705,1710,1715],{"text":22,"config":1682},{"href":1683,"dataGaName":1684,"dataGaLocation":1601},"/fr-fr/topics/ci-cd/","cicd",{"text":1686,"config":1687},"GitOps",{"href":1688,"dataGaName":1689,"dataGaLocation":1601},"/fr-fr/topics/gitops/","gitops",{"text":1691,"config":1692},"DevOps",{"href":1693,"dataGaName":1694,"dataGaLocation":1601},"/fr-fr/topics/devops/","devops",{"text":1696,"config":1697},"Contrôle de version",{"href":1698,"dataGaName":1699,"dataGaLocation":1601},"/fr-fr/topics/version-control/","version control",{"text":1701,"config":1702},"DevSecOps",{"href":1703,"dataGaName":1704,"dataGaLocation":1601},"/fr-fr/topics/devsecops/","devsecops",{"text":1706,"config":1707},"Cloud-native",{"href":1708,"dataGaName":1709,"dataGaLocation":1601},"/fr-fr/topics/cloud-native/","cloud native",{"text":1711,"config":1712},"IA pour la programmation",{"href":1713,"dataGaName":1714,"dataGaLocation":1601},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1716,"config":1717},"IA agentique",{"href":1718,"dataGaName":1719,"dataGaLocation":1601},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1259,"links":1721},[1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1749,1753,1757],{"text":1272,"config":1723},{"href":1274,"dataGaName":1275,"dataGaLocation":1601},{"text":1277,"config":1725},{"href":1279,"dataGaName":1280,"dataGaLocation":1601},{"text":1282,"config":1727},{"href":1284,"dataGaName":1285,"dataGaLocation":1601},{"text":1308,"config":1729},{"href":1310,"dataGaName":1311,"dataGaLocation":1601},{"text":1313,"config":1731},{"href":1315,"dataGaName":1316,"dataGaLocation":1601},{"text":1318,"config":1733},{"href":1320,"dataGaName":1321,"dataGaLocation":1601},{"text":1323,"config":1735},{"href":1325,"dataGaName":1326,"dataGaLocation":1601},{"text":1328,"config":1737},{"href":1330,"dataGaName":1331,"dataGaLocation":1601},{"text":1333,"config":1739},{"href":1335,"dataGaName":1336,"dataGaLocation":1601},{"text":1290,"config":1741},{"href":1292,"dataGaName":1293,"dataGaLocation":1601},{"text":1295,"config":1743},{"href":1297,"dataGaName":1298,"dataGaLocation":1601},{"text":1300,"config":1745},{"href":1302,"dataGaName":1303,"dataGaLocation":1601},{"text":1686,"config":1747},{"href":1748,"dataGaName":1689,"dataGaLocation":1601},"/fr-fr/solutions/gitops/",{"text":1750,"config":1751},"Analyse de la composition logicielle",{"href":1227,"dataGaName":1752,"dataGaLocation":1601},"software composition analysis",{"text":1754,"config":1755},"Gestion de la chaîne de valeur",{"href":1245,"dataGaName":1756,"dataGaLocation":1601},"value stream management",{"text":1758,"config":1759},"Toutes les solutions",{"href":1266,"dataGaName":1760,"dataGaLocation":1601},"all solutions",{"title":1352,"links":1762},[1763,1768,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1798],{"text":1764,"config":1765},"Installation",{"href":1766,"dataGaName":1767,"dataGaLocation":1601},"/fr-fr/install/","install",{"text":1769,"config":1770},"Guides de démarrage",{"href":1771,"dataGaName":1772,"dataGaLocation":1601},"/fr-fr/get-started/","quick setup checklists",{"text":1365,"config":1774},{"href":1367,"dataGaName":1368,"dataGaLocation":1601},{"text":1370,"config":1776},{"href":1372,"dataGaName":1373,"dataGaLocation":1601},{"text":1375,"config":1778},{"href":1377,"dataGaName":1378,"dataGaLocation":1601},{"text":1380,"config":1780},{"href":1382,"dataGaName":1383,"dataGaLocation":1601},{"text":1385,"config":1782},{"href":1387,"dataGaName":1388,"dataGaLocation":1601},{"text":1393,"config":1784},{"href":1395,"dataGaName":1396,"dataGaLocation":1601},{"text":1398,"config":1786},{"href":1400,"dataGaName":1401,"dataGaLocation":1601},{"text":1403,"config":1788},{"href":1405,"dataGaName":1406,"dataGaLocation":1601},{"text":1408,"config":1790},{"href":1410,"dataGaName":1411,"dataGaLocation":1601},{"text":1413,"config":1792},{"href":1415,"dataGaName":1416,"dataGaLocation":1601},{"text":1476,"config":1794},{"href":1478,"dataGaName":1479,"dataGaLocation":1601},{"text":1796,"config":1797},"Nouveautés",{"href":1424,"dataGaName":1425,"dataGaLocation":1601},{"text":1799,"config":1800},"Toutes les ressources",{"href":1359,"dataGaName":1801,"dataGaLocation":1601},"all resources",{"title":1427,"links":1803},[1804,1806,1808,1810,1812,1814,1816,1818,1820,1825,1830],{"text":1435,"config":1805},{"href":1437,"dataGaName":1429,"dataGaLocation":1601},{"text":1440,"config":1807},{"href":1442,"dataGaName":1443,"dataGaLocation":1601},{"text":1446,"config":1809},{"href":1448,"dataGaName":1449,"dataGaLocation":1601},{"text":1451,"config":1811},{"href":1453,"dataGaName":1454,"dataGaLocation":1601},{"text":1456,"config":1813},{"href":1458,"dataGaName":1459,"dataGaLocation":1601},{"text":1461,"config":1815},{"href":1463,"dataGaName":1464,"dataGaLocation":1601},{"text":1466,"config":1817},{"href":1468,"dataGaName":1469,"dataGaLocation":1601},{"text":1471,"config":1819},{"href":1473,"dataGaName":1474,"dataGaLocation":1601},{"text":1821,"config":1822},"Développement durable",{"href":1823,"dataGaName":1824,"dataGaLocation":1601},"/sustainability/","Sustainability",{"text":1826,"config":1827},"Diversité, inclusion et appartenance (DIB)",{"href":1828,"dataGaName":1829,"dataGaLocation":1601},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1831,"config":1832},"Déclaration de transparence sur l'esclavage moderne",{"href":1833,"dataGaName":1834,"dataGaLocation":1601},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1836},[1837,1839,1841],{"text":1649,"config":1838},{"href":1651,"dataGaName":1652,"dataGaLocation":1601},{"text":1659,"config":1840},{"dataGaName":1661,"dataGaLocation":1601,"id":1662,"isOneTrustButton":246},{"text":1654,"config":1842},{"href":1656,"dataGaName":1657,"dataGaLocation":1601},[1844,1857],{"id":1845,"title":7,"body":1137,"config":1846,"content":1848,"description":1137,"extension":1851,"meta":1852,"navigation":246,"path":1853,"seo":1854,"stem":1855,"__hash__":1856},"blogAuthors/en-us/blog/authors/erick-bajao.yml",{"template":1847},"BlogAuthor",{"name":7,"config":1849},{"headshot":1850},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1785949710/hopuhfq9uc0g2e4vfnsz.png","yml",{},"/en-us/blog/authors/erick-bajao",{},"en-us/blog/authors/erick-bajao","Fn6zEYOUr3cr397JsUCaPhmDvXhsxhKZCy3Dqzpx-SM",{"id":1858,"title":8,"body":1137,"config":1859,"content":1860,"description":1137,"extension":1851,"meta":1864,"navigation":246,"path":1865,"seo":1866,"stem":1867,"__hash__":1868},"blogAuthors/en-us/blog/authors/joe-randazzo.yml",{"template":1847},{"name":8,"config":1861},{"headshot":1862,"ctfId":1863},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664711/Blog/Author%20Headshots/randazzo.jpg","5DxpEbIVcwN2ukwiEMsHlH",{},"/en-us/blog/authors/joe-randazzo",{},"en-us/blog/authors/joe-randazzo","Kg6ZOiBKQgjjlIpsfIAWHsug3iGMaAK1trTdXg4BaFI",[1870,1878,1886],{"title":1871,"description":1872,"heroImage":1873,"category":1133,"date":1874,"authors":1875,"slug":1877,"externalUrl":1137},"Suivez les risques de sécurité de votre organisation depuis un seul tableau de bord","Pour les entreprises comportant plusieurs groupes principaux, GitLab regroupe désormais les vulnérabilités et affiche un score de risque unique pour l'ensemble de votre organisation.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756122536/akivvcnafog9c4dhhzkp.png","2026-10-09",[1876],"Alisa Ho","security-risk-in-one-dashboard",{"title":1879,"description":1880,"heroImage":1881,"category":1133,"date":1882,"authors":1883,"slug":1885,"externalUrl":1137},"GitLab Dependency Firewall : bloquez les paquets à risque avant le build","GitLab Dependency Firewall permet d'exclure automatiquement les paquets malveillants et vulnérables de votre build, afin que vos équipes et leurs agents livrent rapidement avec des dépendances fiables.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1791198675/kmajkudog4fj3xc6qfyb.png","2026-10-06",[1876,1884],"Amit Shalem","transcend-dependency-firewall",{"title":1887,"description":1888,"heroImage":1873,"category":1133,"date":1889,"authors":1890,"slug":1892,"externalUrl":1137},"GitLab Dedicated : une nouvelle ère réglementaire pour la conformité","Maîtrisez votre conformité avec GitLab Dedicated. Isolation, contrôle et préparation aux audits (DORA, SRI 2, RGPD) dans un environnement SaaS monolocataire.","2026-10-01",[1891],"Aathira Nair","gitlab-dedicated-compliance",{"header":1894,"text":1895,"button":1899,"disclaimer":1902},"Commencez votre essai gratuit\n\nde 30 jours\n",[1896,1897,1898],"Accédez à GitLab Duo Agent Platform","Essayez nos fonctionnalités les plus avancées","Automatisez les tâches complexes avec l'IA",{"text":1158,"config":1900},{"href":1901,"dataGaName":1161,"dataGaLocation":1396},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/blog/","Aucune carte de crédit requise.",{"header":1904,"blurb":1905,"button":1906,"secondaryButton":1910},"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":1158,"config":1907},{"href":1908,"dataGaName":1161,"dataGaLocation":1909},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":1488,"config":1911},{"href":1490,"dataGaName":1166,"dataGaLocation":1909},1791952283111]