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

qpascal 30/09/2025
RÉSOLU
qpascal
Auteur
Avatar de qpascal
qpascal
Auteur

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
30/09/2025 à 13:11

7 commentaires

zoe12
Membre Actif Rédacteur
Avatar de zoe12
zoe12
Membre Actif Rédacteur

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

01/10/2025 à 09:07
tmartins
Membre Actif
Avatar de tmartins
tmartins
Membre Actif

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

02/10/2025 à 07:52
philippine-leroy
Membre Actif
Avatar de philippine-leroy
philippine-leroy
Membre Actif

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é

03/10/2025 à 02:05
qpascal
Auteur
Avatar de qpascal
qpascal
Auteur

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 ?

03/10/2025 à 22:45
zoe12
Membre Actif Rédacteur
Avatar de zoe12
zoe12
Membre Actif Rédacteur

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"

04/10/2025 à 22:38
tmartins
Membre Actif
Avatar de tmartins
tmartins
Membre Actif

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

05/10/2025 à 22:26
qpascal
Auteur
Avatar de qpascal
qpascal
Auteur

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

06/10/2025 à 18:55

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