Accès Vault pour CI/CD depuis Gitlab Runner pas sécure

Posté par qpascal le 30/09/2025
RÉSOLU

qpascal

Membre depuis le 09/11/2024

salut la team security j'ai un setup vault avec un gitlab runner pour choper des secrets mais je suis pas fan du process. actuellement le runner utilise un token vault root ou presque pour accéder à tout c'est pas fou niveau blast radius. On doit stocker un secret quelque part pour ce token c'est pas top. Comment vous gérez ça de manière plus sécure ?

# .gitlab-ci.yml (simplifié et PAS sécure)
deploy:
  stage: deploy
  script:
    - VAULT_ADDR="http://vault.corp.com"
    - VAULT_TOKEN="$(cat /path/to/vault_root_token)" # <--- HORRIBLE
    - vault kv get secret/my-app/prod
  tags:
    - docker

Commentaires

zoe12

Membre depuis le 23/05/2024

utiliser le token root c'est un no-go absolu. il faut utiliser les mécanismes d'authentification de vault spécifiques aux CI/CD. gitlab en particulier supporte le JWT auth method. ton runner peut s'authentifier directement avec les claims JWT fournis par gitlab

tmartins

Membre depuis le 19/04/2024

exactement. tu configures un role dans vault pour le gitlab-ci et tu définis des policies hyper granulaires dessus. le runner envoie son jwt à vault, vault vérifie la signature avec la clé publique de gitlab (que tu as configurée dans vault) et si les claims correspondent au role, il donne un token temporaire au runner

philippine-leroy

Membre depuis le 01/02/2025

et surtout vérifie bien les claims. tu peux vérifier le projet id, le ref (branch), le tag, etc. ça assure que seul un job spécifique d'un projet spécifique avec une branch spécifique peut demander un secret. blast radius quasi nul pour un job raté

qpascal

Membre depuis le 09/11/2024

ah ok je vois. donc le runner n'a jamais un token permanent stocké en dur. vault vérifie l'identité gitlab via le JWT. c'est beaucoup mieux ! j'avais pas pensé au JWT auth method pour gitlab. vous avez des exemples de config vault pour ça ?

zoe12

Membre depuis le 23/05/2024

oui regarde la doc hashicorp vault gitlab jwt auth. en gros tu actives le backend puis tu crées un role.

vault auth enable jwt
vault write auth/jwt/config jwt_validation_pubkeys=@gitlab_pub_key
vault write auth/jwt/role/my-gitlab-ci \
    bound_claims=project_id=12345,ref_protected=true \
    policies=my-app-prod-policy \
    token_ttl=1h \
    token_max_ttl=1h \
    user_claim="user_email" # ou "sub"

tmartins

Membre depuis le 19/04/2024

dans ton job gitlab ci tu fais :

# ...
script:
  - export VAULT_ADDR="http://vault.corp.com"
  - export CI_JOB_JWT=$(vault write -field=token auth/jwt/login role="my-gitlab-ci" jwt="$CI_JOB_JWT") # vault client fait le taff
  - vault kv get secret/my-app/prod

qpascal

Membre depuis le 09/11/2024

nickel c'est exactement ce qu'il me fallait. je vais mettre ça en place rapido. grand merci pour les infos c'est beaucoup plus robuste comme approche

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire