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.
HinweisStandardmäß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:
- Gehen Sie zu Kubernetes Engine, indem Sie die Google Cloud Console Kubernetes Engine-Seite besuchen
- 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:
- Gehen Sie zu IAM, indem Sie die Google Cloud Console IAM-Seite besuchen
- 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.logWriterroles/monitoring.metricWriterroles/monitoring.viewer
Wiederherstellung
Verwendung der Google Cloud Console:
Um ein Dienstkonto mit minimalen Berechtigungen zu erstellen:
- Gehen Sie zu Dienstkonten, indem Sie die Google Cloud Console Service Accounts-Seite besuchen.
- Klicken Sie auf DIENSTKONTO ERSTELLEN.
- Geben Sie die Details des Dienstkontos ein.
- Klicken Sie auf ERSTELLEN UND FORTFAHREN.
- Fügen Sie innerhalb der Berechtigungen des Dienstkontos die folgenden Rollen hinzu:
ProtokollschreiberÜberwachungsmetriken-SchreiberÜberwachungsanzeige
- 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 Service-Konto verwendet:
- Gehen Sie zu Kubernetes Engine, indem Sie die Google Cloud Console Kubernetes Engine-Seite besuchen.
- Klicken Sie auf den Clusternamen, in dem der Node-Pool gestartet wird.
- Klicken Sie auf NODE POOL HINZUFÜGEN.
- 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.
- Klicken Sie auf ERSTELLEN, um den Node-Pool zu starten.

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>
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.
|
