Auf dieser Seite erfahren Sie, wie Sie bestimmte Vorgänge für GKE-Ressourcen (Google Kubernetes Engine) in Ihrer Organisation mithilfe von benutzerdefinierten Einschränkungen im Google Cloud Organisationsrichtliniendienst einschränken. Mit Einschränkungen können Sie dafür sorgen, dass Clusterressourcen bestimmte Anforderungen erfüllen, damit Ihre Organisation Compliance-, Sicherheits- und Richtlinienanforderungen erfüllt. Auf dieser Seite erfahren Sie, wie Sie benutzerdefinierte Einschränkungen erstellen und auf Ihre Clusterressourcen anwenden.
Diese Seite richtet sich an Sicherheitsexperten, die dafür sorgen, dass ihre Organisation Compliance-, Sicherheits- und Richtlinienanforderungen erfüllt, indem sie bestimmte Konfigurationen für Clusterressourcen einschränken oder vorschreiben. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud -Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und ‑Aufgaben.
Machen Sie sich vor dem Lesen dieser Seite mit Organisationsrichtlinien vertraut.
Informationen zu Organisationsrichtlinien und Beschränkungen
Mit der Organisationsrichtlinie von Google Cloud können Sie die Ressourcen Ihrer Organisation zentral und programmatisch steuern. Als Administrator für Organisationsrichtlinien können Sie eine Organisationsrichtlinie definieren, also eine Reihe von Einschränkungen, die für Ressourcen von Google Cloud und untergeordnete Elemente dieser Ressourcen in der Google Cloud Ressourcenhierarchie gelten. Sie können Organisationsrichtlinien auf Organisations-, Ordner- oder Projektebene erzwingen.
Die Organisationsrichtlinie bietet vordefinierte Einschränkungen für verschiedene Google Cloud -Dienste. Wenn Sie jedoch eine detailliertere, anpassbare Steuerung der spezifischen Felder wünschen, die in Ihren Organisationsrichtlinien eingeschränkt werden, können Sie auch benutzerdefinierte Einschränkungen erstellen und diese benutzerdefinierten Einschränkungen in einer benutzerdefinierten Organisationsrichtlinie verwenden.
Unterstützte Ressourcen in GKE
Für GKE können Sie benutzerdefinierte Einschränkungen für die Methoden CREATE
oder UPDATE
für jedes Feld in der Ressource Cluster
oder NodePool
der Google Kubernetes Engine API v1 außer für reine Ausgabefelder und die folgenden Felder erstellen:
projects.locations.clusters.masterAuth.clientKey
projects.locations.clusters.masterAuth.password
Übernahme von Richtlinien
Standardmäßig werden Richtlinien von den Nachfolgerelementen der Ressourcen übernommen, für die Sie die Richtlinie erzwingen. Wenn Sie beispielsweise eine Richtlinie für einen Ordner erzwingen, erzwingtGoogle Cloud die Richtlinie für alle Projekte in dem Ordner. Weitere Informationen zu diesem Verhalten und zu dessen Änderung finden Sie unter Regeln für die Evaluierung der Hierarchie.
Preise
Organisationsrichtlinien und Einschränkungen werden kostenlos angeboten.
Hinweise
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 diesen Task 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 update
ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
-
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Organization Policy Administrator (
roles/orgpolicy.policyAdmin
) für Ihre Google Cloud -Organisation zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen von Einschränkungen und zum Erzwingen von Organisationsrichtlinien benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
- Sie müssen Ihre Organisations-ID kennen.
Benutzerdefinierte Einschränkung erstellen
Zum Erstellen einer neuen benutzerdefinierten Einschränkung definieren Sie die Einschränkung in einer YAML-Datei und wenden die benutzerdefinierte Einschränkung in Ihrer Organisation mithilfe der Google Cloud CLI an.
Erstellen Sie eine YAML-Datei für die benutzerdefinierte Einschränkung:
name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_NAME resourceTypes: - container.googleapis.com/RESOURCE_NAME methodTypes: - METHOD1 - METHOD2 condition: "resource.OBJECT_NAME.FIELD_NAME == VALUE" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
Dabei gilt:
ORGANIZATION_ID
: Ihre Organisations-ID, z. B.123456789
.CONSTRAINT_NAME
: Name, den Sie für Ihre neue benutzerdefinierte Einschränkung verwenden möchten. Eine benutzerdefinierte Einschränkung muss mitcustom.
beginnen und darf nur Großbuchstaben, Kleinbuchstaben oder Ziffern enthalten, z. B.custom.enableGkeAutopilot
. Die maximale Länge dieses Feldes beträgt 70 Zeichen, das Präfix wird nicht gezählt (z. B.organizations/123456789/customConstraints/custom.
).RESOURCE_NAME
: Name (nicht der URI) der REST API-Ressource in GKE, die das Objekt und das Feld enthält, das Sie einschränken möchten Beispiel:Cluster
oderNodePool
METHOD1,METHOD2,...
: Liste der RESTful-Methoden, für die die Einschränkung erzwungen werden soll KannCREATE
oderCREATE
undUPDATE
seincondition
: Die Bedingung zur Validierung der Anfrage in Common Expression Language (CEL) Dieses Feld hat eine maximale Länge von 1000 Zeichen. Der Ausdruck muss die folgenden Felder enthalten und unterstützt logische Operatoren wie&&
und||
:OBJECT_NAME
: Name des GKE API-Objekts, das Sie einschränken möchten, in pascalCase-Formatierung. Beispiel:privateClusterConfig
FIELD_NAME
: Name des GKE API-Felds, das Sie einschränken möchten, in pascalCase-Formatierung. Beispiel:enablePrivateNodes
VALUE
: Wert des Felds. Verwenden Sie für boolesche Feldertrue
oderfalse
. Verwenden Sie für Stringfelder"STRING"
.
ACTION
: Aktion, die ausgeführt werden soll, wenncondition
erfüllt ist. Dies kann entwederALLOW
oderDENY
sein.DISPLAY_NAME
: Ein nutzerfreundlicher Name für die Einschränkung. Dieses Feld hat eine maximale Länge von 200 Zeichen.DESCRIPTION
: Eine nutzerfreundliche Beschreibung der Einschränkung, die als Fehlermeldung angezeigt werden soll, wenn die Richtlinie verletzt wird Dieses Feld hat eine maximale Länge von 2000 Zeichen.
Wenden Sie die benutzerdefinierte Einschränkung an:
gcloud org-policies set-custom-constraint PATH_TO_FILE
Ersetzen Sie
PATH_TO_FILE
durch den Dateipfad der Definition der benutzerdefinierten Einschränkung.Prüfen Sie, ob die benutzerdefinierte Einschränkung vorhanden ist:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Die Ausgabe sieht etwa so aus:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= ...
Benutzerdefinierte Einschränkung erzwingen
Um die neue benutzerdefinierte Einschränkung zu erzwingen, erstellen Sie eine Organisationsrichtlinie, die auf die Einschränkung verweist, und wenden Sie die Organisationsrichtlinie an.
Erstellen Sie eine YAML-Datei für die Organisationsrichtlinie:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true
Dabei gilt:
RESOURCE_HIERARCHY
: Speicherort der neuen Richtlinie, der sich auf den Erzwingungsbereich auswirkt. Verwenden Sie dieGoogle Cloud -Ressourcenhierarchie als Orientierungshilfe. Wenn Sie die Richtlinie beispielsweise in einem bestimmten Projekt erzwingen möchten, verwenden Sieprojects/PROJECT_ID
. Verwenden Sieorganizations/ORGANIZATION_ID
, um die Richtlinie in einer bestimmten Organisation zu erzwingen.POLICY_NAME
: Name der neuen Richtlinie.
Erzwingen Sie die Richtlinie:
gcloud org-policies set-policy PATH_TO_POLICY
Ersetzen Sie
PATH_TO_POLICY
durch den Pfad zu Ihrer Richtliniendefinitionsdatei.Prüfen Sie, ob die Richtlinie vorhanden ist:
gcloud org-policies list \ --RESOURCE_FLAG=RESOURCE_ID
Ersetzen Sie Folgendes:
RESOURCE_FLAG
: die Google Cloud Ressource, für die Sie die Richtlinie erzwungen haben. Beispiel:project
oderfolder
.RESOURCE_ID
: ID der Ressource, in der Sie die Richtlinie erzwungen haben. Beispiel: Ihre Google Cloud Ordner-ID.
Eine Liste der Argumente finden Sie unter
gcloud org-policies list
.Die Ausgabe sieht etwa so aus:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG iam.disableWorkloadIdentityClusterCreation - SET CO3UkJAGEOj1qsQB custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= custom.enableBinAuth - SET CJfKiZUGEJju7LUD
Beispiel: Benutzerdefinierte Einschränkung erstellen und Richtlinie erzwingen
Im folgenden Beispiel werden eine benutzerdefinierte Einschränkung und eine Richtlinie erstellt, bei der alle neuen Cluster in einem bestimmten Projekt Autopilot-Cluster sein müssen.
Bevor Sie beginnen, sollten Sie Folgendes kennen:
- Ihre Organisations-ID.
- Eine Projekt-ID
Einschränkung erstellen
Speichern Sie die folgende Datei als
constraint-enable-autopilot.yaml
:name: organizations/ORGANIZATION_ID/customConstraints/custom.enableGkeAutopilot resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.autopilot.enabled == false" actionType: DENY displayName: Enable GKE Autopilot description: All new clusters must be Autopilot clusters.
Dies definiert eine Einschränkung, bei der für jeden neuen Cluster der Vorgang abgelehnt wird, wenn der Clustermodus nicht Autopilot ist.
Wenden Sie die Einschränkung an:
gcloud org-policies set-custom-constraint ~/constraint-enable-autopilot.yaml
Prüfen Sie, ob die Einschränkung vorhanden ist:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Die Ausgabe sieht etwa so aus:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.enableGkeAutopilot DENY CREATE container.googleapis.com/Cluster Enable GKE Autopilot ...
Richtlinie erstellen
Speichern Sie die folgende Datei als
policy-enable-autopilot.yaml
:name: projects/PROJECT_ID/policies/custom.enableGkeAutopilot spec: rules: - enforce: true
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.Wenden Sie die Richtlinie an:
gcloud org-policies set-policy ~/policy-enable-autopilot.yaml
Prüfen Sie, ob die Richtlinie vorhanden ist:
gcloud org-policies list --project=PROJECT_ID
Die Ausgabe sieht etwa so aus:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E=
Warten Sie nach dem Anwenden der Richtlinie etwa zwei Minuten, bis Google Cloud die Richtlinie durchgesetzt hat.
Richtlinie testen
Versuchen Sie, im Projekt einen GKE Standard-Cluster zu erstellen:
gcloud container clusters create org-policy-test \
--project=PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--num-nodes=1
Ersetzen Sie Folgendes:
PROJECT_ID
: Die Projekt-ID des Projekts der Richtlinie.CONTROL_PLANE_LOCATION
: Der Compute Engine-Standort der Steuerungsebene Ihres Clusters. Geben Sie für regionale Cluster eine Region und für zonale Cluster eine Zone an.
Die Ausgabe sieht so aus:
Operation denied by custom org policies: ["customConstraints/custom.enableGkeAutopilot": "All new clusters must be Autopilot clusters."]
Beispiele für benutzerdefinierte Einschränkungen für häufige Anwendungsfälle
Die folgenden Beispiele enthalten die Syntax einiger benutzerdefinierter Einschränkungen, die für Sie nützlich sein könnten, z. B. das Erzwingen der Identitätsföderation von Arbeitslasten für GKE für neue Cluster. Wenn Sie diese Beispiele verwenden möchten, passen Sie sie nach Bedarf an Ihren speziellen Anwendungsfall an. Wenden Sie sie dann auf Ihre Organisation an. Folgen Sie dazu der Anleitung auf dieser Seite.
Beschreibung | Einschränkungssyntax |
---|---|
Clustererstellung nur zulassen, wenn die Binärautorisierung aktiviert ist |
name: organizations/ORGANIZATION_ID/customConstraints/custom.gkeBinaryAuthorization resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.binaryAuthorization.enabled == true || resource.binaryAuthorization.evaluationMode=='PROJECT_SINGLETON_POLICY_ENFORCE'" action: ALLOW displayName: Enable GKE Binary Authorization description: All new clusters must enable Binary Authorization. |
Automatische Knotenupgrades für neue Knotenpools nicht deaktivieren |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableAutoUpgrade resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE condition: "resource.management.autoUpgrade == true" actionType: ALLOW displayName: Enable node auto-upgrade description: All node pools must have node auto-upgrade enabled. |
Workload Identity-Föderation für GKE für neue Cluster aktivieren |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableWorkloadIdentity resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "has(resource.workloadIdentityConfig.workloadPool) || resource.workloadIdentityConfig.workloadPool.size() > 0" actionType: ALLOW displayName: Enable Workload Identity on new clusters description: All new clusters must use Workload Identity. |
Cloud Logging auf vorhandenen Clustern nicht deaktivieren |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableLogging resourceTypes: - container.googleapis.com/Cluster methodTypes: - UPDATE condition: "resource.loggingService == 'none'" actionType: DENY displayName: Do not disable Cloud Logging description: You cannot disable Cloud Logging on existing GKE cluster. |
Erstellen oder Aktualisieren von Standardknotenpools nur zulassen, wenn Legacy-Metadatenendpunkte deaktiviert sind |
name: organizations/ORGANIZATION_ID/customConstraints/custom.nodeConfigMetadata resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE - UPDATE condition: "'disable-legacy-endpoints' in resource.config.metadata && resource.config.metadata['disable-legacy-endpoints'] == 'true'" actionType: ALLOW displayName: Disable legacy metadata endpoints description: You can only create or update node pools if you disable legacy metadata endpoints. Dieses Beispiel für die Einschränkung zeigt Ihnen, wie Sie eine benutzerdefinierte Einschränkung für einen Kartenwert festlegen. Das Feld |
Nächste Schritte
- Detaillierte Informationen zu Einschränkungen
- Weitere Optionen zum Anpassen von Richtlinien
- Informationen zum Erhöhen der Sicherheit Ihres Clusters
- Informationen zum Deaktivieren des schreibgeschützten Kubelet-Ports in GKE-Clustern
- Organisationsrichtlinien basierend auf Tags festlegen
- Informationen dazu, wie Sie erzwingen, dass VM Manager auf allen GKE-Knoten aktiviert ist