Comment utiliser Kubernetes External Secrets Operator avec Secret Manager

Base de connaissances

Comment utiliser Kubernetes External Secrets Operator avec Secret Manager


Icons/System/eye-open Created with Sketch. 15 vues 15.01.2026 Secret Manager

Objectif

Ce guide explique comment configurer l'External Secret Operator Kubernetes pour utiliser le Secret Manager d'OVHcloud en tant que fournisseur.

Prérequis

En pratique

Configuration du Secret Manager

Pour permettre l'accès au Secret Manager, vous aurez besoin d'un token, de la region et de l'okms-id de votre Secret Manager.

Création des identifiants

Créez un utilisateur local IAM avec les droits d'accès à votre domaine.

L'utilisateur doit appartenir à un groupe avec le rôle ADMIN, ou si vous utilisez des politiques IAM, il doit avoir au moins les droits suivants sur le domaine OKMS :

  • okms:apikms:secret/create
  • okms:apikms:secret/version/getData
  • okms:apiovh:secret/get

Il est aussi possible de créer un utilisateur avec l'OVHcloud CLI :

ovhcloud iam user create --login "secretmanager-b1033fdd-xxxx-xxxx-xxxx-xxxxxxxxx" --group ADMIN --description "A user create for Secret Manager, linked to xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx" --password "secretmanager-xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx" --email "secretmanager-xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx@ovhcloud.com"

Puis créez un token d'accès personnel (Personal Access Token ou PAT) user_pat :

Utilisez l'appel API suivant :

Avec la charge utile suivante (remplissez-la avec vos valeurs) :

{
  "description": "PAT secret manager for domain xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "name": "pat-secretmanager-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
}

L'API répondra avec :

{
  "creation": "2025-11-13T10:38:44.658926311Z",
  "description": "PAT secret manager for domain xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "expiresAt": null,
  "lastUsed": null,
  "name": "pat-secretmanager-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "token": "eyJhbGciOiJ...punpVAg"
}

Le PAT peut être créé avec l'OVHcloud CLI et la commande suivante (complétez-la avec vos valeurs) :

ovhcloud iam user token create {user} --name pat-secretmanager-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx --description "PAT secret manager for domain xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"

La CLI répondra avec la valeur du token :

✅ Token Secret-Manager created successfully, Value: eyJhbGciOiJ...punpVAg

En alternative, il est suggéré de sauvegarder directement le PAT dans une variable d'environnement :

PAT_TOKEN=$(ovhcloud iam user token create {user} --name pat-secretmanager-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx --description "PAT secret manager for domain secretmanager-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx" -j  | jq .details.token |  tr -d '"') ; echo $PAT_TOKEN

Conservez la valeur du champ token car elle ne sera plus affichée et sera utilisée pour s'authentifier sur le Secret Manager en tant que user_pat.

Informations du Secret Manager

Vous aurez également besoin de la region et de l'okms-id du domaine OKMS que vous souhaitez utiliser. Cet ID et cette région peuvent être trouvés sur l'espace client OVHcloud ou via l'OVHcloud CLI :

$ ovhcloud okms list
┌──────────────────────────────────────┬─────────────┐
│ id                                   │ region      │
├──────────────────────────────────────┼─────────────┤
│ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │ eu-west-par │
│ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │ eu-west-par │
└──────────────────────────────────────┴─────────────┘

Configuration du Secret Provider dans Kubernetes

Installation de l'External Secret Operator (ESO) sur votre cluster Kubernetes

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

helm install external-secrets \
   external-secrets/external-secrets \
    -n external-secrets \
    --create-namespace \
    --set installCRDs=true

Vérifiez que l'ESO est en cours d'exécution :

$  kubectl get all -n external-secrets
NAME                                                    READY   STATUS    RESTARTS   AGE
pod/external-secrets-8cbc56569-9875p                    1/1     Running   0          12s
pod/external-secrets-cert-controller-565fcd479b-xbkcp   0/1     Running   0          12s
pod/external-secrets-webhook-7fb59d4b88-9tkl6           0/1     Running   0          12s

NAME                               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/external-secrets-webhook   ClusterIP   10.3.43.102   <none>        443/TCP   13s

NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/external-secrets                   1/1     1            1           13s
deployment.apps/external-secrets-cert-controller   0/1     1            0           13s
deployment.apps/external-secrets-webhook           0/1     1            0           13s

NAME                                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/external-secrets-8cbc56569                    1         1         1       13s
replicaset.apps/external-secrets-cert-controller-565fcd479b   1         1         0       13s
replicaset.apps/external-secrets-webhook-7fb59d4b88           1         1         0       13s

Création d'un secret contenant le PAT

Commencez par encoder votre user_pat en base 64 afin de pouvoir le stocker dans un secret Kubernetes.

$ echo -n "<token>" | base64
ZXlKaG...wVkFn

Ou si le user_pat est stocké dans une variable d'environnement :

PAT_TOKEN_B64=$(echo -n $PAT_TOKEN | base64) ; echo $PAT_TOKEN_B64

Puis créez un fichier secret.yaml :

 apiVersion: v1
kind: Secret
metadata:
  name: ovhcloud-vault-token
  namespace: external-secrets
data:
  token: ZXlKaG...wVkFn

Et appliquez la ressource au cluster avec la commande kubectl apply -f secret.yaml.

Ou si on utilise une variable d'environnement :

kubectl create secret generic ovhcloud-vault-token -n external-secrets --from-literal=token=$PAT_TOKEN_B64

Le secret devrait avoir été créé :

$ kubectl get secret ovhcloud-vault-token -n external-secrets
NAME                   TYPE     DATA   AGE
ovhcloud-vault-token   Opaque   1      5m

Configuration de l'External Secret Operator

Tout d'abord, configurez un ClusterSecretStore qui est chargé de la synchronisation avec le Secret Manager. Nous configurons le SecretStore en utilisant HashiCorp Vault avec l'authentification par token et l'endpoint OKMS en tant que backend.

Ajoutez le user_pat en tant que secret pour pouvoir l'utiliser dans les chartes.

Pour définir une nouvelle ressource ClusterSecretStore, créez un fichier clustersecretstore.yaml avec le contenu suivant :

apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
  name: vault-secret-store
spec:
  provider:
      vault:
        server: "https://<region>.okms.ovh.net/api/<okms_id>" # endpoint OKMS, remplissez avec la région correcte et votre okms_id 
        path: "secret"
        version: "v2" 
        auth:
            tokenSecretRef:
              name: ovhcloud-vault-token # le secret k8s contenant votre PAT
              key: token
              namespace: external-secrets

Seule l'authentification par token est prise en charge.

Cette intégration fonctionne également avec un ClusterSecretStore.

Le nom de la région peut être traduit à partir de votre emplacement régional en utilisant :

Par exemple, pour Europe (France - Paris), l'endpoint OKMS est eu-west-par.okms.ovh.net.

Déployez la ressource dans votre cluster :

kubectl apply -f secretstore.yaml

Utilisation de l'External Secret Operator

Une fois le ClusterSecretStore configuré, vous pouvez définir des ExternalSecret provenant du gestionnaire de secrets. Créez un fichier externalsecret.yaml avec le contenu suivant :

apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: docker-config-secret
  namespace: external-secrets
spec:
  refreshInterval: 30m
  secretStoreRef:
    name: vault-secret-store
    kind: ClusterSecretStore
  target:
    template:
      type: kubernetes.io/dockerconfigjson
      data:
        .dockerconfigjson: "{{ .mysecret | toString }}"
    name: ovhregistrycred
    creationPolicy: Owner
  data:
  - secretKey: mysecret
    remoteRef:
      key: prod/va1/dockerconfigjson

Appliquez la ressource dans votre cluster :

kubectl apply -f externalsecret.yaml

Cela créera un objet de secret Kubernetes.

$ kubectl get secret -n external-secrets
NAME                                     TYPE                             DATA   AGE
...
ovhregistrycred                          kubernetes.io/dockerconfigjson   1      15m
...

Pour plus d'informations sur la gestion de l'External Secret Operator, veuillez consulter la documentation dédiée, en utilisant le fournisseur HashiCorp Vault : https://external-secrets.io/latest/.

Aller plus loin

Rejoignez notre communauté d'utilisateurs.

Articles associés