In diesem Dokument werden Dienstkonten in Google Kubernetes Engine (GKE) beschrieben und es wird erläutert, wie sie Identitäten für Anwendungen bereitstellen. Sie erfahren mehr über die verschiedenen Arten von Dienstkonten und wann Sie die einzelnen Typen verwenden sollten, um den Zugriff auf Ressourcen in GKE zu authentifizieren, ohne auf persönliche Anmeldedaten angewiesen zu sein.
Dieses Dokument richtet sich an Sicherheitsexperten und Bediener, die Dienstkonten für die Interaktion mit GKE-Anwendungen erstellen und verwalten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
Kubernetes-Dienstkonten und IAM-Dienstkonten
In der folgenden Tabelle werden die Hauptunterschiede zwischen Kubernetes-Dienstkonten und IAM-Dienstkonten beschrieben:
| Arten von Dienstkonten in GKE | |
|---|---|
| Kubernetes-Dienstkonto |
|
| IAM-Dienstkonto |
|
Kubernetes-Dienstkonten
Kubernetes-Dienstkonten werden auf Clusterebene verwaltet und sind auf dem Kubernetes API-Server als ServiceAccount-Objekte vorhanden. In der Kubernetes- und GKE-Dokumentation wird häufig der Begriff ServiceAccount verwendet, um diese Kubernetes-Ressourcen von Dienstkonten in anderen Umgebungen wie IAM zu unterscheiden.
Sie erstellen ein Kubernetes-ServiceAccount in einem Namespace und weisen dieses ServiceAccount dann mithilfe des Felds serviceAccountName im Pod-Manifest einem Pod zu. Der Kubelet-Prozess auf dem Knoten ruft ein kurzlebiges Inhabertoken für das zugewiesene ServiceAccount ab und stellt das Token als projiziertes Volume im Pod bereit. Standardmäßig hat dieses projizierte Volume einen Namen, der mit dem Präfix kube-api-access- beginnt. Alle Volumes, die mit diesem Präfix beginnen, werden von GKE verwaltet. Das bedeutet, dass Sie die Größe dieser Volumes nicht ändern können. Wenn Sie die Festplattennutzung genauer überwachen möchten, schließen Sie Volumes, die mit dem Präfix kube-api-access- beginnen, aus Ihrer Monitoringkonfiguration aus.
Das kurzlebige Inhabertoken ist ein JSON Web Token (JWT), das vom API-Server signiert wird, bei dem es sich um einen OIDC-Anbieter (OpenID Connect) handelt. Rufen Sie zum Validieren des Inhabertokens den öffentlichen Validierungsschlüssel für den Cluster ab. Rufen Sie dazu die Methode projects.locations.clusters.getJwks in der GKE API auf.
- Die Grundlagen von Kubernetes-ServiceAccounts finden Sie in der Kubernetes-Dokumentation unter ServiceAccounts.
- Informationen zum Erstellen neuer ServiceAccounts, zum Erteilen von Berechtigungen mithilfe von rollenbasierter Zugriffssteuerung (Role-Based Access Control, RBAC) und zum Zuweisen von ServiceAccounts zu Pods finden Sie unter Dienstkonten für Pods konfigurieren.
- Best Practices für die Verwaltung von Kubernetes-ServiceAccounts finden Sie unter Best Practices für RBAC.
- Rufen Sie zum Lesen der OIDC-Konfiguration des Kubernetes API-Servers für einen Cluster die Methode
projects.locations.clusters.well-known.getOpenid-configurationin der GKE API auf.
Gefährdete Anmeldedaten des Kubernetes-Dienstkontos
Wenn die Anmeldedaten eines Kubernetes-Dienstkontos manipuliert wurden, verwenden Sie eine der folgenden Optionen, um die Anmeldedaten zu widerrufen:
- Pods neu erstellen: Das Inhabertoken ist an jede eindeutige Pod-UID gebunden. Daher werden beim Neuerstellen der Pods die vorherigen Anmeldedaten ungültig.
- Erstellen Sie das Kubernetes-Dienstkonto neu: Das Inhabertoken ist an die UID des ServiceAccount-Objekts in der Kubernetes API gebunden. Löschen Sie das ServiceAccount und erstellen Sie ein neues ServiceAccount mit dem gleichen Namen. Frühere Tokens werden ungültig, da die UID des neuen ServiceAccount anders ist.
- Rotation von Anmeldedaten durchführen: Bei diesem Vorgang werden alle Anmeldedaten von Kubernetes-Dienstkonten in Ihrem Cluster widerrufen. Durch die Rotation werden auch das CA-Zertifikat und die IP-Adresse Ihres Clusters geändert. Weitere Informationen finden Sie unter Rotation von Anmeldedaten.
IAM-Dienstkonten
IAM-Dienstkonten werden auf Projektebene mithilfe der IAM API verwaltet. Sie können diese Dienstkonten verwenden, um Aktionen wie das programmatische Aufrufen von Google Cloud-APIs und das Verwalten von Berechtigungen für Anwendungen auszuführen, die in Google Cloud-Produkten ausgeführt werden.
Weitere Informationen finden Sie in der Übersicht zu IAM-Dienstkonten.
GKE-Dienst-Agents
Ein IAM-Dienst-Agent ist ein IAM-Dienstkonto, das von Google Cloud verwaltet wird. GKE verwendet die folgenden beiden Dienst-Agents:
Kubernetes Engine-Dienst-Agent
GKE verwendet den Kubernetes Engine-Dienst-Agent, um den Lebenszyklus von Clusterressourcen wie Knoten, Laufwerke und Load-Balancer in Ihrem Namen zu verwalten. Dieser Dienst-Agent hat die Domain container-engine-robot.iam.gserviceaccount.com und erhält die Rolle Kubernetes-Engine-Service-Agent (roles/container.serviceAgent) in Ihrem Projekt, wenn Sie die GKE-API aktivieren.
Die Kennung dieses Dienst-Agents lautet:
service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
CLUSTER_PROJECT_NUMBER ist die numerische Projektnummer des Projekts, das Ihren GKE-Cluster enthält.
Kubernetes Engine Default Node Service Agent
GKE verwendet den Kubernetes Engine-Standarddienst-Agent für Knoten, um das Logging und Monitoring von Kubernetes-Knoten für Cluster mit Kubernetes-Version 1.33 und höher zu unterstützen. Dieser Dienst-Agent hat die Domain gcp-sa-gkenode.iam.gserviceaccount.com und erhält die Rolle Kubernetes Engine Default Node Service Agent (roles/container.defaultNodeServiceAgent) in Ihrem Projekt, wenn Sie die GKE API aktivieren.
Die Kennung dieses Dienst-Agents lautet:
service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkenode.iam.gserviceaccount.com
CLUSTER_PROJECT_NUMBER ist die numerische Projektnummer des Projekts, das Ihren GKE-Cluster enthält.
Wenn Sie die Berechtigungen des Dienst-Agents in Ihrem Projekt entfernen, können Sie sie wiederherstellen. Folgen Sie dazu der Anleitung unter Fehler 400/403: Dem Konto fehlen Bearbeitungsberechtigungen.
Node-Dienstkonten
GKE verwendet IAM-Dienstkonten, die an Ihre Knoten angehängt sind, um Systemaufgaben wie Logging und Monitoring auszuführen. Diese Knoten-Dienstkonten müssen in Ihrem Projekt mindestens die Rolle Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount) haben. Standardmäßig verwendet GKE das Compute Engine-Standarddienstkonto, das automatisch in Ihrem Projekt erstellt wird, als Knotendienstkonto.
Wenn Ihre Organisation die Einschränkung der Organisationsrichtlinie iam.automaticIamGrantsForDefaultServiceAccounts erzwingt, erhält das Compute Engine-Standarddienstkonto in Ihrem Projekt möglicherweise nicht automatisch die erforderlichen Berechtigungen für GKE.
Wenn Sie das Compute Engine-Standarddienstkonto für andere Funktionen in Ihrem Projekt oder Ihrer Organisation verwenden, hat das Dienstkonto möglicherweise mehr Berechtigungen als für GKE erforderlich. Dies kann zu Sicherheitsrisiken führen.
Deaktivieren Sie das Compute Engine-Standarddienstkonto nur, wenn Sie zu von Nutzern verwalteten Dienstkonten migrieren.
E-Mail-Adressen von Knotendienstkonten
Die E-Mail-Adresse Ihres Knotendienstkontos hängt vom Typ des Dienstkontos ab:
Standardmäßiges Compute Engine-Dienstkonto:
CLUSTER_PROJECT_NUMBER-compute@developer.gserviceaccount.comErsetzen Sie
CLUSTER_PROJECT_NUMBERdurch die Projektnummer des Projekts, das Ihren Cluster enthält, z. B.1234567890.Benutzerdefiniertes Dienstkonto:
SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comErsetzen Sie Folgendes:
SERVICE_ACCOUNT_NAME: der Name des Dienstkontos.SERVICE_ACCOUNT_PROJECT_ID: die Projekt-ID des Google Cloud -Projekts, das das Dienstkonto enthält.
Node-Dienstkonten und Projekt-Dienst-Agents
Wenn Sie einen Cluster oder Knotenpool erstellen, verwenden Dienst-Agents im Clusterprojekt das Dienstkonto, das an die Knoten angehängt ist, um Aufgaben wie das Pullen von Images auszuführen. Standardmäßig haben Dienst-Agents im Clusterprojekt den folgenden Zugriff auf Knotendienstkonten in diesem Projekt:
- Der Compute Engine-Dienst-Agent in einem Projekt kann Zugriffstokens für Knotendienstkonten im selben Projekt erstellen.
- Der GKE-Dienst-Agent in einem Projekt kann die Identität von Knotendienstkonten im selben Projekt übernehmen.
Einige Organisationen verwenden ein dediziertes Projekt, um alle Dienstkonten zu verwalten. Wenn sich das Dienstkonto Ihres Knotens nicht in Ihrem Clusterprojekt befindet, können die Dienst-Agents im Clusterprojekt keine Tokens erstellen oder dieses Dienstkonto übernehmen. Sie müssen den Dienst-Agents in Ihrem Clusterprojekt die folgenden Rollen für das Dienstkonto zuweisen:
- Ersteller von Dienstkonto-Tokens (
roles/iam.serviceAccountTokenCreator) für das Dienstkonto des Compute Engine-Dienst-Agents in Ihrem Clusterprojekt. - Dienstkontonutzer (
roles/iam.serviceAccountUser) für das Dienstkonto des GKE-Dienst-Agents in Ihrem Clusterprojekt.
Weitere Informationen finden Sie unter Nutzung von Dienstkonten projektübergreifend konfigurieren.
Wann sollte ein bestimmtes Dienstkonto verwendet werden?
Welche Art von Dienstkonto Sie verwenden, hängt von der Art der Identität ab, die Sie für Ihre Anwendungen bereitstellen möchten:
- Identität für die Pods zur Verwendung im Cluster bereitstellen: Verwenden Sie ein Kubernetes-ServiceAccount. Jeder Kubernetes-Namespace hat ein
default-ServiceAccount. Wir empfehlen jedoch, für jede Arbeitslast in jedem Namespace neue ServiceAccounts mit minimalen Berechtigungen zu erstellen. - Identität für Pods zur Verwendung außerhalb des Clusters bereitstellen: Verwenden Sie Workload Identity-Föderation für GKE. Mit Workload Identity Federation für GKE können Sie Kubernetes-Ressourcen wie ServiceAccounts als Hauptkonten in IAM-Richtlinien angeben. Verwenden Sie beispielsweise die Identitätsföderation von Arbeitslasten für GKE, wenn Sie Google Cloud APIs wie Secret Manager oder Spanner über Ihre Pods aufrufen.
- Standardidentität für Knoten bereitstellen: Verwenden Sie beim Erstellen von GKE-Clustern oder -Knoten ein benutzerdefiniertes IAM-Dienstkonto mit minimal Berechtigungen. Wenn Sie kein benutzerdefiniertes IAM-Dienstkonto verwenden, nutzt GKE das Compute Engine-Standarddienstkonto.