Benutzerdefinierte Einschränkungen erstellen und verwalten

Auf dieser Seite erfahren Sie, wie Sie benutzerdefinierte Einschränkungen in Ihrer GKE on AWS-Umgebung 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

Bevor Sie beginnen, sollten Sie sich mit den folgenden Themen vertraut machen.

Ü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 Methode CREATE oder UPDATE für GKE on AWS-Ressourcen 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 den API-Ressourcenspezifikationen für AwsCluster und AwsNodepool angegeben werden, mit Ausnahme der 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 Ihre GKE on AWS-Ressourcen erzwingen möchten.

Erstellen Sie eine YAML-Datei, um eine benutzerdefinierte Einschränkung für Ihren Cluster zu definieren:

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

Verwenden Sie die folgende YAML-Konfiguration, um eine benutzerdefinierte Einschränkung für Ihren Knotenpool zu definieren:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsNodePool
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 Google Cloud Ressource 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/AwsCluster
    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 in einem eingeschränkten Projekt einen neuen AWS-Cluster erstellen.

  1. AWS-Cluster in einem eingeschränkten Projekt erstellen

    gcloud container aws clusters create CLUSTER_NAME \
      --aws-region AWS_REGION \
      --location GOOGLE_CLOUD_LOCATION \
      --cluster-version CLUSTER_VERSION \
      --fleet-project FLEET_PROJECT \
      --vpc-id VPC_ID \
      --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
      --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
      --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
      --role-arn API_ROLE_ARN \
      --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
      --admin-users ADMIN_USERS_LIST \
      --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
      --iam-instance-profile CONTROL_PLANE_PROFILE \
      --tags "Name=CLUSTER_NAME-cp"
    
  2. Die Ausgabe sieht etwa so aus:

    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