Problème de rotation de clés EKS avec Vault et External Secrets Operator

Posté par dalexandre le 27/03/2025
RÉSOLU

dalexandre

Membre depuis le 19/05/2019

Salut tout le monde. on utilise Vault pour nos secrets sur EKS et External Secrets Operator pour injecter les secrets dans les pods. la rotation manuelle marche bien mais j'ai un souci avec la rotation automatique des secrets d'applis (type db credentials) qui sont des leased secrets de Vault. quand le secret expire et que Vault le renouvelle ESO ne semble pas le récupérer directement. les pods continuent d'utiliser l'ancien secret jusqu'à un redémarrage manuel ou un re-déploiement. y a moyen de forcer ESO à rafraîchir plus vite sans redémarrer le pod ?

Commentaires

rene02

Membre depuis le 01/03/2023

hello. tu as configuré le champ refreshInterval dans ton ExternalSecret ? par défaut c'est 1h je crois. si tu le mets à une valeur plus basse genre 5m ça devrait forcer ESO à aller chercher la nouvelle version plus souvent.

# exemple de config ExternalSecret
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: my-db-secret
spec:
  refreshInterval: "5m" # ou même "1m" si besoin
  secretStoreRef:
    name: vault-secret-store
    kind: ClusterSecretStore
  target:
    name: my-app-db-secret
    creationPolicy: Owner
  data:
    - secretKey: username
      remoteRef:
        key: database/creds/my-app
        property: username
    - secretKey: password
      remoteRef:
        key: database/creds/my-app
        property: password

dalexandre

Membre depuis le 19/05/2019

ouais j'ai déjà essayé refreshInterval à 1m mais ça ne suffit pas. les pods n'ont toujours pas la nouvelle valeur de password tant que je ne relance pas le déploiement. on dirait que le secret kubernetes est mis à jour mais que le pod ne s'en rend pas compte

hleblanc

Membre depuis le 07/05/2020

c'est normal en fait. quand un Secret Kubernetes est mis à jour les pods qui le montent via un volume ou qui l'utilisent via des variables d'env ne le voient pas instantanément. le kubelet met un certain temps à rafraîchir les volumes (jusqu'à 60s par défaut) et les variables d'env ne sont pas dynamiques

lemoine-denis

Membre depuis le 13/01/2021

la solution propre pour gérer la rotation des secrets d'appli c'est d'utiliser l'annotation kubernetes.io/change-cause ou un hash du secret en tant que label sur le déploiement. ça force un redéploiement des pods quand le secret change. y a des outils comme reloader de stakater qui font ça très bien

dalexandre

Membre depuis le 19/05/2019

ah reloader ! j'en ai déjà entendu parler. donc l'idée c'est de laisser eso mettre à jour le secret k8s et ensuite reloader détecte la modif et force un rollout des déploiements concernés c'est ça ?

rene02

Membre depuis le 01/03/2023

exactement. reloader monitorise les secrets et les configmaps. quand il détecte un changement sur un secret ou une configmap qui est référencé par un déploiement il relance les pods. c'est la façon la plus courante de gérer la rotation de secrets et configmaps sans downtime si ton app est stateless

hleblanc

Membre depuis le 07/05/2020

ouais et pour les apps stateful attention quand même aux rotations de creds DB faut que l'app soit capable de se reconnecter à la DB avec les nouvelles creds sans perdre d'état. sinon faut gérer ça au niveau de l'appli directement ou avec un init container qui fetch les creds

dalexandre

Membre depuis le 19/05/2019

d'acc. nos apps sont majoritairement stateless donc reloader devrait faire le taf. pour les stateful on verra plus tard. je vais l'installer et le tester. ça me semble être une bonne piste. merci à tous pour les infos super utiles !

lemoine-denis

Membre depuis le 13/01/2021

pense aussi à bien configurer les politiques de rotation dans Vault lui-même pour t'assurer que les baux sont correctement gérés et que Vault renouvelle bien les secrets avant l'expiration pour qu'ESO ait toujours un secret frais à récupérer

dalexandre

Membre depuis le 19/05/2019

oui la config Vault est déjà prête pour ça. le problème venait vraiment de la propagation du nouveau secret au pod. je teste reloader demain et je vous dis. thx encore !

dalexandre

Membre depuis le 19/05/2019

Hello la team ! Bon j'ai installé reloader et configuré les annotations sur mes déploiements. Ça marche nickel ! Dès que Vault renouvelle un secret et qu'ESO le met à jour dans Kubernetes, reloader détecte le changement et force un rolling update. Les pods ont les nouvelles creds en quelques minutes. C'est parfait ! Merci beaucoup pour l'aide !

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