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é
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 ?
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
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
Vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
qpascal
Membre depuis le 29/03/2019actif
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 ?