Kubernetes External Secrets : test rapide

Photo of author
par KrustyHack
publié le
mis à jour le

Je viens de tomber sur une petit pépite pour la gestion des secrets Kubernetes. Actuellement je gère mes secrets de la pire des manières qu’il soit : je créer mes secrets avec kubectl create secret.

Warning
Ce contenu date un peu, il est possible que les éléments présentés aient changés depuis.

C’est sympa 2 secondes mais pour rendre ça plus pratique ça serait cool de pouvoir récupérer des secrets de l’extérieur du cluster, par exemple d’un magasin de secrets comme AWS Secrets Manager (que j’utilise) ou HashiCorp Vault.

J’ai alors découvert (tardivement je vous l’accorde) Kubernetes External Secrets de l’équipe GoDaddy. Exactement ce qu’il me fallait !

Le principe est simple : un controller de secret écoute dans le cluster les demandes de secrets, va les récupérer sur les sources externes (AWS Secrets Manager ou Vault par exemple) et créer pour vous les objets Kubernetes secrets.

Kubernetes External Secrets Architecture
  1. Un objet (via une CRD) externalsecrets est ajouté dans le cluster
  2. Le controller récupère cet externalsecrets via l’API Kubernetes
  3. Le controller utilise l’objet externalsecrets pour récupérer les données du secret depuis l’extérieur
  4. Le controller ajoute un objet secret avec les données récupérées
  5. Les pods peuvent accéder à ce secret

Exemple d’utilisation

Warning
Comme l’a souligné un commentaire sur mon post LinkedIn (merci !), ce Secret Manager ne sécurise pas plus vos secrets sur Kubernetes ! Il ne fait que « passe plat » entre votre store externe de secrets et votre cluster Kubernetes. Les secrets qui sont créés sont des secrets « classiques » Kubernetes, donc base64. L’auteur du commentaire suggère d’utiliser une méthode qui consiste à injecter directement les secrets dans les pods, sans passer par un objet secret. J’avais vu passer un article là-dessus, je vais essayer de le retrouver pour en faire un article.

J’ai fait une petite vidéo rapide pour vous montrer en live l’utilisation. J’ai pas fait un gros truc mais c’était histoire de montrer en réel. Les commandes utilisées pour cette vidéo sont juste ci-dessous et la vidéo est en haut de cet article.

À LIRE  CI/CD Series : Installer Jenkins X sur Kubernetes

On installe la chart Helm :

helm repo add external-secrets https://godaddy.github.io/kubernetes-external-secrets/
helm install external-secrets/kubernetes-external-secrets

On créer nos 2 secrets sur le Secrets Manager d’AWS, un secret de type texte et un autre de type texte sécurisé :

aws ssm put-parameter --name "/scw-bcn-production-1/hello" --type "String" --value "Hello World"
aws ssm put-parameter --name "/scw-bcn-production-1/hello-secure" --type "SecureString" --value "Hello World Secure"

On créé ensuite nos 2 externalsecrets :

apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
  name: hello-world
spec:
  backendType: systemManager
  data:
    - key: /scw-bcn-production-1/hello
      name: password
---
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
  name: hello-world-secure
spec:
  backendType: systemManager
  data:
    - key: /scw-bcn-production-1/hello-secure
      name: password

Et si vous avez bien installé votre controller, 2 secrets Kubernetes devrait poper dans le namespace actuel, comme ici avec hello-world et hello-world-secure :

kubectl get secrets

NAME                                                       TYPE                                  DATA   AGE
aws-credentials                                            Opaque                                2      6d22h
default-token-bftq4                                        kubernetes.io/service-account-token   3      6d22h
external-secrets-kubernetes-external-secrets-token-pwhc9   kubernetes.io/service-account-token   3      4h18m
hello-world                                                Opaque                                1      16m
hello-world-secure                                         Opaque                                1      16m
sh.helm.release.v1.external-secrets.v1                     helm.sh/release.v1                    1      4h18m

Les secrets sont maintenant utilisables par vos pods.

En tout cas je vous invite à aller voir le repo GitHub pour tester, je trouve ça vraiment classe et ça peut simplifier pas mal de chose dans la gestion de secrets.

Je ferais peut-être d’autres vidéos ou articles sur l’installation de tout ça.

À LIRE  ETCD : découverte et premiers pas

Bon week-end !

Laisser un commentaire