Utiliser le module complémentaire Secret Manager avec Google Kubernetes Engine

L'intégration entre Secret Manager et Google Kubernetes Engine (GKE) vous permet de stocker des données sensibles telles que les mots de passe et les certificats utilisés par les clusters GKE en tant que secrets dans Secret Manager.

Cette page explique comment utiliser le module complémentaire Secret Manager pour accéder aux secrets stockés dans Secret Manager en tant que volumes installés dans des pods Kubernetes.

Ce processus comprend les étapes suivantes :

  1. Activez le module complémentaire Secret Manager sur un cluster GKE nouveau ou existant.
  2. Configurez les applications pour qu'elles s'authentifient auprès de l'API Secret Manager.
  3. Définissez les secrets à monter sur les pods Kubernetes à l'aide d'un fichier YAML SecretProviderClass. Le module complémentaire Secret Manager est compatible avec les secrets globaux et régionaux.
  4. Créez un volume dans lequel les secrets seront installés. Une fois le volume associé, les applications du conteneur peuvent accéder aux données dans le système de fichiers du conteneur.

Le module complémentaire Secret Manager est dérivé du pilote CSI Kubernetes Secret Store Open Source et du fournisseur Google Secret Manager. Si vous utilisez le pilote CSI Secrets Store Open Source pour accéder aux secrets, vous pouvez migrer vers le module complémentaire Secret Manager. Pour en savoir plus, consultez Migrer depuis le pilote CSI Secrets Store existant.

Avantages

Le module complémentaire Secret Manager offre les avantages suivants :

  • Vous pouvez utiliser une solution entièrement gérée et compatible pour accéder aux secrets Secret Manager depuis GKE, sans frais généraux opérationnels.
  • Vous n'avez pas besoin d'écrire de code personnalisé pour accéder aux secrets stockés dans Secret Manager.
  • Vous pouvez stocker et gérer tous vos secrets de manière centralisée dans Secret Manager, et y accéder de manière sélective à partir des pods GKE à l'aide du module complémentaire Secret Manager. Vous pouvez ainsi utiliser les fonctionnalités proposées par Secret Manager, telles que le chiffrement CMEK, le contrôle des accès précis, la rotation gérée, la gestion du cycle de vie et les journaux d'audit, ainsi que les fonctionnalités Kubernetes, telles que la transmission de secrets aux conteneurs sous forme de volumes montés.
  • Le module complémentaire Secret Manager est compatible avec les clusters Standard et Autopilot.
  • Le module complémentaire Secret Manager est compatible avec les nœuds qui utilisent des images de nœuds Container-Optimized OS ou Ubuntu.

Limites

Le module complémentaire Secret Manager présente les limites suivantes :

  • Le module complémentaire Secret Manager n'est pas compatible avec la fonctionnalité Synchroniser en tant que secret Kubernetes, qui est disponible dans le pilote CSI Secrets Store Open Source. Si vous souhaitez synchroniser les secrets stockés dans Secret Manager avec les secrets Kubernetes, utilisez la fonctionnalité de synchronisation des secrets intégrée à Secret Manager. Pour en savoir plus, consultez Synchroniser les secrets avec les secrets Kubernetes.

  • Le module complémentaire Secret Manager n'est pas compatible avec les nœuds Windows Server.

Avant de commencer

  • Activez les API Secret Manager et Google Kubernetes Engine.

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    Activer les API

  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande gcloud components update.

    Vous ne pouvez pas configurer manuellement le module complémentaire Secret Manager à l'aide de Google Cloud SDK ni de la console Google Cloud .

  • Assurez-vous que votre cluster exécute GKE version 1.27.14-gke.1042001 ou ultérieure avec une image de nœud Linux.

  • Si vous utilisez un cluster GKE Standard, assurez-vous que la fédération d'identité de charge de travail pour GKE est activée sur votre cluster. La fédération d'identité de charge de travail pour GKE est activée par défaut sur un cluster Autopilot. Les pods Kubernetes utilisent Workload Identity Federation for GKE pour s'authentifier auprès de l'API Secret Manager.

Activer le module complémentaire Secret Manager

Vous pouvez activer le module complémentaire Secret Manager sur les clusters Standard et Autopilot.

Activer le module complémentaire Secret Manager sur un nouveau cluster GKE

Pour activer le module complémentaire Secret Manager lors de la création du cluster, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Google Kubernetes Engine.

    Accéder à Google Kubernetes Engine

  2. Cliquez sur  Créer.

  3. Dans la boîte de dialogue Créer un cluster, cliquez sur Configurer.

  4. Dans le menu de navigation, dans la section Cluster, cliquez sur Sécurité.

  5. Cochez la case Activer Secret Manager.

  6. Cochez la case Activer Workload Identity.

  7. Poursuivez la configuration du cluster, puis cliquez sur Créer.

gcloud

{ Standard cluster}

Pour activer le module complémentaire Secret Manager sur un nouveau cluster standard, exécutez la commande suivante :

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : région Compute Engine du cluster, telle que us-central1.
  • VERSION : version spécifique de GKE que vous souhaitez utiliser. Assurez-vous que votre cluster exécute GKE version 1.27.14-gke.1042001 ou ultérieure. Si le canal de publication par défaut n'inclut pas cette version, utilisez l'indicateur --release-channel pour choisir un version disponible qui l'inclut.
  • PROJECT_ID : ID de votre projet Google Cloud .

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog

Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog

Windows (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog

{ Cluster Autopilot}

Pour activer le module complémentaire Secret Manager sur un nouveau cluster Autopilot, exécutez la commande suivante :

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-secret-manager \
    --cluster-version=VERSION \
    --location=LOCATION

Windows (PowerShell)

gcloud container clusters create-auto CLUSTER_NAME `
    --enable-secret-manager `
    --cluster-version=VERSION `
    --location=LOCATION

Windows (cmd.exe)

gcloud container clusters create-auto CLUSTER_NAME ^
    --enable-secret-manager ^
    --cluster-version=VERSION ^
    --location=LOCATION

Après avoir activé le module complémentaire Secret Manager, vous pouvez utiliser le pilote CSI Secrets Store dans les volumes Kubernetes à l'aide du nom du pilote et de l'approvisionneur : secrets-store-gke.csi.k8s.io.

Activer le module complémentaire Secret Manager sur un cluster GKE existant

Pour activer le module complémentaire Secret Manager sur un cluster existant, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Google Kubernetes Engine.

    Accéder à Google Kubernetes Engine

  2. Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.

  3. Dans la section Sécurité de la page d'informations du cluster, cliquez sur Secret Manager.

  4. Dans la boîte de dialogue Modifier Secret Manager, cochez la case Activer Secret Manager.

  5. Cliquez sur Enregistrer les modifications.

gcloud

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : région Compute Engine du cluster, par exemple us-central1

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^

Vérifier l'installation du module complémentaire Secret Manager

Pour vérifier que le module complémentaire Secret Manager est installé sur le cluster Kubernetes, exécutez la commande suivante :

  gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 4

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement de votre cluster, par exemple us-central1.

Configurer la rotation automatique des secrets

Vous pouvez configurer le module complémentaire Secret Manager pour qu'il fasse automatiquement tourner les secrets. Ainsi, les secrets mis à jour dans Secret Manager après le déploiement initial du pod sont automatiquement et régulièrement envoyés au pod. La rotation automatique des secrets montés permet aux applications de recevoir automatiquement les secrets mis à jour sans nécessiter de redémarrage ni d'intervention manuelle. Cette fonctionnalité permet de s'assurer que les applications utilisent toujours les secrets les plus récents.

Notez les points suivants concernant la configuration de la rotation automatique des secrets :

  • La rotation automatique des secrets est une configuration facultative.
  • Vous pouvez configurer cette fonctionnalité lorsque vous créez un cluster ou que vous mettez à jour un cluster existant.
  • Vous pouvez configurer la fréquence de rotation automatique en spécifiant l'intervalle de rotation et l'unité d'intervalle de rotation.
  • La rotation automatique des secrets est compatible avec GKE version 1.32.2-gke.1059000 ou ultérieure.

Pour configurer la rotation automatique des secrets, vous devez activer la fonctionnalité enable-secret-manager-rotation et configurer l'intervalle de rotation en définissant secret-manager-rotation-interval.

Configurer la rotation automatique des secrets sur un nouveau cluster GKE

Pour configurer la rotation automatique des secrets lors de la création du cluster, procédez comme suit :

Console

{ Cluster Autopilot}

  1. Dans la console Google Cloud , accédez à la page Créer un cluster Autopilot.

    Accéder à la page "Créer un cluster Autopilot"

  2. Dans le menu de navigation, dans la section Paramètres avancés, cliquez sur Sécurité.

  3. Cochez la case Activer Secret Manager.

  4. Cochez la case Configurer la rotation automatique.

  5. Spécifiez l'intervalle de rotation et l'unité d'intervalle de rotation.

  6. Poursuivez la configuration du cluster, puis cliquez sur Créer.

{ Standard cluster}

  1. Dans la console Google Cloud , accédez à la page Créer un cluster Kubernetes.

    Accéder à la page "Créer un cluster Kubernetes"

  2. Dans le menu de navigation, dans la section Cluster, cliquez sur Sécurité.

  3. Cochez la case Activer Secret Manager.

  4. Cochez la case Configurer la rotation automatique.

  5. Spécifiez l'intervalle de rotation et l'unité d'intervalle de rotation.

  6. Poursuivez la configuration du cluster, puis cliquez sur Créer.

gcloud

{ Cluster Autopilot}

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • VERSION : version spécifique de GKE que vous souhaitez utiliser. Assurez-vous que votre cluster exécute GKE version 1.27.14-gke.1042001 ou ultérieure. Si le canal de publication par défaut n'inclut pas cette version, utilisez l'indicateur --release-channel pour choisir un version disponible qui l'inclut.
  • LOCATION : emplacement de votre cluster, par exemple us-central1
  • ROTATION_INTERVAL : intervalle de rotation en secondes. La valeur doit être un entier positif suivi du suffixe s. La valeur minimale autorisée est de 120s. Par exemple, pour définir l'intervalle sur cinq minutes, utilisez 300s.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --cluster-version=VERSION \
    --location=LOCATION \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --cluster-version=VERSION `
    --location=LOCATION `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --cluster-version=VERSION ^
    --location=LOCATION ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

{ Standard cluster}

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement de votre cluster, par exemple us-central1
  • VERSION : version spécifique de GKE que vous souhaitez utiliser. Assurez-vous que votre cluster exécute GKE version 1.27.14-gke.1042001 ou ultérieure. Si le canal de publication par défaut n'inclut pas cette version, utilisez l'indicateur --release-channel pour choisir un version disponible qui l'inclut.
  • PROJECT_ID : ID de votre projet Google Cloud
  • ROTATION_INTERVAL : intervalle de rotation en secondes. La valeur doit être un entier positif suivi du suffixe s. La valeur minimale autorisée est de 120s. Par exemple, pour définir l'intervalle sur cinq minutes, utilisez 300s.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Configurer la rotation automatique des secrets sur un cluster GKE existant

Pour configurer la rotation automatique des secrets sur un cluster GKE existant, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Clusters Kubernetes.

    Accéder à la page "Clusters Kubernetes"

  2. Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.

  3. Sur la page d'informations du cluster, cliquez sur Modifier.

  4. Dans la section Sécurité, cliquez sur Secret Manager.

  5. Dans la boîte de dialogue Modifier Secret Manager, cochez la case Activer Secret Manager.

  6. Cochez la case Configurer la rotation automatique.

  7. Spécifiez l'intervalle de rotation et l'unité d'intervalle de rotation.

  8. Cliquez sur Enregistrer les modifications.

gcloud

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement de votre cluster, par exemple us-central1.
  • ROTATION_INTERVAL : intervalle de rotation en secondes. La valeur doit être un entier positif suivi du suffixe s. La valeur minimale autorisée est de 120s. Par exemple, pour définir l'intervalle sur cinq minutes, utilisez 300s.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL

Configurer les applications pour qu'elles s'authentifient auprès de l'API Secret Manager

Le fournisseur Google Secret Manager utilise l'identité de charge de travail du pod sur lequel un secret est monté lors de l'authentification auprès de l'API Secret Manager. Pour permettre à vos applications de s'authentifier auprès de l'API Secret Manager à l'aide de Workload Identity Federation for GKE, procédez comme suit :

  • Créez un ServiceAccount Kubernetes ou utilisez un ServiceAccount Kubernetes existant dans le même espace de noms que le pod sur lequel vous souhaitez installer le secret.

  • Créez une stratégie d'autorisation Identity and Access Management (IAM) pour le secret dans Secret Manager.

Les pods qui utilisent le compte de service Kubernetes configuré s'authentifient automatiquement en tant qu'identifiant principal IAM correspondant au compte de service Kubernetes lorsqu'ils accèdent à l'API Secret Manager.

Créer un compte de service Kubernetes

  1. Enregistrez le manifeste suivant sous le nom service-account.yaml :

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: KSA_NAME
      namespace: NAMESPACE
    

    Remplacez les éléments suivants :

    • KSA_NAME : nom de votre nouveau compte de service Kubernetes
    • NAMESPACE : nom de l'espace de noms Kubernetes du compte de service.
  2. Appliquez le fichier manifeste :

    kubectl apply -f service-account.yaml
    
  3. Créez une stratégie d'autorisation IAM qui fait référence au nouveau compte de service Kubernetes et accordez-lui l'autorisation d'accéder au secret :

    gcloud secrets add-iam-policy-binding SECRET_NAME \
        --role=roles/secretmanager.secretAccessor \
        --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
    

    Remplacez les éléments suivants :

    • SECRET_NAME : nom du secret dans Secret Manager.
    • PROJECT_NUMBER : numéro numérique de votre projet Google Cloud
    • PROJECT_ID : ID du projet Google Cloud contenant votre cluster GKE
    • NAMESPACE : nom de l'espace de noms Kubernetes du compte de service.
    • KSA_NAME : nom de votre compte de service Kubernetes existant

Utiliser un compte de service Kubernetes existant

Créez une stratégie d'autorisation IAM qui fait référence au compte de service Kubernetes existant et accordez-lui l'autorisation d'accéder au secret :

gcloud secrets add-iam-policy-binding SECRET_NAME \
    --role=roles/secretmanager.secretAccessor \
    --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME

Remplacez les éléments suivants :

  • SECRET_NAME : nom du secret dans Secret Manager.
  • PROJECT_NUMBER : numéro numérique de votre projet Google Cloud
  • PROJECT_ID : ID du projet Google Cloud contenant votre cluster GKE
  • NAMESPACE : nom de l'espace de noms Kubernetes du compte de service.
  • KSA_NAME : nom de votre compte de service Kubernetes existant

Définir les secrets à installer

Pour spécifier les secrets à installer en tant que fichiers dans le pod Kubernetes, créez un fichier manifeste YAML SecretProviderClass et listez les secrets à installer ainsi que le nom de fichier sous lequel les installer. Procédez comme suit :

  1. Enregistrez le manifeste suivant sous le nom app-secrets.yaml :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: SECRET_PROVIDER_CLASS_NAME
    spec:
      provider: gke
      parameters:
        secrets: |
          - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION"
            path: "FILENAME.txt"
    

    Remplacez les éléments suivants :

    • SECRET_PROVIDER_CLASS_NAME : nom de votre objet SecretProviderClass.
    • PROJECT_ID : ID de votre projet.
    • SECRET_NAME : nom du secret.
    • SECRET_VERSION : version du secret. La version du secret doit se trouver dans la même région que le cluster.
    • FILENAME.txt : nom du fichier dans lequel la valeur du secret sera installée. Vous pouvez créer plusieurs fichiers à l'aide des variables resourceName et path.

    Pour un secret régional, resourceName correspond au chemin d'accès complet à la ressource secrète, y compris l'emplacement du secret régional. Par exemple, "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"

  2. Appliquez le fichier manifeste :

    kubectl apply -f app-secrets.yaml -n NAMESPACE
    

    Remplacez NAMESPACE par le nom de l'espace de noms Kubernetes pour le compte de service.

  3. Vérifiez que l'objet SecretProviderClass est créé :

    kubectl get SecretProviderClasses -n NAMESPACE
    

Configurer un volume dans lequel les secrets seront installés

  1. Enregistrez la configuration suivante sous my-pod.yaml :

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
      namespace: NAMESPACE
    spec:
      serviceAccountName: KSA_NAME
      containers:
      - image: IMAGE_NAME
        imagePullPolicy: IfNotPresent
        name: POD_NAME
        resources:
          requests:
            cpu: 100m
        stdin: true
        stdinOnce: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        tty: true
        volumeMounts:
          - mountPath: "/var/secrets"
            name: mysecret
      volumes:
      - name: mysecret
        csi:
          driver: secrets-store-gke.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: SECRET_PROVIDER_CLASS_NAME
    

    Remplacez les éléments suivants :

  2. Dans les clusters standards uniquement, ajoutez les éléments suivants au champ template.spec pour placer les pods sur des pools de nœuds qui utilisent la fédération d'identité de charge de travail pour GKE.

    Ignorez cette étape dans les clusters Autopilot, qui rejettent ce nodeSelector, car chaque nœud utilise la fédération d'identité de charge de travail pour GKE.

    spec:
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    
  3. Appliquez la configuration à votre cluster.

    kubectl apply -f my-pod.yaml
    

Cette étape permet de monter un volume mysecret à /var/secrets à l'aide du pilote CSI (secrets-store-gke.csi.k8s.io). Ce volume fait référence à l'objet SecretProviderClass qui sert de fournisseur.

Migrer depuis le pilote CSI Kubernetes Secrets Store Open Source existant

Si vous utilisez le pilote CSI Kubernetes Secret Store Open Source et le fournisseur Google Secret Manager, vous pouvez migrer vos charges de travail vers le module complémentaire Secret Manager géré.

Le module complémentaire géré et le pilote Open Source peuvent s'exécuter simultanément sur le même cluster. Cette fonctionnalité vous permet de migrer progressivement des applications et des espaces de noms individuels sans temps d'arrêt du cluster.

Pour migrer vers le module complémentaire Secret Manager, procédez comme suit :

  1. Activez le module complémentaire Secret Manager sur votre cluster.
  2. Créer des fichiers manifestes SecretProviderClass
  3. Mettre à jour les manifestes de charge de travail
  4. Vérifier la migration
  5. Nettoyer les anciennes ressources Open Source

Étape 1 : Activez le module complémentaire Secret Manager sur votre cluster

Activez le module complémentaire Secret Manager sur votre cluster GKE existant :

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --enable-secret-manager \
    [--enable-secret-manager-rotation \
     --secret-manager-rotation-interval=ROTATION_INTERVAL]

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement de votre cluster, par exemple us-central1
  • (Facultatif) ROTATION_INTERVAL : fréquence à laquelle les secrets montés sont automatiquement mis à jour, par exemple 120s ou 3600s. La valeur minimale autorisée est 60s et la valeur par défaut est 120s.

Étape 2 : Créer des fichiers manifestes SecretProviderClass

Créez un fichier manifeste SecretProviderClass avec provider: gke pour chaque application. Nous vous recommandons d'ajouter -gke au nom de la ressource afin que les anciennes et nouvelles ressources SecretProviderClass puissent coexister lors des mises à jour progressives.

  1. Enregistrez le manifeste suivant sous le nom secret-provider-class-gke.yaml :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: SECRET_PROVIDER_CLASS_NAME-gke # Append -gke to coexist with existing SPC
      namespace: NAMESPACE
    spec:
      provider: gke # Changed from 'gcp'
      parameters:
        secrets: |
          - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION"
            path: "FILENAME.txt"
    

    Remplacez les éléments suivants :

    • SECRET_PROVIDER_CLASS_NAME-gke : nom de votre nouvelle ressource SecretProviderClass
    • NAMESPACE : espace de noms Kubernetes dans lequel votre charge de travail s'exécute
    • PROJECT_ID : ID de votre projet Google Cloud
    • SECRET_NAME : nom du secret dans Secret Manager
    • SECRET_VERSION : version du secret, par exemple latest ou 1
    • FILENAME.txt : nom du fichier dans lequel la valeur secrète est montée

    Pour les secrets régionaux, spécifiez le chemin d'accès complet à la ressource, y compris l'emplacement : "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"

  2. Appliquez le nouveau fichier manifeste SecretProviderClass :

    kubectl apply -f secret-provider-class-gke.yaml
    

Étape 3 : Mettez à jour les fichiers manifestes de charge de travail

Mettez à jour vos manifestes de pod ou de déploiement pour utiliser le pilote géré (secrets-store-gke.csi.k8s.io) et référencer le nouveau nom SecretProviderClass.

  1. Mettez à jour la section volumes du fichier manifeste de votre charge de travail (par exemple, deployment.yaml) :

    spec:
      containers:
      - name: CONTAINER_NAME
        image: IMAGE_NAME
        volumeMounts:
        - name: secrets-volume
          mountPath: "/var/secrets"
          readOnly: true
      volumes:
      - name: secrets-volume
        csi:
          driver: secrets-store-gke.csi.k8s.io # Changed from 'secrets-store.csi.k8s.io'
          readOnly: true
          volumeAttributes:
            secretProviderClass: SECRET_PROVIDER_CLASS_NAME-gke # Reference new SPC name
    

    Remplacez les éléments suivants :

    • CONTAINER_NAME : nom du conteneur dans votre charge de travail
    • IMAGE_NAME : nom de votre image de conteneur
    • SECRET_PROVIDER_CLASS_NAME-gke : nom de votre nouvelle ressource SecretProviderClass
  2. Appliquez le fichier manifeste de charge de travail mis à jour pour déclencher un déploiement progressif :

    kubectl apply -f deployment.yaml
    

Étape 4 : Vérifiez la migration

Vérifiez que vos charges de travail utilisent bien le module complémentaire géré :

  1. Vérifiez que vos pods ont été déployés et qu'ils ont atteint l'état Running :

    kubectl get pods -n NAMESPACE
    

    Remplacez NAMESPACE par l'espace de noms Kubernetes dans lequel votre charge de travail s'exécute.

  2. Vérifiez que les secrets sont correctement installés et accessibles dans le conteneur :

    kubectl exec -it POD_NAME -n NAMESPACE -- cat /var/secrets/FILENAME.txt
    

    Remplacez les éléments suivants :

    • POD_NAME : nom de votre pod Kubernetes
    • NAMESPACE : espace de noms Kubernetes dans lequel votre charge de travail s'exécute
    • FILENAME.txt : nom du fichier secret monté configuré dans votre SecretProviderClass
  3. (Facultatif) Si vous avez activé la rotation automatique, vérifiez les mises à jour des secrets :

    1. Ajoutez une nouvelle version du secret dans Secret Manager.
    2. Patientez pendant l'intervalle de rotation configuré, par exemple 120 secondes.
    3. Inspectez à nouveau le fichier secret monté dans le pod pour vérifier que le contenu a été mis à jour sans redémarrage du pod :

      kubectl exec -it POD_NAME -n NAMESPACE -- cat /var/secrets/FILENAME.txt
      

Étape 5 : Nettoyez les anciennes ressources Open Source

  1. Supprimez les anciennes ressources SecretProviderClass :

    kubectl delete secretproviderclass OLD_SECRET_PROVIDER_CLASS_NAME -n NAMESPACE
    

    Remplacez les éléments suivants :

    • OLD_SECRET_PROVIDER_CLASS_NAME : nom de votre ancienne ressource SecretProviderClass, par exemple my-app-secrets
    • NAMESPACE : espace de noms Kubernetes dans lequel votre charge de travail s'exécute
  2. Si vous avez déployé le plug-in de fournisseur Google Secret Manager Open Source à l'aide d'un fichier manifeste, supprimez le DaemonSet :

    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp/main/deploy/provider-gcp-plugin.yaml
    
  3. Si vous avez installé le pilote CSI Secrets Store Open Source à l'aide de Helm, désinstallez la version Helm :

    helm uninstall csi-secrets-store -n kube-system
    

Désactiver le module complémentaire Secret Manager

Pour désactiver le module complémentaire Secret Manager sur un cluster Standard existant ou sur un cluster Autopilot, exécutez la commande suivante :

Console

  1. Dans la console Google Cloud , accédez à la page Google Kubernetes Engine.

    Accéder à Google Kubernetes Engine

  2. Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.

  3. Dans la section Sécurité de la page d'informations du cluster, cliquez sur Secret Manager.

  4. Dans la boîte de dialogue Modifier Secret Manager, décochez la case Activer Secret Manager.

  5. Cliquez sur Enregistrer les modifications.

gcloud

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • REGION : région Compute Engine du cluster, telle que us-central1

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --no-enable-secret-manager \
    --region=REGION \

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --no-enable-secret-manager `
    --region=REGION `

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --no-enable-secret-manager ^
    --region=REGION ^

Étapes suivantes