Ansichten:
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.
Hinweis
Hinweis
Standardmäß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:
  1. Gehen Sie zur Kubernetes Engine-Website.
  2. 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:
  1. Gehen Sie zur IAM-Website.
  2. 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:
  1. Gehen Sie zur Website für Dienstkonten.
  2. Klicken Sie auf CREATE SERVICE ACCOUNT.
  3. Geben Sie die Kontodetails des Dienstes ein.
  4. Klicken Sie auf CREATE AND CONTINUE.
  5. Fügen Sie innerhalb der Servicekonto-Berechtigungen die folgenden Rollen hinzu:
    • Logs Writer
    • Monitoring Metric Writer
    • Monitoring Viewer
  6. Klicken Sie auf WEITER.
  7. Gewähren Sie Benutzern Zugriff auf dieses Dienstkonto und erstellen Sie bei Bedarf Schlüssel.
  8. Klicken Sie auf FERTIG.
Um einen Node-Pool zu erstellen, der das Servicekonto verwendet:
  1. Gehen Sie zur Kubernetes Engine-Website.
  2. Klicken Sie auf den Clusternamen, in dem der Node-Pool gestartet wird.
  3. Klicken Sie auf ADD NODE POOL.
  4. 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.
  5. Klicken Sie auf CREATE, um den Node-Pool zu starten.
Hinweis
Hinweis
Die 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>
Hinweis
Hinweis
Die 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.