In Google Kubernetes Engine-Clustern (GKE) im Autopilot-Modus werden verschiedene Sicherheitsrichtlinien erzwungen, die viele gängige Angriffsvektoren verhindern sollen. In diesem Dokument wird beschrieben, wie Plattformadministratoren einige oder alle dieser Autopilot-Richtlinien in Standardclustern erzwingen können. Sie können die Erzwingung von Clusterrichtlinien in Autopilot-Clustern nicht deaktivieren, da Autopilot-Cluster für einen höheren GKE-Sicherheitsstatus konzipiert sind.
In Standardclustern können Sie bestimmte Richtlinien jederzeit aktivieren und deaktivieren. Organisationsadministratoren können festlegen, ob bestimmte Autopilot-Richtlinien deaktiviert werden können, indem sie eine benutzerdefinierte Einschränkung in der Organisation, dem Ordner oder dem Projekt erzwingen. Mit diesen vordefinierten Richtlinien können Sie Sicherheits-Best Practices erzwingen, ohne komplexe RBAC-Rollen und ‑Bindungen schreiben zu müssen. Viele der Richtlinien auf Clusterebene können Ihnen helfen, die Sicherheit Ihres Clusters zu verbessern, auch wenn Sie den Autopilot-Modus für den Cluster oder die Arbeitslasten nicht verwenden möchten. Weitere Informationen zu den verfügbaren Autopilot-Clusterrichtlinien finden Sie im Abschnitt Unterstützte Richtlinien.
Hinweise zur Erzwingung von Autopilot-Clusterrichtlinien
Während diese Richtlinien in Autopilot-Clustern immer erzwungen werden, sind in Standardclustern oft vorhandene Arbeitslasten und Knotenpools vorhanden, die möglicherweise gegen von Ihnen erzwungene Richtlinien verstoßen. Bevor Sie eine Richtlinie in Ihrem Cluster erzwingen oder deaktivieren, sollten Sie Folgendes beachten:
- Änderungen gelten nur für neue Arbeitslasten: Wenn Sie eine Richtlinie aktivieren, die für Arbeitslasten gilt, werden die Änderungen nur auf Pods angewendet, die nach der Aktivierung der Richtlinie erstellt oder geändert werden. Bestehende Pods, die gegen die Richtlinie verstoßen, können weiterhin ausgeführt werden. Bevor Sie eine Richtlinie aktivieren, sollten Sie die vorhandenen Arbeitslasten im Cluster prüfen, um sicherzustellen, dass sie der Einschränkung der Richtlinie entsprechen.
- Knotenpoolrichtlinien gelten für alle Knoten: Wenn Sie eine Richtlinie aktivieren, die für die Knotenpools in Ihrem Standardcluster gilt, gelten die Einschränkungen sowohl für neue als auch für vorhandene Knotenpools. Wenn ein vorhandener Knotenpool gegen die Richtlinie verstößt, schlägt der Clusteraktualisierungsvorgang fehl. Wenn Sie beispielsweise versuchen, die
no-standard-node-pools-Richtlinie in einem Cluster zu aktivieren, der einen vorhandenen nutzerverwalteten Knotenpool hat, schlägt der Vorgang fehl. Bevor Sie eine Knotenpoolrichtlinie aktivieren, sollten Sie die vorhandenen Knotenpools im Cluster prüfen. - Durch Aktivieren aller Richtlinien wird der Autopilot-Modus aktiviert: Wenn Sie alle verfügbaren Autopilot-Richtlinien aktivieren (einschließlich der Richtlinie, die von Nutzern verwaltete Knotenpools verhindert), können alle Arbeitslasten in Ihrem Cluster nur im Autopilot-Modus ausgeführt werden. Das bedeutet, dass alle Ihre Arbeitslasten den Sicherheitseinschränkungen für Autopilot und allen Clusterrichtlinien entsprechen müssen. Mit diesem Ansatz können Sie den gesamten Standardcluster im Autopilot-Modus ausführen und bei Bedarf bestimmte Richtlinien deaktivieren.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Bestimmte Autopilot-Richtlinien in Ihrem Cluster aktivieren
Verwenden Sie die gcloud CLI oder die GKE API, um bestimmte Richtlinien zu aktivieren, wenn Sie einen Standardcluster erstellen oder aktualisieren. Wenn Sie der Liste der Richtlinien, die GKE im Cluster erzwingt, bestimmte Autopilot-Clusterrichtlinien hinzufügen möchten, verwenden Sie das Flag --autopilot-cluster-policies mit dem Befehl gcloud container clusters create oder dem Befehl gcloud container clusters update.
Das folgende Beispiel zeigt, wie Sie Richtlinien in einem vorhandenen Cluster aktivieren:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--autopilot-cluster-policies=AUTOPILOT_POLICIES
Ersetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Standardclusters.CONTROL_PLANE_LOCATION: Die Region oder Zone der Cluster-Steuerungsebene, z. B.us-central1oderus-central1-a.AUTOPILOT_POLICIES: Eine durch Kommas getrennte Liste von Autopilot-Clusterrichtlinien, die im Cluster erzwungen werden sollen, z. B.no-system-mutation,no-system-impersonation. Sie müssen mindestens eine unterstützte Richtlinie angeben. Die von Ihnen angegebenen Richtlinien werden an die Liste der Richtlinien angehängt, die GKE bereits im Cluster erzwingt. Informationen zum Deaktivieren der Erzwingung einer Richtlinie finden Sie im Abschnitt Bestimmte Autopilot-Richtlinien in Ihrem Cluster deaktivieren.
Wenn der Befehl mit einer Fehlermeldung fehlschlägt, die mit Bad value [invalid
policy]: beginnt, prüfen Sie, ob alle angegebenen Richtliniennamen in der Liste der unterstützten Richtlinien enthalten sind.
Durchsetzung von Richtlinien überprüfen
Nachdem Sie eine bestimmte Richtlinie aktiviert haben, können Sie prüfen, ob die Erzwingung funktioniert, indem Sie versuchen, eine Ressource zu erstellen, die gegen diese Richtlinie verstößt. Wenn Sie beispielsweise die no-system-mutation-Richtlinie aktivieren, können Sie versuchen, einen Pod im Namespace kube-system zu erstellen. GKE blockiert den Vorgang zur Pod-Erstellung und zeigt eine Fehlermeldung an, die in etwa so aussieht:
Error from server (Forbidden): pods is forbidden: User cannot create resource "pods" in API group "" in the namespace "kube-system": GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "kube-system" is managed and the request's verb "create" is denied
Bestimmte Autopilot-Richtlinien in Ihrem Cluster deaktivieren
Sie können die Richtlinien für Autopilot-Cluster jederzeit deaktivieren.
Das Deaktivieren einer Richtlinie ist nützlich, wenn sich Ihre Sicherheitsanforderungen geändert haben oder ein vorhandener Workflow unterbrochen wurde, als Sie die Richtlinie aktiviert haben. Verwenden Sie das Flag --remove-autopilot-cluster-policies mit dem Befehl gcloud container clusters update, um eine Richtlinie aus der Liste der Richtlinien zu entfernen, die von GKE im Cluster erzwungen werden:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--remove-autopilot-cluster-policies=AUTOPILOT_POLICIES
Sie müssen mindestens einen Wert für das Flag --remove-autopilot-cluster-policies angeben. Wenn Sie dieses Flag ohne Wert angeben, schlägt der Vorgang fehl.
Wenn der Befehl mit einer Fehlermeldung fehlschlägt, die mit Bad value [invalid
policy]: beginnt, prüfen Sie, ob alle angegebenen Richtliniennamen in der Liste der unterstützten Richtlinien enthalten sind.
Autopilot-Clusterrichtlinien in Organisationen erzwingen
Organisationsadministratoren können die Verwendung dieser Clusterrichtlinien in einer Organisation, einem Projekt oder einem Ordner mit benutzerdefinierten Einschränkungen für Organisationsrichtlinien erzwingen. Diese zusätzliche Maßnahme kann Ihnen helfen, das unbefugte oder unbeabsichtigte Entfernen erforderlicher Clusterrichtlinien aus einem Cluster zu verhindern. Verwenden Sie das Feld ClusterPolicyConfig in Ihrer benutzerdefinierten Einschränkung, wie im folgenden Beispiel:
name: organizations/ORGANIZATION_ID/customConstraints/custom.autopilotClusterPolicies
resourceTypes:
- container.googleapis.com/Cluster
methodTypes:
- CREATE
- UPDATE
condition: "resource.ClusterPolicyConfig.no_system_mutation == true && resource.ClusterPolicyConfig.no_system_impersonation == true"
actionType: ALLOW
displayName: Autopilot policies in Standard clusters.
description: For all new and existing Standard clusters, enable the no_system_mutation and no_system_impersonation Autopilot cluster policies. For more information, see https://docs.cloud.google.com/kubernetes-engine/security/autopilot-cluster-policies-standard.
Unterstützte Richtlinien
Jede der in Standardclustern verfügbaren Autopilot-Richtlinien implementiert eine oder mehrere Best Practices für die Sicherheit auf Clusterebene.
Richtlinien wie no-system-mutation, no-system-impersonation und no-unsafe-webhooks tragen dazu bei, die Sicherheit jedes GKE-Clusters zu verbessern, auch wenn Sie den Autopilot-Modus nicht verwenden möchten.
In der folgenden Tabelle werden die Autopilot-Richtlinien beschrieben, die Sie in Standardclustern aktivieren können. Außerdem wird erläutert, wie Sie sich auf die Durchsetzung von Richtlinien vorbereiten können:
| Richtlinienname | Beschreibung | Was Sie vor der Aktivierung tun sollten |
|---|---|---|
no-system-mutation |
Verhindern Sie das Erstellen oder Ändern von Ressourcen in GKE-Systemnamespaces (z. B. kube-system). |
Verschieben Sie Ihre Pods aus System-Namespaces in Ihre eigenen Namespaces. |
no-system-impersonation |
Verhindert Versuche, sich als Systemnutzer auszugeben, und verhindert die Erstellung von CertificateSigningRequests mit Systemidentitäten. | Suchen Sie nach unautorisierten CertificateSigningRequests, die für Systemidentitäten generiert wurden. Wenn Sie genehmigte unautorisierte CertificateSigningRequests finden, rotieren Sie die Anmeldedaten Ihres Clusters, um die Zertifikate ungültig zu machen. |
no-unsafe-webhooks |
Verhindert, dass Zulassungs-Webhooks und Richtlinien kritische Systemressourcen wie Node-Objekte, PersistentVolumes oder CertificateSigningRequests abfangen. |
Mit dem Recommender-Dienst können Sie Webhooks identifizieren, die Systemressourcen abfangen. Wenn Sie Webhooks finden, ändern Sie die Webhook-Konfiguration. Weitere Informationen finden Sie unter Bei Verwendung von Webhooks für die Stabilität der Steuerungsebene sorgen. |
no-standard-node-pools |
Verhindern, dass vom Nutzer verwaltete Knotenpools, einschließlich manuell erstellter und automatisch erstellter Knotenpools, im Cluster vorhanden sind. Der Cluster darf nur Autopilot-Knotenpools enthalten. | Löschen Sie alle vorhandenen Knotenpools, die keine Autopilot-Knotenpools sind, einschließlich des Standardknotenpools, der mit dem Cluster erstellt wurde. |
Nächste Schritte
- Weitere Informationen zum Erhöhen der Clustersicherheit
- Weitere Informationen zu anderen Autopilot-Sicherheitsmaßnahmen