Ansichten:
Profilanwendbarkeit: Stufe 1
Erstellen und verwenden Sie Servicekonten mit minimalen Berechtigungen, um GKE-Clusterknoten auszuführen, anstatt das Standard-Servicekonto von Compute Engine zu verwenden. Unnötige Berechtigungen könnten im Falle einer Kompromittierung eines Knotens missbraucht werden.
Ein GCP-Dienstkonto (unterscheidbar 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 Compute Engine-Standarddienstkonto.
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. Es verfügt jedoch über 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 von 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-Service-Konto 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 Compute Engine-Standarddienstkonto, wenn Sie einen neuen Cluster erstellen.

Auswirkung

Instanzen erhalten automatisch den cloud-platform scope Plattformbereich, um vollen Zugriff auf alle Google Cloud APIs zu ermöglichen. Dadurch werden die IAM-Berechtigungen der Instanz vollständig durch die IAM-Rollen des Dienstkontos bestimmt.
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 Servicekontos erlaubt ist. Um Abhilfe zu schaffen, befolgen Sie Empfehlung 5.2.2. Die hier aufgeführten Rollen des Servicekontos sind die minimal erforderlichen, um den Cluster auszuführen.
Zusätzliche Rollen können erforderlich sein, um von einer privaten Instanz der Google Container Registry (GCR) abzurufen.

Prüfung

Verwendung der Google Cloud Console:
  1. Gehen Sie zu Kubernetes Engine, indem Sie die Google Cloud Console Kubernetes Engine-Seite besuchen
  2. Wählen Sie den zu testenden Cluster aus und klicken Sie auf jeden Node-Pool, um die Detailseite des Node-Pools aufzurufen.
Stellen Sie sicher, dass für jeden Knotenpool das Dienstkonto unter der Überschrift Sicherheit nicht auf Standard gesetzt ist. Überprüfen Sie, ob die dem Dienstkonto zugewiesenen Berechtigungen die minimal erforderlichen für den Clusterbetrieb sind:
  1. Gehen Sie zu IAM, indem Sie die Google Cloud Console IAM-Seite besuchen
  2. Stellen Sie sicher, dass jedes Cluster-Dienstkonto aus der Liste der Dienstkonten nur die folgenden Rollen hat:
    • Protokollschreiber
    • Überwachungsmetriken-Schreiber
    • Überwachungsanzeige
Verwendung der Befehlszeile:
Um einen bestehenden Cluster zu überprüfen, definieren Sie zuerst 4 Variablen für Node-Pool, Cluster-Name, Standort und Projekt, und führen Sie dann den folgenden Befehl aus:
gcloud container node-pools describe $NODE_POOL --cluster $CLUSTER_NAME -- location $LOCATION --project $PROJECT_ID --format json | jq '.config.serviceAccount'
Die Ausgabe des obigen Befehls gibt das spezifische Dienstkonto zurück, das 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:
Um ein Dienstkonto mit minimalen Berechtigungen zu erstellen:
  1. Gehen Sie zu Dienstkonten, indem Sie die Google Cloud Console Service Accounts-Seite besuchen.
  2. Klicken Sie auf DIENSTKONTO ERSTELLEN.
  3. Geben Sie die Details des Dienstkontos ein.
  4. Klicken Sie auf ERSTELLEN UND FORTFAHREN.
  5. Fügen Sie innerhalb der Berechtigungen des Dienstkontos die folgenden Rollen hinzu:
    • Protokollschreiber
    • Überwachungsmetriken-Schreiber
    • Überwachungsanzeige
  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 Service-Konto verwendet:
  1. Gehen Sie zu Kubernetes Engine, indem Sie die Google Cloud Console Kubernetes Engine-Seite besuchen.
  2. Klicken Sie auf den Clusternamen, in dem der Node-Pool gestartet wird.
  3. Klicken Sie auf NODE POOL HINZUFÜGEN.
  4. Wählen Sie innerhalb der Node-Pool-Details die Sicherheitsunterüberschrift aus und wählen Sie unter Identitätsstandards das minimal privilegierte Dienstkonto aus dem Dropdown-Menü Dienstkonto aus.
  5. Klicken Sie auf ERSTELLEN, 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:
Um ein Dienstkonto mit minimalen Berechtigungen zu erstellen
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 Service-Konto 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.