Benutzerdefinierte Einschränkungen erstellen und verwalten

Auf dieser Seite erfahren Sie, wie Sie benutzerdefinierte Einschränkungen in Ihrer mit GKE verknüpften Clusterumgebung aktivieren und verwenden.Mit dem Organisationsrichtliniendienst von Google Cloudkönnen Sie Ressourcenkonfigurationen verwalten und Sicherheitsvorkehrungen in Ihrer Cloud-Umgebung erstellen.

Übersicht

Mit benutzerdefinierten Organisationsrichtlinien können Sie detaillierte Ressourcenrichtlinien für GKE-Multi-Cloud-Umgebungen erstellen, um die spezifischen Sicherheits- und Compliance-Anforderungen Ihrer Organisation zu erfüllen. Sie können auch Organisationsrichtlinien im Probelaufmodus erstellen, um neue Richtlinien zu testen, ohne dass sich dies auf Ihre Produktionslasten auswirkt.

Weitere Informationen zu Organisationsrichtlinien finden Sie unter Einführung in den Organisationsrichtliniendienst.

Hinweise

Informieren Sie sich über Folgendes, bevor Sie beginnen:

Übernahme von Richtlinien

Standardmäßig werden Organisationsrichtlinien von den Nachfolgerelementen der Ressourcen übernommen, für die Sie die Richtlinie erzwingen. Wenn Sie beispielsweise eine Richtlinie für eine Organisation erzwingen, erzwingt Google Cloud die Richtlinie für alle Projekte in der Organisation. Weitere Informationen zur Übernahme von Richtlinien und zum Ändern von Auswertungsregeln finden Sie unter Regeln für die Evaluierung der Hierarchie.

Beschränkungen

Beachten Sie vor dem Erstellen benutzerdefinierter Einschränkungen die folgenden Einschränkungen:

  • Benutzerdefinierte Einschränkungen können nur für die Methoden CREATE oder UPDATE für an GKE angehängte Clusterressourcen erzwungen werden.
  • Neu erzwungene benutzerdefinierte Einschränkungen gelten nicht automatisch für vorhandene Ressourcen. Sie müssen vorhandene Ressourcen aktualisieren, um die Einschränkung anzuwenden. Wenn Sie nach vorhandenen Ressourcen suchen möchten, die aktualisiert werden müssen, können Sie eine Probelaufrichtlinie für die Organisation erzwingen.
  • Wenn Sie Einschränkungen erstellen und Organisationsrichtlinien erzwingen möchten, benötigen Sie die IAM-Rolle Organization Policy Administrator (roles/orgpolicy.policyAdmin) in Ihrer Google Cloud Organisation. Weitere Informationen zu den Berechtigungen, die zum Verwalten von Organisationsrichtlinien mit benutzerdefinierten Einschränkungen erforderlich sind, finden Sie unter Erforderliche Rollen.

Preise

Organisationsrichtlinien und benutzerdefinierte Einschränkungen werden kostenlos angeboten.

Benutzerdefinierte Einschränkungen erstellen

Benutzerdefinierte Einschränkungen müssen mithilfe der Felder in der API-Ressourcenspezifikation für AttachedCluster angegeben werden, ausgenommen Felder, die als „Nur Ausgabe“ beschrieben sind.

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. Diese Einschränkung muss die spezifische Richtlinie umfassen, die Sie für die mit GKE verknüpften Clusterressourcen erzwingen möchten.

  1. Erstellen Sie eine YAML-Datei für die benutzerdefinierte Einschränkung:

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - gkemulticloud.googleapis.com/AttachedCluster
    methodTypes: 
    - CREATE
    condition: \"CONDITION\"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION
    

    Ersetzen Sie Folgendes:

    • ORGANIZATION_ID : Ihre Organisations-ID, z. B. 123456789.

    • CONSTRAINT_NAME : Name der neuen benutzerdefinierten Einschränkung. Eine benutzerdefinierte Einschränkung muss mit custom. beginnen und darf nur Großbuchstaben, Kleinbuchstaben oder Ziffern enthalten. Beispiel: custom.allowClusterCreateIfAnnotationPresent Die maximale Länge dieses Feldes beträgt 70 Zeichen, das Präfix wird nicht gezählt (z. B. organizations/123456789/customConstraints/custom).

    • CONDITION : Eine Bedingung, die für eine Darstellung einer angehängten Clusterressource geschrieben wird. Bedingungen werden in der Common Expression Language (CEL) geschrieben. Dieses Feld hat eine maximale Länge von 1.000 Zeichen. Beispiel: Bedingung: "key" in resource.annotations && resource.annotations.key == "created-by".

    • ACTION : Aktion, die ausgeführt werden soll, wenn die Bedingung erfüllt ist. Dies kann entweder ALLOW oder DENY sein.

    • DISPLAY_NAME : Ein Anzeigename für die Einschränkung. Dieses Feld hat eine maximale Länge von 200 Zeichen.

    • DESCRIPTION : Eine Beschreibung der Einschränkung, die als Fehlermeldung angezeigt werden soll, wenn die Richtlinie verletzt wird,z. B. "Allow new clusters only when certain annotations are set." Dieses Feld hat eine maximale Länge von 2.000 Zeichen.

    Weitere Informationen zum Erstellen einer benutzerdefinierten Einschränkung finden Sie unter Benutzerdefinierte Einschränkungen definieren.

Einschränkung mit Ihren Ressourcen verknüpfen

Nachdem Sie die YAML-Datei für eine neue benutzerdefinierte Einschränkung erstellt haben, müssen Sie sie einrichten, um sie für Organisationsrichtlinien verfügbar zu machen.

  1. Verwenden Sie zum Einrichten einer benutzerdefinierten Einschränkung den Befehl gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    Ersetzen Sie PATH_TO_FILE durch den Pfad zur YAML-Definition der benutzerdefinierten Einschränkung.

  2. Prüfen Sie mit dem Befehl gcloud org-policies list-custom-constraints, ob die benutzerdefinierte Einschränkung erstellt wurde:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    In der Ausgabe werden die erstellten Richtlinien aufgeführt:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AttachedCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

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.

  1. Erstellen Sie eine YAML-Datei für die Organisationsrichtlinie:

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    Ersetzen Sie Folgendes:

    • RESOURCE_HIERARCHY: Speicherort der neuen Richtlinie, der sich auf den Erzwingungsbereich auswirkt. Verwenden Sie die Google Cloud Ressourcenhierarchie als Orientierungshilfe. Wenn Sie die Richtlinie beispielsweise in einem bestimmten Projekt erzwingen möchten, verwenden Sie projects/PROJECT_ID. Verwenden Sie organizations/ORGANIZATION_ID, um die Richtlinie in einer bestimmten Organisation zu erzwingen.

    • POLICY_NAME: Name der neuen Richtlinie.

  2. Erzwingen Sie die Richtlinie:

    gcloud org-policies set-policy PATH_TO_POLICY
    

    Ersetzen Sie PATH_TO_POLICY durch den Pfad zu Ihrer Richtliniendefinitionsdatei.

  3. 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: ein Projekt oder eine Organisation.

    • RESOURCE_ID: ID der Ressource, in der Sie die Richtlinie erzwungen haben. Beispiel: Ihre Projekt-ID oder Organisations-ID.

    Die Ausgabe sieht etwa so aus:

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

Richtlinie testen

Testen Sie die Organisationsrichtlinie, indem Sie einen EKS-Cluster in einem eingeschränkten Projekt registrieren.

  1. EKS-Cluster in einem eingeschränkten Projekt registrieren

    gcloud container attached clusters register CLUSTER_NAME \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-project=PROJECT_NUMBER \
      --platform-version=PLATFORM_VERSION \
      --distribution=eks \
      --issuer-url=ISSUER_URL \
      --context=KUBECONFIG_CONTEXT \
      --kubeconfig=KUBECONFIG_PATH
    
    
  2. Die Ausgabe sieht etwa so aus:

    ERROR: (gcloud.container.attached.clusters.register) FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."]
    
    '@type': type.googleapis.com/google.rpc.ErrorInfo
    domain: googleapis.com
    metadata:
      customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent
    service: gkemulticloud.googleapis.com
    reason: CUSTOM_ORG_POLICY_VIOLATION