7 commentaires
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
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
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é
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"
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
Laisser une réponse
Vous devez être connecté pour poster un message !
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 ?