Profilanwendbarkeit: Stufe 1
Erstellen und verwenden Sie Servicekonten mit minimalen Berechtigungen, um GKE-Clusterknoten
auszuführen, anstatt das Standard-Servicekonto der Compute Engine zu verwenden. Unnötige
Berechtigungen könnten im Falle einer Knotenkompromittierung missbraucht werden.
Ein GCP-Dienstkonto (unterscheidet sich von einem Kubernetes ServiceAccount) ist eine
Identität, die eine Instanz oder eine Anwendung verwenden kann, um GCP-API-Anfragen
auszuführen. Diese Identität wird verwendet, um virtuelle Maschineninstanzen gegenüber
anderen Google Cloud Platform-Diensten zu identifizieren. Standardmäßig verwenden
Kubernetes Engine-Knoten das Standarddienstkonto der Compute Engine. Dieses Konto
hat standardmäßig breiten Zugriff, wie durch Zugriffsumfänge definiert, was es für
eine Vielzahl von Anwendungen auf der VM nützlich macht, aber es hat mehr Berechtigungen,
als zum Ausführen Ihres Kubernetes Engine-Clusters erforderlich sind.
Ein Dienstkonto mit minimalen Berechtigungen sollte erstellt und verwendet werden,
um den Kubernetes Engine-Cluster auszuführen, anstatt das Standard-Dienstkonto der
Compute Engine zu verwenden, und separate Dienstkonten für jede Kubernetes-Arbeitslast
erstellen (siehe Empfehlung 5.2.2).
Kubernetes Engine erfordert mindestens, dass das Node-Servicekonto die Rollen
monitoring.viewer
, monitoring.metricWriter
und logging.logWriter
hat. Möglicherweise müssen zusätzliche Rollen hinzugefügt werden, damit die Nodes
Bilder von GCR abrufen können.![]() |
HinweisStandardmäßig verwenden Knoten das Standarddienstkonto der Compute Engine, wenn Sie
einen neuen Cluster erstellen.
|
Auswirkung
Instanzen erhalten automatisch den Bereich, um vollen Zugriff auf alle Google Cloud
APIs zu ermöglichen. Dies geschieht, damit die IAM-Berechtigungen der Instanz vollständig
durch die IAM-Rollen des Dienstkontos bestimmt werden. Wenn Kubernetes-Workloads Cluster-Zugriffsbereiche
verwendet haben, um Aktionen mit Google APIs auszuführen, können sie dies möglicherweise
nicht mehr tun, wenn dies nicht durch die Berechtigungen des Dienstkontos erlaubt
ist. Um dies zu beheben, folgen Sie der Empfehlung 5.2.2.
Die hier aufgeführten Dienstkontorollen sind die minimal erforderlichen, um den Cluster
auszuführen. Zusätzliche Rollen können erforderlich sein, um von einer privaten Instanz
des Google Container Registry (GCR) abzurufen.
Prüfung
Verwendung der Google Cloud Console:
- Gehen Sie zur Kubernetes Engine-Website.
- Wählen Sie den zu testenden Cluster aus und klicken Sie auf jeden Knotenpool, um die Detailseite des Knotenpools aufzurufen. Stellen Sie sicher, dass für jeden Knotenpool das Dienstkonto unter der Überschrift Sicherheit nicht auf Standard gesetzt ist.
Um zu überprüfen, ob die dem Dienstkonto zugewiesenen Berechtigungen die minimal erforderlichen
für den Clusterbetrieb sind:
- Gehen Sie zur IAM-Website.
- Stellen Sie aus der Liste der Dienstkonten sicher, dass jedes Cluster-Dienstkonto
nur die folgenden Rollen hat:
- Protokollschreiber
- Überwachungsmetriken-Schreiber
- Überwachungsanzeige
Verwendung der Befehlszeile:
Um zu überprüfen, welches Dienstkonto für einen bestehenden Cluster festgelegt ist,
führen Sie den folgenden Befehl aus:
gcloud container node-pools describe $NODE_POOL --cluster $CLUSTER_NAME --zone $COMPUTE_ZONE --format json | jq '.config.serviceAccount'
Die Ausgabe des obigen Befehls gibt "default" zurück, wenn das Standarddienstkonto
für den Projektzugriff verwendet wird.
Um zu überprüfen, ob die dem Dienstkonto zugewiesenen Berechtigungen die minimal erforderlichen
für den Clusterbetrieb sind:
gcloud projects get-iam-policy <project_id> \ --flatten="bindings[].members" \ --format='table(bindings.role)' \ --filter="bindings.members:<service_account>"
Überprüfen Sie die Ausgabe, um sicherzustellen, dass das Dienstkonto nur die Rollen
hat, die zum Ausführen des Clusters erforderlich sind.
roles/logging.logWriter
roles/monitoring.metricWriter
roles/monitoring.viewer
Wiederherstellung
Verwendung der Google Cloud Console:
So erstellen Sie ein Dienstkonto mit minimalen Berechtigungen:
- Gehen Sie zur Website für Dienstkonten.
- Klicken Sie auf
CREATE SERVICE ACCOUNT
. - Geben Sie die Kontodetails des Dienstes ein.
- Klicken Sie auf
CREATE AND CONTINUE
. - Fügen Sie innerhalb der Servicekonto-Berechtigungen die folgenden Rollen hinzu:
Logs Writer
Monitoring Metric Writer
Monitoring Viewer
- Klicken Sie auf WEITER.
- Gewähren Sie Benutzern Zugriff auf dieses Dienstkonto und erstellen Sie bei Bedarf Schlüssel.
- Klicken Sie auf FERTIG.
Um einen Node-Pool zu erstellen, der das Servicekonto verwendet:
- Gehen Sie zur Kubernetes Engine-Website.
- Klicken Sie auf den Clusternamen, in dem der Node-Pool gestartet wird.
- Klicken Sie auf
ADD NODE POOL
. - Innerhalb der Node-Pool-Details wählen Sie die
Security
-Unterüberschrift aus, und unter "Identitätsstandards" wählen Sie das minimal privilegierte Dienstkonto aus dem Dropdown-Menü "Dienstkonto" aus. - Klicken Sie auf
CREATE
, um den Node-Pool zu starten.
![]() |
HinweisDie Workloads müssen in den neuen Knotenpool migriert werden, und die alten Knotenpools,
die das Standarddienstkonto verwenden, sollten gelöscht werden, um die Behebung abzuschließen.
|
Verwendung der Befehlszeile:
So erstellen Sie ein Dienstkonto mit minimalen Berechtigungen:
gcloud iam service-accounts create <node_sa_name> --display-name "GKE Node Service Account" export NODE_SA_EMAIL=gcloud iam service-accounts list --format='value(email)' --filter='displayName:GKE Node Service Account'
Gewähren Sie dem Dienstkonto die folgenden Rollen:
export PROJECT_ID=gcloud config get-value project gcloud projects add-iam-policy-binding <project_id> --member serviceAccount:<node_sa_email> --role roles/monitoring.metricWriter gcloud projects add-iam-policy-binding <project_id> --member serviceAccount:<node_sa_email> --role roles/monitoring.viewer gcloud projects add-iam-policy-binding <project_id> --member serviceAccount:<node_sa_email> --role roles/logging.logWriter
Um einen neuen Node-Pool mit dem Servicekonto zu erstellen, führen Sie den folgenden
Befehl aus:
gcloud container node-pools create <node_pool> --service- account=<sa_name>@<project_id>.iam.gserviceaccount.com-- cluster=<cluster_name> --zone <compute_zone>
![]() |
HinweisDie Workloads müssen in den neuen Knotenpool migriert werden, und die alten Knotenpools,
die das Standarddienstkonto verwenden, sollten gelöscht werden, um die Behebung abzuschließen.
|