L'intégration entre Secret Manager et Google Kubernetes Engine (GKE) vous permet de stocker des données sensibles telles que des mots de passe et des 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 :
- Activez le module complémentaire Secret Manager sur un cluster GKE nouveau ou existant.
- Configurez les applications pour qu'elles s'authentifient auprès de l'API Secret Manager.
- Définissez les secrets à monter sur les pods Kubernetes à l'aide d'un fichier YAML
SecretProviderClass
. - Créez un volume sur lequel les secrets seront installés. Une fois le volume associé, les applications du conteneur peuvent accéder aux données du système de fichiers du conteneur.
Le module complémentaire Secret Manager est dérivé du pilote CSI Kubernetes Secrets Store Open Source et du fournisseur Google Secret Manager. Si vous utilisez le pilote CSI du magasin de secrets Open Source pour accéder aux secrets, vous pouvez migrer vers le module complémentaire Secret Manager. Pour en savoir plus, consultez la page 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 prise en charge 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 accéder de manière sélective aux secrets à partir de 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 la 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 les fonctionnalités suivantes disponibles dans le pilote CSI Secrets Store Open Source:
Le module complémentaire Secret Manager n'est pas compatible avec les nœuds Windows Server.
Avant de commencer
-
Enable the Secret Manager and Google Kubernetes Engine APIs.
Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de 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 du Google Cloud SDK ou 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. 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 la fédération d'identité de charge de travail pour 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 à la fois sur les clusters Standard et les clusters 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 d'un cluster, procédez comme suit:
Console
-
Accédez à la page Google Kubernetes Engine dans Google Cloud Console.
Cliquez sur add_box Créer.
Dans la boîte de dialogue Créer un cluster, cliquez sur Configurer.
Dans le menu de navigation, dans la section Cluster, cliquez sur Sécurité.
Cochez la case Activer Secret Manager.
Cochez la case Activer Workload Identity.
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, 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'option
--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
{ Autopilot cluster}
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 :
- 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. Pour définir une version spécifique, consultez la section Définir la version et la version disponible d'un nouveau cluster Autopilot.
- LOCATION: région Compute Engine du cluster, par exemple
us-central1
.
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
Une fois le module complémentaire Secret Manager activé, vous pouvez utiliser le pilote CSI Secrets Store dans les volumes Kubernetes en indiquant le 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
-
Accédez à la page Google Kubernetes Engine dans Google Cloud Console.
Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.
Dans la section Sécurité de la page "Détails du cluster", cliquez sur
Secret Manager.Dans la boîte de dialogue Modifier Secret Manager, cochez la case Activer Secret Manager.
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 1
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du clusterLOCATION
: emplacement de votre cluster, par exempleus-central1
Configurer des 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 installé lors de l'authentification auprès de l'API Secret Manager. Pour autoriser vos applications à s'authentifier auprès de l'API Secret Manager à l'aide de la fédération d'identité de charge de travail pour GKE, procédez comme suit:
Créez un compte de service Kubernetes ou utilisez un compte de service 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 IAM (Identity and Access Management) pour le secret dans Secret Manager.
Les pods qui utilisent le compte de service Kubernetes configuré s'authentifient automatiquement en tant que identifiant principal IAM qui correspond au compte de service Kubernetes lorsqu'ils accèdent à l'API Secret Manager.
Créer un compte de service Kubernetes
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 KubernetesNAMESPACE
: nom de l'espace de noms Kubernetes du compte de service.
Appliquez le fichier manifeste :
kubectl apply -f service-account.yaml
Créez une stratégie d'autorisation IAM qui fait référence au nouveau compte de service Kubernetes et lui accorde 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 ManagerPROJECT_NUMBER
: numéro numérique de votre projet Google CloudPROJECT_ID
: ID du projet Google Cloud contenant votre cluster GKENAMESPACE
: 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 ManagerPROJECT_NUMBER
: numéro numérique de votre projet Google CloudPROJECT_ID
: ID du projet Google Cloud contenant votre cluster GKENAMESPACE
: 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 et le nom de fichier à utiliser pour les installer. Procédez comme suit :
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 objetSecretProviderClass
.PROJECT_ID
: ID de votre projet.SECRET_NAME
: nom du secret.SECRET_VERSION
: version du secret.FILENAME.txt
: nom du fichier où la valeur du secret sera montée. Vous pouvez créer plusieurs fichiers à l'aide des variablesresourceName
etpath
.
Appliquez le fichier manifeste :
kubectl apply -f app-secrets.yaml
Vérifiez que l'objet
SecretProviderClass
est créé:kubectl get SecretProviderClasses
Configurer un volume sur lequel les secrets seront installés
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 :
POD_NAME
: nom du pod Kubernetes où le secret est installéNAMESPACE
: nom de l'espace de noms Kubernetes du compte de serviceKSA_NAME
: le compte de service Kubernetes que vous avez configuré à l'étape Configurer les applications pour qu'elles s'authentifient auprès de l'API Secret ManagerIMAGE_NAME
: nom de l'image de conteneurSECRET_PROVIDER_CLASS_NAME
: nom de votre objetSecretProviderClass
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"
Appliquez la configuration à votre cluster.
kubectl apply -f my-pod.yaml
Cette étape associe 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 joue le rôle de fournisseur.
Migrer depuis le pilote CSI Secrets Store existant
Si vous migrez vers le module complémentaire Secret Manager à partir de votre installation existante du pilote CSI Secrets Store, mettez à jour votre fichier manifeste de pod comme suit:
Mettez à jour le nom de votre
SecretProviderClass
et de votreprovider
comme décrit dans le fichier manifeste suivant:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: app-secrets-gke spec: provider: gke parameters: secrets: | - resourceName: "projects/<project_id>/secrets/<secret_name>/versions/<secret_version>" path: "good1.txt"
Mettez à jour
driver
etsecretProviderClass
pour votre volume Kubernetes comme décrit dans le fichier manifeste suivant:volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "app-secrets-gke"
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
-
Accédez à la page Google Kubernetes Engine dans Google Cloud Console.
Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.
Dans la section Sécurité de la page "Détails du cluster", cliquez sur
Secret Manager.Dans la boîte de dialogue Modifier Secret Manager, décochez la case Activer Secret Manager.
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, par exemple
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 ^