Durch die Integration von Secret Manager und der Google Kubernetes Engine (GKE) können Sie vertrauliche Daten wie Passwörter und Zertifikate, die von GKE-Clustern verwendet werden, als Secrets in Secret Manager speichern.
Auf dieser Seite wird erläutert, wie Sie mit dem Secret Manager-Add-on auf die in Secret Manager gespeicherten Secrets als Volumes zugreifen, die in Kubernetes-Pods bereitgestellt sind.
Dieser Vorgang umfasst folgende Schritte:
- Secret Manager-Add-on für einen neuen oder vorhandenen aktivieren GKE-Cluster.
- Konfigurieren Sie Anwendungen für die Authentifizierung bei der Secret Manager API.
- Mit der YAML-Datei
SecretProviderClass
können Sie festlegen, welche Secrets auf Kubernetes-Pods bereitgestellt werden sollen. - Erstellen Sie ein Volume, auf dem die Secrets bereitgestellt werden. Nachdem das Volume angehängt wurde, Anwendungen im Container können auf die Daten im Containerdateisystem zugreifen.
Das Secret Manager-Add-on basiert auf dem Open-Source-CSI-Treiber für Kubernetes Secrets Store und dem Google Secret Manager-Anbieter. Wenn Sie den Open-Source-CSI-Treiber „Secrets Store“ für den Zugriff auf Secrets verwenden, können Sie zum Secret Manager-Add-on migrieren. Weitere Informationen finden Sie unter Migrieren Sie vom vorhandenen CSI-Treiber für den Secret Store.
Vorteile
Das Secret Manager-Add-on bietet folgende Vorteile:
- Sie können eine vollständig verwaltete und unterstützte Lösung für den Zugriff auf Secret Manager verwenden ohne operativen Aufwand direkt aus der GKE herausholen.
- Sie müssen keinen benutzerdefinierten Code schreiben, um auf in Secret Manager gespeicherte Secrets zuzugreifen.
- Sie können alle Ihre Secrets zentral in Secret Manager speichern und verwalten und mit dem Secret Manager-Add-on selektiv auf Secrets aus GKE-Pods zugreifen. So können Sie Funktionen von Secret Manager wie CMEK-Verschlüsselung, detaillierte Zugriffssteuerung, verwaltete Rotation, Lebenszyklusverwaltung und Audit-Logs sowie Kubernetes-Funktionen wie das Übergeben von Secrets an Container in Form von bereitgestellten Volumes verwenden.
- Das Secret Manager-Add-on wird sowohl in Standardclustern als auch Autopilot-Clustern unterstützt.
- Das Secret Manager-Add-on unterstützt Knoten, die Container-Optimized OS verwenden oder Ubuntu-Knoten-Images.
Beschränkungen
Für das Secret Manager-Add-on gelten die folgenden Einschränkungen:
Das Secret Manager-Add-on unterstützt die folgenden Funktionen nicht, die im Open-Source-Secrets Store CSI-Treiber verfügbar sind:
Das Secret Manager-Add-on unterstützt keine Windows Server-Knoten.
Hinweise
-
Enable the Secret Manager and Google Kubernetes Engine APIs.
Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components update
ab.Sie können das Secret Manager-Add-on nicht manuell mit der Methode Google Cloud SDK oder die Google Cloud Console.
Achten Sie darauf, dass Ihr Cluster die GKE-Version 1.27.14-gke.1042001 ausführt oder höher mit einem Linux-Knoten-Image.
Wenn Sie einen GKE Standard-Cluster verwenden, muss die Identitätsföderation von Arbeitslasten für GKE für Ihren Cluster aktiviert sein. Identitätsföderation von Arbeitslasten für GKE wird aktiviert durch Standardeinstellung in einem Autopilot-Cluster. Kubernetes-Pods verwenden die Workload Identity-Föderation für GKE, um sich bei der Secret Manager API zu authentifizieren.
Secret Manager-Add-on aktivieren
Sie können das Secret Manager-Add-on sowohl für Standard- als auch für Autopilot-Cluster aktivieren.
Secret Manager-Add-on in einem neuen GKE-Cluster aktivieren
So aktivieren Sie das Secret Manager-Add-on bei der Clustererstellung:
Console
-
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie auf add_boxErstellen.
Klicken Sie im Dialogfeld Cluster erstellen auf Konfigurieren.
Klicken Sie im Navigationsmenü im Bereich Cluster auf Sicherheit.
Klicken Sie auf das Kästchen Secret Manager aktivieren.
Klicken Sie das Kästchen Workload Identity aktivieren an.
Fahren Sie mit der Konfiguration des Clusters fort und klicken Sie dann auf Erstellen.
gcloud
{ Standard cluster}
Führen Sie den folgenden Befehl aus, um das Secret Manager-Add-on in einem neuen Standardcluster zu aktivieren:
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- CLUSTER_NAME: Der Name Ihres Clusters.
- LOCATION: die Compute Engine-Region für den Cluster, z. B.
us-central1
. - VERSION: die spezifische GKE-Version, die
die Sie verwenden möchten. Achten Sie darauf, dass Ihr Cluster die GKE-Version ausführt
1.27.14-gke.1042001 oder höher. Wenn die Standardeinstellung
Release-Version
enthält diese Version nicht, verwenden Sie das Flag
--release-channel
, um eine Version verfügbar ist. - PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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}
Führen Sie den folgenden Befehl aus, um das Secret Manager-Add-on in einem neuen Autopilot-Cluster zu aktivieren:
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- CLUSTER_NAME: Der Name Ihres Clusters.
- VERSION: die GKE-Version, die Sie verwenden möchten. Achten Sie darauf, dass Ihr Cluster die GKE-Version ausführt 1.27.14-gke.1042001 oder höher. Informationen zum Festlegen einer bestimmten Version finden Sie unter Version und Release-Version eines neuen Autopilot-Clusters festlegen.
- LOCATION: die Compute Engine-Region für den Cluster, z. B.
us-central1
.
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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
Nachdem Sie das Secret Manager-Add-on aktiviert haben,
kann den CSI-Treiber für den Secret Store in Kubernetes-Volumes mithilfe des Treibers verwenden
und Bereitstellername: secrets-store-gke.csi.k8s.io
.
Secret Manager-Add-on für einen vorhandenen GKE-Cluster aktivieren
So aktivieren Sie das Secret Manager-Add-on in einem vorhandenen Cluster:
Console
-
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf der Seite mit den Clusterdetails im Abschnitt Sicherheit auf
Secret Manager.Klicken Sie im Dialogfeld Secret Manager bearbeiten das Kästchen Secret Manager aktivieren an.
Klicken Sie auf Änderungen speichern.
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- CLUSTER_NAME: der Name Ihres Clusters
- LOCATION: die Compute Engine-Region für den Cluster, z. B.
us-central1
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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 ^
Installation des Secret Manager-Add-ons prüfen
Führen Sie den folgenden Befehl aus, um zu prüfen, ob das Secret Manager-Add-on auf dem Kubernetes-Cluster installiert ist:
gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 1
Ersetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: den Standort Ihres Clusters, z. B.us-central1
Anwendungen für die Authentifizierung bei der Secret Manager API konfigurieren
Der Google Secret Manager-Anbieter verwendet die Workload Identity des Pods, auf dem ein Secret bereitgestellt wird, um sich bei der Secret Manager API zu authentifizieren. Damit sich Ihre Anwendungen beim Führen Sie die folgenden Schritte aus, um die Secret Manager API mit der Identitätsföderation von Arbeitslasten für GKE zu verwenden:
Neues Kubernetes-Dienstkonto erstellen oder verwenden Sie ein vorhandenes Kubernetes-Dienstkonto im selben Namespace wie der Pod auf dem Sie das Secret bereitstellen möchten.
Erstellen Sie eine IAM-Zulassungsrichtlinie (Identity and Access Management) für das Secret in Secret Manager.
Pods, die das konfigurierte Kubernetes-Dienstkonto verwenden, werden beim Zugriff auf die Secret Manager API automatisch als Principal-ID des IAM authentifiziert, die dem Kubernetes-Dienstkonto entspricht.
Neues Kubernetes-Dienstkonto erstellen
Speichern Sie das folgende Manifest als
service-account.yaml
:apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE
Ersetzen Sie Folgendes:
KSA_NAME
: der Name des neuen Kubernetes-ServiceAccountNAMESPACE
: der Name des Kubernetes-Namespace für das Dienstkonto
Wenden Sie das Manifest an:
kubectl apply -f service-account.yaml
IAM-Zulassungsrichtlinie erstellen, die auf das neue Kubernetes verweist Dienstkonto und gewähren Sie ihm die Berechtigung, auf das Secret zuzugreifen:
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
Ersetzen Sie Folgendes:
SECRET_NAME
: der Name des Secrets in Secret ManagerPROJECT_NUMBER
: Ihre numerische Google Cloud-ProjektnummerPROJECT_ID
: die Projekt-ID des Google Cloud-Projekts, das Ihren GKE-Cluster enthältNAMESPACE
: Der Name des Kubernetes-Namespace für das ServiceAccount.KSA_NAME
: Der Name Ihres vorhandenen Kubernetes-Dienstkontos.
Vorhandenes Kubernetes-Dienstkonto verwenden
IAM-Zulassungsrichtlinie erstellen, die auf das vorhandene Kubernetes verweist Dienstkonto und gewähren Sie ihm die Berechtigung, auf das Secret zuzugreifen:
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
Ersetzen Sie Folgendes:
SECRET_NAME
: der Name des Secrets in Secret ManagerPROJECT_NUMBER
: Ihre numerische Google Cloud-ProjektnummerPROJECT_ID
: die Projekt-ID des Google Cloud-Projekts, das Ihren GKE-Cluster enthältNAMESPACE
: Der Name des Kubernetes-Namespace für das ServiceAccount.KSA_NAME
: der Name Ihres vorhandenen Kubernetes-Dienstkontos
Festlegen, welche Secrets bereitgestellt werden sollen
Wenn Sie angeben möchten, welche Secrets als Dateien im Kubernetes-Pod bereitgestellt werden sollen, erstellen Sie ein SecretProviderClass
-YAML-Manifest und listen Sie die zu bereitstellenden Secrets und den Dateinamen auf, unter dem sie bereitgestellt werden sollen. Gehen Sie so vor:
Speichern Sie das folgende Manifest als
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"
Ersetzen Sie Folgendes:
SECRET_PROVIDER_CLASS_NAME
: Der Name desSecretProviderClass
-Objekts.PROJECT_ID
: Ihre Projekt-ID.SECRET_NAME
: den Namen des Secrets.SECRET_VERSION
: die Secret-Version.FILENAME.txt
: der Dateiname, in dem sich der Secret-Wert befinden wird montiert sind. Mit den VariablenresourceName
undpath
können Sie mehrere Dateien erstellen.
Wenden Sie das Manifest an:
kubectl apply -f app-secrets.yaml
Prüfen Sie, ob das Objekt
SecretProviderClass
erstellt wurde:kubectl get SecretProviderClasses
Volume konfigurieren, in dem die Secrets bereitgestellt werden
Speichern Sie die folgende Konfiguration als
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
Ersetzen Sie Folgendes:
POD_NAME
: der Name des Kubernetes-Pods, in dem sich das Secret befindet wurde bereitgestelltNAMESPACE
: der Name des Kubernetes-Namespace für das DienstkontoKSA_NAME
: das von Ihnen eingerichtete Kubernetes-Dienstkonto im Schritt Anwendungen für die Authentifizierung bei der Secret Manager API konfigurierenIMAGE_NAME
ist der Name des Container-Images.SECRET_PROVIDER_CLASS_NAME
: der Name desSecretProviderClass
-Objekts
Fügen Sie nur in Standardclustern Folgendes zur Datei
template.spec
hinzu: Feld, um die Pods in Knotenpools zu platzieren, die die Identitätsföderation von Arbeitslasten für GKE verwenden.Überspringen Sie diesen Schritt in Autopilot-Clustern, da dieser nodeSelector abgelehnt wird, da jeder Knoten die Identitätsföderation von Arbeitslasten für GKE verwendet.
spec: nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"
Wenden Sie die Konfiguration auf Ihren Cluster an.
kubectl apply -f my-pod.yaml
In diesem Schritt wird ein Volume mysecret
unter /var/secrets
mit dem CSI-Treiber (secrets-store-gke.csi.k8s.io) bereitgestellt. Dieses Volume verweist auf das Objekt SecretProviderClass
die als Anbieter fungiert.
Vom vorhandenen CSI-Treiber für den Secret Store migrieren
Wenn Sie von Ihrer vorhandenen Installation des CSI-Treibers für Secrets-Speicher zum Secret Manager-Add-on migrieren, aktualisieren Sie Ihr Pod-Manifest so:
Aktualisieren Sie den Namen von
SecretProviderClass
undprovider
wie beschrieben. im folgenden Manifest: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"
driver
undsecretProviderClass
für Ihr Kubernetes aktualisieren wie im folgenden Manifest beschrieben:volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "app-secrets-gke"
Secret Manager-Add-on deaktivieren
So deaktivieren Sie das Secret Manager-Add-on für eine vorhandene Standardcluster oder in einem Autopilot-Cluster: Führen Sie folgenden Befehl aus: Befehl:
Console
-
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf der Seite mit den Clusterdetails im Abschnitt Sicherheit auf
Secret Manager.Entfernen Sie im Dialogfeld Secret Manager bearbeiten das Häkchen aus dem Kästchen Secret Manager aktivieren.
Klicken Sie auf Änderungen speichern.
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- CLUSTER_NAME: der Name Ihres Clusters
- REGION: die Compute Engine
Region für den Cluster, z. B.
us-central1
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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 ^