/ KUBERNETES, CLOUD, SECRETS

Kuberntes - Simplifiez la gestion de vos secrets avec Sealed Secrets ou External Secrets

Bonjour à tous ! Aujourd’hui, j’aimerais vous parler de deux outils puissants qui peuvent grandement simplifier la gestion des secrets dans vos environnements Kubernetes : Sealed Secrets et External Secrets.

🔒 Sealed Secrets (6.3K Github stars)

Sealed Secrets est une solution open-source de Bitnami Labs qui permet de stocker des secrets chiffrés dans un dépôt Git. Contrairement aux secrets classiques, les Sealed Secrets sont encryptés à l’aide d’une clé publique spécifique au cluster Kubernetes. Cela signifie que les secrets peuvent être stockés en toute sécurité dans un dépôt sans risque de divulgation accidentelle.

L’un des avantages majeurs de Sealed Secrets est sa facilité d’utilisation. Vous pouvez simplement créer et gérer les secrets de la même manière que vous le feriez avec les secrets Kubernetes natifs. C’est aussi très intéressant du point de vue GitOps avec des outils tels que ArgoCD qui se basent sur le code poussé sur un dépôt Git.

Ci-dessous un exemple du yaml d’une CRD SealedSecret que le contrôleur va écouter afin générer d’un secret Kubernetes.

apiVersion: bitnami.com/v1alpha
kind: SealedSecret
metadata:
  name: repo-gitops-01
  namespace: argocd
spec:
  encryptedData:
    name: 
    project: AgDRMeh3ZGHWQa0R+Oe6tGBvAZaY2C12nU... # truncated
    sshPrivateKey: AgBThtU2NCQQITLBw+SXqeAlxKoj... # truncated
    type: AgAJxVg34JaVYt0PYq6f5IrJu9gkLk3BeNwIr... # truncated
    url: AgAkaAkhxgqq88i/XS7+afvtbXYihjbOUjVYes... # truncated
  template:
    metadata:
      annotations:
        managed-by: argocd.argoproj.io
      creationTimestamp: null
      labels:
        argocd.argoproj.io/secret-type: repository
      name: repo-gitops-01
      namespace: argocd
    type: Opaque

Pour créer les secrets, Sealed Secrets fourni l’utilitaire en ligne de commande kubeseal pour chiffrer les secret via un clé publique stockée sur le cluster. Se pose la question du “Disaster Recovery” mais à priori la sauvegarde la restauration des clés de chiffrement se fait assez facilement.

En bref Sealed Secrets c’est:

  • Open source: https://github.com/bitnami-labs/sealed-secrets
  • Se base sur un opérateur / CRDs installé sur le cluster pour générer les secrets Kube
  • Gère le chiffrements via clé publiques / privée stockées de manière sécurisée dans le cluster.
  • Fourni un utilitaires en ligne de commande pour réaliser le chiffrement des secrets avant de les pousser sur vos dépôts Git.
  • Intégration au flux de travail CI/CD : Le déploiement des secrets Sealed Secrets peut être intégré à votre flux de travail CI/CD.

🔑 External Secrets (2.9K Github stars)

External Secrets, quant à lui, est une autre solution open-source intéressante pour la gestion des secrets dans Kubernetes. Il permet de récupérer les secrets depuis des systèmes externes tels que AWS Secrets Manager, HashiCorp Vault, ou encore Azure Key Vault. Plutôt que de stocker les secrets directement dans le cluster Kubernetes, External Secrets les récupère dynamiquement à partir des systèmes externes.

External Secrets offre une grande flexibilité dans le choix de vos systèmes de gestion de secrets. Vous pouvez continuer à utiliser vos outils préférés pour stocker et gérer les secrets, tout en les exposant de manière sécurisée à vos applications Kubernetes. Cela simplifie considérablement la gestion des secrets à grande échelle et facilite l’intégration avec vos processus de développement et de déploiement existants.

La création de secrets sur Kubernetes avec External Secret repose aussi sur des CRD

  • SecretStore pour faire le lien avec un fouisseur externe de secrets (ci-dessous un exemple avec AWS Secret Manager)
apiVersion: external-secrets.io/v1beta
kind: SecretStore
metadata:
  name: secretstore-sample
spec:
  provider:
    aws:
      service: SecretsManager
      region: us-east-1
      auth:
        secretRef:
          accessKeyIDSecretRef:
            name: awssm-secret
            key: access-key
          secretAccessKeySecretRef:
            name: awssm-secret
            key: secret-access-key1
  • ExternalSecret La définition du secret à créée qui sera hydraté à partir d’une source externe (secretStoreRef)
apiVersion: external-secrets.io/v1beta
kind: ExternalSecret
metadata:
  name: example
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: secretstore-sample
    kind: SecretStore
  target:
    name: secret-to-be-created
    creationPolicy: Owner
  data:
  - secretKey: secret-key-to-be-managed
    remoteRef:
      key: provider-key
      version: provider-key-version
      property: provider-key-property
  dataFrom:
  - extract:
      key: remote-key-in-the-provider1

En bref Sealed Secrets c’est:

  • Open source: https://github.com/external-secrets/external-secrets
  • Se base sur un opérateur / CRDs installé sur le cluster pour générer les secrets Kube
  • Permet d’intégrer des secrets provenant de sources externes, telles que des services de gestion des secrets comme AWS Secrets Manager, HashiCorp Vault …
  • Les secrets externes sont déclarés dans Kubernetes à l’aide de fichiers YAML
  • Offre une approche centralisée pour la gestion des secrets. Vous pouvez définir des politiques de gestion des accès aux sources externes, configurer des rotations automatiques des secrets et bénéficier d’une visibilité centralisée sur l’état des secrets.

Conclusion

En résumé, Sealed Secrets et External Secrets sont deux outils puissants qui simplifient la gestion des secrets dans les environnements Kubernetes. Que vous choisissiez de stocker vos secrets directement dans un référentiel chiffré avec Sealed Secrets ou d’utiliser External Secrets pour récupérer les secrets depuis des systèmes externes, ces outils vous permettront de garder vos secrets en sécurité tout en facilitant leur utilisation par vos applications.

Vous pouvez les tester assez rapidement, ça s’installe en 2 lignes (en environnement des test bien sûr 😋)

Sealed Secrets

helm repo add bitnami-labs https://bitnami-labs.github.io/sealed-secrets
helm install my-sealed-secrets bitnami-labs/sealed-secrets --version 2.10.0

External Secrets

helm repo add external-secrets https://charts.external-secrets.io
helm install external-secrets external-secrets/external-secrets

Il existe évidement d’autres solutions pour gérer vos secrets, sur Kubernetes ce billet est un focus sur deux solutions assez populaires. Sealed Secrets a l’avantage de vous rendre indépendant d’une source externe mais attention quand même au cycle de vie des secrets qui me semble plus facile à partir d’un gestionnaire externe et donc avec External Secrets.

N’hésitez pas à me contacter si vous avez des questions ou si vous souhaitez en savoir plus sur ces outils passionnants !