Benutzerdefinierte Einschränkungen erstellen und verwalten

Mit der Organisationsrichtlinie vonGoogle 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 vonGoogle Cloud und untergeordnete Elemente dieser Ressourcen in der Ressourcenhierarchie vonGoogle Cloud gelten. Sie können Organisationsrichtlinien auf Organisations-, Ordner- oder Projektebene erzwingen.

Die Organisationsrichtlinie bietet vordefinierte Einschränkungen für verschiedeneGoogle Cloud -Dienste. Wenn Sie jedoch mehr Kontrolle über Ihre Organisationsrichtlinien haben möchten, können Sie benutzerdefinierte Organisationsrichtlinien erstellen.

In diesem Dokument wird beschrieben, wie Sie als Administrator benutzerdefinierte Organisationsrichtlinien aufrufen, erstellen und verwalten können. Mit benutzerdefinierten Organisationsrichtlinien können Sie die Steuerung der spezifischen Felder anpassen, die durch Ihre Organisationsrichtlinien eingeschränkt werden.

Hinweise

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für die Organisation zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwalten 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 können die Verwaltung von Organisationsrichtlinien delegieren, indem Sie der Rollenbindung des Administrators für Organisationsrichtlinien IAM-Bedingungen hinzufügen. Wenn Sie steuern möchten, für welche Ressourcen ein Hauptkonto Organisationsrichtlinien verwalten kann, können Sie die Rollenbindung an ein bestimmtes Tag binden. Weitere Informationen finden Sie unter Einschränkungen verwenden.

Benutzerdefinierte Einschränkungen

Eine benutzerdefinierte Einschränkung wird in einer YAML-Datei definiert, in der die Ressourcen, Methoden, Bedingungen und Aktionen angegeben werden, die der Einschränkung unterliegen. Benutzerdefiniertes Constraint-Verhalten und unterstützte Parameter sind für jeden Dienst spezifisch. Bedingungen für benutzerdefinierte Einschränkungen werden mithilfe der Common Expression Language (CEL) definiert.

Benutzerdefinierte Beschränkung einrichten

Sie können eine benutzerdefinierte Einschränkung erstellen und für die Verwendung in Organisationsrichtlinien mithilfe der Google Cloud Console oder der Google Cloud CLI einrichten.

Console

So erstellen Sie eine benutzerdefinierte Einschränkung:

  1. Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.

    Zu den Organisationsrichtlinien

  2. Wählen Sie in der Projektauswahl das Projekt aus, für das Sie die Organisationsrichtlinie festlegen möchten.
  3. Klicken Sie auf Benutzerdefinierte Einschränkung.
  4. Geben Sie im Feld Anzeigename einen nutzerfreundlichen Namen für die Einschränkung ein. Dieser Name wird in Fehlermeldungen verwendet und kann zur Identifizierung und Fehlerbehebung genutzt werden. Verwenden Sie keine personenidentifizierbaren Informationen oder vertraulichen Daten in Anzeigenamen, da dieser Name in Fehlermeldungen angezeigt werden kann. Dieses Feld kann bis zu 200 Zeichen enthalten.
  5. Geben Sie im Feld Einschränkungs-ID den gewünschten Namen für die neue benutzerdefinierte Einschränkung ein. Eine benutzerdefinierte Einschränkung darf nur Buchstaben (Groß- und Kleinbuchstaben) oder Ziffern enthalten, z. B. custom.disableGkeAutoUpgrade. Dieses Feld kann bis zu 70 Zeichen enthalten. Das Präfix (custom.) wird nicht gezählt, z. B. organizations/123456789/customConstraints/custom. Die Einschränkungs-ID darf keine personenidentifizierbaren Informationen oder vertraulichen Daten enthalten, da diese in Fehlermeldungen angezeigt werden können.
  6. Geben Sie im Feld Beschreibung eine für Menschen lesbare Beschreibung der Einschränkung ein. Diese Beschreibung wird als Fehlermeldung verwendet, wenn gegen die Richtlinie verstoßen wird. Geben Sie Details dazu an, warum der Richtlinienverstoß aufgetreten ist und wie er behoben werden kann. Nehmen Sie keine personenidentifizierbaren Informationen oder vertraulichen Daten in die Beschreibung auf, da sie in Fehlermeldungen preisgegeben werden könnten. Dieses Feld kann bis zu 2.000 Zeichen enthalten.
  7. Wählen Sie im Feld Ressourcentyp den Namen der Google Cloud REST-Ressource aus, die das Objekt und das Feld enthält, das Sie einschränken möchten, z. B. container.googleapis.com/NodePool. Die meisten Ressourcentypen unterstützen bis zu 20 benutzerdefinierte Einschränkungen. Wenn Sie versuchen, weitere benutzerdefinierte Einschränkungen zu erstellen, schlägt der Vorgang fehl.
  8. Wählen Sie unter Methode erzwingen aus, ob die Einschränkung für eine REST-Methode CREATE oder sowohl für die Methoden CREATE als auch UPDATE erzwungen werden soll. Wenn Sie die Einschränkung mit der Methode UPDATE für eine Ressource erzwingen, die gegen die Einschränkung verstößt, werden Änderungen an dieser Ressource durch die Organisationsrichtlinie blockiert, sofern die Änderung den Verstoß nicht behebt.
  9. Nicht alle Google Cloud Dienste unterstützen beide Methoden. Unter Unterstützte Dienste finden Sie die unterstützten Methoden für jeden Dienst.

  10. Klicken Sie zum Definieren einer Bedingung auf Bedingung bearbeiten.
    1. Erstellen Sie im Bereich Bedingung hinzufügen eine CEL-Bedingung, die auf eine unterstützte Dienstressource verweist, z. B. resource.management.autoUpgrade == false. Dieses Feld kann bis zu 1.000 Zeichen enthalten. Weitere Informationen zur Verwendung von CEL finden Sie unter Common Expression Language. Weitere Informationen zu den Dienstressourcen, die Sie in Ihren benutzerdefinierten Einschränkungen verwenden können, finden Sie unter Von benutzerdefinierten Einschränkungen unterstützte Dienste.
    2. Klicken Sie auf Speichern.
  11. Wählen Sie unter Aktion aus, ob die ausgewertete Methode zugelassen oder abgelehnt werden soll, wenn die Bedingung erfüllt ist.
  12. Die Aktion „Verweigern“ bedeutet, dass der Vorgang zum Erstellen oder Aktualisieren der Ressource blockiert wird, wenn die Bedingung als „true“ ausgewertet wird.

    Die Aktion „Zulassen“ bedeutet, dass der Vorgang zum Erstellen oder Aktualisieren der Ressource nur zulässig ist, wenn die Bedingung als „true“ ausgewertet wird. Alle anderen Fälle, die nicht explizit in der Bedingung aufgeführt sind, werden blockiert.

  13. Klicken Sie auf Einschränkung erstellen.
  14. Wenn Sie in jedes Feld einen Wert eingegeben haben, wird rechts die entsprechende YAML-Konfiguration für diese benutzerdefinierte Einschränkung angezeigt.

gcloud

  1. Zum Erstellen einer benutzerdefinierten Beschränkung erstellen Sie eine YAML-Datei im folgenden Format:
  2.       name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
          resourceTypes:
          - RESOURCE_NAME
          methodTypes:
          - CREATE
          condition: "CONDITION"
          actionType: ACTION
          displayName: DISPLAY_NAME
          description: DESCRIPTION
          

    Ersetzen Sie Folgendes:

    • ORGANIZATION_ID: Ihre Organisations-ID, z. B. 123456789.
    • CONSTRAINT_NAME: der Name, den Sie für Ihre neue benutzerdefinierte Einschränkung verwenden möchten. Eine benutzerdefinierte Einschränkung darf nur Buchstaben (Groß- und Kleinbuchstaben) oder Ziffern enthalten, z. B. custom.disableGkeAutoUpgrade. Dieses Feld kann bis zu 70 Zeichen enthalten.
    • RESOURCE_NAME: Der vollständig qualifizierte Name der Google Cloud-Ressource, die das Objekt und das Feld enthält, das Sie einschränken möchten. Beispiel: container.googleapis.com/NodePool.
    • CONDITION: eine CEL-Bedingung, die für eine Darstellung einer unterstützten Dienstressource geschrieben wird. Dieses Feld kann bis zu 1.000 Zeichen enthalten. Beispiel: "resource.management.autoUpgrade == false".
    • ACTION: Aktion, die ausgeführt werden soll, wenn condition erfüllt ist. Mögliche Werte sind ALLOW und DENY.
    • Die Aktion „allow“ bedeutet, dass der Vorgang zum Erstellen oder Aktualisieren der Ressource zulässig ist, wenn die Bedingung als „true“ ausgewertet wird. Das bedeutet auch, dass jeder andere Fall als der, der explizit in der Bedingung aufgeführt ist, blockiert wird.

      Die Aktion „Verweigern“ bedeutet, dass der Vorgang zum Erstellen oder Aktualisieren der Ressource blockiert wird, wenn die Bedingung als „true“ ausgewertet wird.

    • DISPLAY_NAME: Ein nutzerfreundlicher Name für die Einschränkung. Dieses Feld kann bis zu 200 Zeichen enthalten.
    • DESCRIPTION: Eine nutzerfreundliche Beschreibung der Einschränkung, die als Fehlermeldung angezeigt werden soll, wenn die Richtlinie verletzt wird. Dieses Feld kann bis zu 2.000 Zeichen enthalten.
  3. Nachdem Sie die YAML-Datei für eine neue benutzerdefinierte Einschränkung erstellt haben, müssen Sie sie einrichten, um sie für Organisationsrichtlinien in Ihrer Organisation verfügbar zu machen. Verwenden Sie zum Einrichten einer benutzerdefinierten Einschränkung den Befehl gcloud org-policies set-custom-constraint:
  4.         gcloud org-policies set-custom-constraint CONSTRAINT_PATH
          

    Ersetzen Sie CONSTRAINT_PATH durch den vollständigen Pfad zu Ihrer benutzerdefinierten Einschränkungsdatei. Beispiel: /home/user/customconstraint.yaml.

    Nach Abschluss des Vorgangs sind Ihre benutzerdefinierten Einschränkungen als Organisationsrichtlinien in der Liste der Organisationsrichtlinien von Google Cloud verfügbar.

  5. Prüfen Sie mit dem Befehl gcloud org-policies list-custom-constraints, ob die benutzerdefinierte Einschränkung vorhanden ist:
  6.       gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
          

    Ersetzen Sie ORGANIZATION_ID durch die ID Ihrer Organisationsressource.

    Weitere Informationen finden Sie unter Organisationsrichtlinien aufrufen.

Benutzerdefinierte Einschränkung aktualisieren

Sie können eine benutzerdefinierte Einschränkung aktualisieren, indem Sie die Einschränkung in derGoogle Cloud -Konsole bearbeiten oder eine neue YAML-Datei erstellen und den set-custom-constraint-gcloud CLI-Befehl noch einmal verwenden. Benutzerdefinierte Einschränkungen werden nicht versioniert. Die vorhandene benutzerdefinierte Einschränkung wird also überschrieben. Wenn die benutzerdefinierte Einschränkung bereits erzwungen wird, wird die aktualisierte benutzerdefinierte Einschränkung sofort wirksam.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.

    Zu den Organisationsrichtlinien

  2. Klicken Sie oben auf der Seite auf die Projektauswahl.

  3. Wählen Sie in der Projektauswahl die Ressource aus, für die Sie die Organisationsrichtlinie aktualisieren möchten.

  4. Wählen Sie auf der Seite Organisationsrichtlinien die Einschränkung aus, die Sie bearbeiten möchten, um die Seite Richtliniendetails für diese Einschränkung zu öffnen.

  5. Klicken Sie auf  Einschränkung bearbeiten.

  6. Nehmen Sie Änderungen am Anzeigenamen, der Beschreibung, der Erzwingungsmethode, der Bedingung und der Aktion vor. Sie können die Constraint-ID oder den Ressourcentyp nach dem Erstellen des Constraints nicht mehr ändern.

  7. Klicken Sie auf Änderungen speichern.

gcloud

  1. Rufen Sie die aktuelle benutzerdefinierte Einschränkung mit dem Befehl gcloud org-policies describe-custom-constraint ab.

    gcloud org-policies describe-custom-constraint CONSTRAINT_NAME \
      --organization=ORGANIZATION_ID \
      --format=FORMAT > PATH
    

    Ersetzen Sie Folgendes:

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

    • CONSTRAINT_NAME: der Name der benutzerdefinierten Einschränkung, z. B. custom.disableGkeAutoUpgrade.

    • FORMAT: Das Format für die Zulassungsrichtlinie. Verwenden Sie json oder yaml.

    • PATH: Der Pfad zu einer neuen Ausgabedatei für die benutzerdefinierte Beschränkung.

  2. Ändern Sie die lokale Kopie der benutzerdefinierten Einschränkung, um die Änderungen widerzuspiegeln, die Sie am Anzeigenamen, an der Beschreibung, an der Erzwingungsmethode, an der Bedingung und an der Aktion vornehmen möchten. Sie können die Einschränkungs-ID oder den Ressourcentyp nicht mehr ändern, nachdem die Einschränkung erstellt wurde.

  3. Nachdem Sie die YAML-Datei für Ihre benutzerdefinierte Einschränkung aktualisiert haben, müssen Sie sie einrichten, um sie für Organisationsrichtlinien in Ihrer Organisation verfügbar zu machen. Verwenden Sie zum Einrichten einer benutzerdefinierten Einschränkung den Befehl gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    

    Ersetzen Sie CONSTRAINT_PATH durch den vollständigen Pfad zu Ihrer benutzerdefinierten Einschränkungsdatei.

Nach Abschluss des Updates ist die aktualisierte benutzerdefinierte Beschränkung für Ihre Organisationsrichtlinien verfügbar. Wenn die ursprüngliche Einschränkung bereits erzwungen wird, tritt die aktualisierte Einschränkung sofort in Kraft.

Benutzerdefinierte Einschränkung löschen

Sie können eine benutzerdefinierte Einschränkung über die Google Cloud Console oder die Google Cloud CLI löschen.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.

    Zu den Organisationsrichtlinien

  2. Klicken Sie oben auf der Seite auf die Projektauswahl.

  3. Wählen Sie in der Projektauswahl die Ressource aus, für die Sie die Organisationsrichtlinie löschen möchten.

  4. Wählen Sie auf der Seite Organisationsrichtlinien die Einschränkung aus, die Sie löschen möchten, um die Seite Richtliniendetails für diese Einschränkung zu öffnen.

  5. Klicken Sie auf  Löschen.

  6. Klicken Sie auf Löschen, um zu bestätigen, dass Sie die Einschränkung löschen möchten.

gcloud

Verwenden Sie zum Löschen einer benutzerdefinierten Beschränkung den gcloud CLI-Befehl org-policies delete-custom-constraint:

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_NAME \
  --organization=ORGANIZATION_ID

Ersetzen Sie Folgendes:

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

  • CONSTRAINT_NAME: der Name der benutzerdefinierten Einschränkung. Beispiel: custom.disableGkeAutoUpgrade.

Die Ausgabe sieht in etwa so aus:

Deleted custom constraint [organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade]

Wenn Sie eine benutzerdefinierte Einschränkung löschen, sind alle Richtlinien, die mit dieser Einschränkung erstellt wurden, weiterhin vorhanden, werden aber ignoriert. Sie können keine weitere benutzerdefinierte Einschränkung mit demselben Namen wie eine gelöschte benutzerdefinierte Einschränkung erstellen.

Änderungen an Organisationsrichtlinien testen und analysieren

Wir empfehlen, alle Änderungen an Ihren Organisationsrichtlinien zu testen und durchzugehen, um zu sehen, wie sich die Änderungen auf Ihre Umgebung auswirken.

Mit dem Policy Simulator für Organisationsrichtlinien können Sie die Auswirkungen einer Einschränkung und Organisationsrichtlinie auf Ihre aktuelle Umgebung nachvollziehen. Mit diesem Tool können Sie alle Ressourcenkonfigurationen prüfen, um zu sehen, wo Verstöße auftreten, bevor die Richtlinie in Ihrer Produktionsumgebung erzwungen wird. Eine ausführliche Anleitung finden Sie unter Änderungen an Organisationsrichtlinien mit dem Richtliniensimulator testen.

Wenn Sie die aktuellen Auswirkungen kennen, können Sie eine Organisationsrichtlinie im Probelaufmodus erstellen, um die Auswirkungen und potenziellen Verstöße einer Richtlinie in den nächsten 30 Tagen zu ermitteln. Eine Organisationsrichtlinie im Probelaufmodus ist eine Art von Organisationsrichtlinie, bei der Verstöße gegen die Richtlinie protokolliert werden, die entsprechenden Aktionen jedoch nicht abgelehnt werden. Sie können eine Organisationsrichtlinie im Probebetriebsmodus aus einer benutzerdefinierten Einschränkung mit der Google Cloud -Konsole oder der Google Cloud CLI erstellen. Eine ausführliche Anleitung finden Sie unter Organisationsrichtlinie im Probelaufmodus erstellen.

Benutzerdefinierte Organisationsrichtlinie erzwingen

Nachdem eine benutzerdefinierte Einschränkung eingerichtet wurde, funktioniert sie identisch mit vordefinierten booleschen Einschränkungen. Google Cloud prüft benutzerdefinierte Einschränkungen zuerst, wenn ermittelt wird, ob eine Nutzeranfrage zulässig ist. Wenn die Anfrage durch eine der benutzerdefinierten Organisationsrichtlinien abgelehnt wird, wird sie abgelehnt. Anschließend wird Google Cloudauf vordefinierte Organisationsrichtlinien geprüft,die für diese Ressource erzwungen werden.

Sie können eine Beschränkung erzwingen, indem Sie eine Organisationsrichtlinie erstellen, die darauf verweist, und diese Organisationsrichtlinie dann auf eine Ressource von Google Cloud anwenden.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.

    Zu den Organisationsrichtlinien

  2. Wählen Sie in der Projektauswahl das Projekt aus, für das Sie die Organisationsrichtlinie festlegen möchten.
  3. Wählen Sie auf der Seite Organisationsrichtlinien die gewünschte Beschränkung aus, um die Seite Richtliniendetails aufzurufen.
  4. Zum Konfigurieren der Organisationsrichtlinie für diese Ressource klicken Sie auf Richtlinie verwalten.
  5. Wählen Sie auf der Seite Richtlinie bearbeiten die Option Richtlinie der übergeordneten Ressource überschreiben aus.
  6. Klicken Sie auf Regel hinzufügen.
  7. Wählen Sie im Abschnitt Erzwingung aus, ob diese Organisationsrichtlinie erzwungen wird.
  8. Klicken Sie optional auf Bedingung hinzufügen, um die Organisationsrichtlinie von einem Tag abhängig zu machen. Wenn Sie einer Organisationsrichtlinie eine bedingte Regel hinzufügen, müssen Sie mindestens eine unbedingte Regel hinzufügen, da die Richtlinie sonst nicht gespeichert werden kann. Weitere Informationen finden Sie unter Organisationsrichtlinie mit Tags festlegen.
  9. Klicken Sie auf Änderungen testen, um die Auswirkungen der Organisationsrichtlinie zu simulieren. Weitere Informationen finden Sie unter Änderungen an Organisationsrichtlinien mit dem Richtliniensimulator testen.
  10. Klicken Sie auf Probelaufrichtlinie festlegen, um die Organisationsrichtlinie im Probelaufmodus zu erzwingen. Weitere Informationen finden Sie unter Organisationsrichtlinie im Probelaufmodus erstellen.
  11. Nachdem Sie überprüft haben, ob die Organisationsrichtlinie im Probelaufmodus wie vorgesehen funktioniert, legen Sie die aktive Richtlinie fest, indem Sie auf Richtlinie festlegen klicken.

gcloud

  1. Wenn Sie eine Organisationsrichtlinie mit booleschen Regeln erstellen möchten, erstellen Sie eine YAML-Richtliniendatei, die auf die Beschränkung verweist:
  2.         name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
            spec:
              rules:
              - enforce: true
            
            dryRunSpec:
              rules:
              - enforce: true
            
          

    Ersetzen Sie Folgendes:

    • PROJECT_ID: das Projekt, für das Sie die Einschränkung erzwingen möchten.
    • CONSTRAINT_NAME: der Name, den Sie für Ihre benutzerdefinierte Beschränkung definiert haben. Beispiel: custom.disableGkeAutoUpgrade.
  3. Führen Sie den folgenden Befehl mit dem Flag dryRunSpec aus, um die Organisationsrichtlinie im Probelaufmodus zu erzwingen:
  4.         gcloud org-policies set-policy POLICY_PATH \
              --update-mask=dryRunSpec
          

    Ersetzen Sie POLICY_PATH durch den vollständigen Pfad zur YAML-Datei Ihrer Organisationsrichtlinie. Es kann bis zu 15 Minuten dauern, bis die Richtlinie wirksam wird.

  5. Nachdem Sie überprüft haben, ob die Organisationsrichtlinie im Probelaufmodus wie vorgesehen funktioniert, legen Sie die aktive Richtlinie mit dem Befehl org-policies set-policy und dem Flag spec fest:
  6.         gcloud org-policies set-policy POLICY_PATH \
              --update-mask=spec
          

    Ersetzen Sie POLICY_PATH durch den vollständigen Pfad zur YAML-Datei Ihrer Organisationsrichtlinie. Es kann bis zu 15 Minuten dauern, bis die Richtlinie wirksam wird.

Beispieleinschränkung

Sie können benutzerdefinierte Einschränkungen ähnlich den vordefinierten Einschränkungen von Google definieren. Eine typische YAML-Datei für benutzerdefinierte Einschränkungen sieht so aus:

name: organizations/1234567890123/customConstraints/custom.disableGkeAutoUpgrade
resourceTypes:
- container.googleapis.com/NodePool
methodTypes:
- CREATE
- UPDATE
condition: "resource.management.autoUpgrade == false"
actionType: ALLOW
displayName: Disable GKE auto upgrade
description: Only allow GKE NodePool resource to be created or updated if
AutoUpgrade is not enabled where this custom constraint is enforced.

Common Expression Language

Der Organization Policy Service verwendet die Common Expression Language (CEL), um Bedingungen für benutzerdefinierte Einschränkungen auszuwerten. CEL ist eine Open-Source-Sprache ohne Turing-Vollständigkeit, die eine gemeinsame Semantik für die Auswertung von Ausdrücken implementiert.

Jeder Dienst, der benutzerdefinierte Einschränkungen unterstützt, stellt eine bestimmte Gruppe seiner Ressourcen und die Felder dieser Ressourcen zur Verfügung. Die verfügbaren Felder sind stark typisiert und können direkt von benutzerdefinierten Einschränkungen referenziert werden.

Sie können CEL-Bedingungen erstellen, die sich je nach Feldtyp auf Felder von Dienstressourcen beziehen. Der Organization Policy Service unterstützt eine Teilmenge von CEL-Datentypen, ‑Ausdrücken und ‑Makros. In den folgenden Abschnitten werden die verfügbaren Datentypen sowie gängige Ausdrücke und Makros aufgeführt, die mit ihnen funktionieren.

Details dazu, welche Ausdrücke und Makros für die einzelnen Dienste verfügbar sind, finden Sie unter Von benutzerdefinierten Einschränkungen unterstützte Dienste.

Im folgenden JSON-Beispiel sehen Sie die einzelnen potenziellen Feldtypen, auf die Sie mit benutzerdefinierten Einschränkungen verweisen können:

{
  "integerValue": 1,
  "stringValue": "A text string",
  "booleanValue": true,
  "nestedValue": {
    "nestedStringValue": "Another text string"
  },
  "listValue": ["foo", "bar"],
  "mapValue": {
    "costCenter": "123"
  }
}

Für jeden CEL-Ausdruck wird die benutzerdefinierte Einschränkung erzwungen, wenn die Bedingung als true ausgewertet wird. Sie können Ausdrücke mit „and“ (&&) und „or“ (||) kombinieren, um eine komplexe Abfrage zu erstellen. Wenn Sie die YAML- oder JSON-Datei für Ihre benutzerdefinierte Einschränkung erstellen, setzen Sie die vollständige Abfrage in doppelte Anführungszeichen (").

Ganzzahl

Bei Ganzzahlfeldern wie integerValue im vorherigen Beispiel können Vergleichsoperatoren in Bedingungen verwendet werden. Beispiel:

resource.integerValue == 1
resource.integerValue > 5
resource.integerValue < 10

String

Stringfelder wie stringValue im vorherigen Beispiel können mit einem Stringliteral, einem regulären Ausdruck oder einem CEL-Ausdruck ausgewertet werden. Beispiel:

resource.stringValue == "abc"
// stringValue is exactly "abc".

resource.stringValue.matches("dev$")
// stringValue matches a regular expression, which specifies the string ends
// with the word "dev".

resource.stringValue.startsWith("startValue")
// stringValue starts with "startValue".

resource.stringValue.endsWith("endValue")
// stringValue ends with "endValue".

resource.stringValue.contains("fooBar")
// stringValue contains "fooBar".

Auf verschachtelte Felder wie nestedStringValue im vorherigen Beispiel muss mit dem vollständigen Pfad verwiesen werden. Beispiel:

resource.nestedValue.nestedStringValue == "foo"
// nestedValue contains the object nestedStringValue, which has a value of "foo".

Boolesch

Boolesche Felder wie booleanValue im vorherigen Beispiel enthalten einen booleschen Wert, der entweder true oder false ist.

Liste

Listenfelder wie listValue im vorherigen Beispiel können anhand der Größe der Liste, des Inhalts der Liste und der Frage ausgewertet werden, ob ein bestimmtes Element irgendwo in der Liste vorhanden ist.

Beispiel:

resource.listValue.size() >= 1 && resource.listValue[0] == "bar"
// listValue has size greater than or equal to one, and the first element is "bar".

resource.listValue.exists(value, value == "foo")
// listValue has at least one element that is exactly "foo".

resource.listValue.all(value, value.contains("foo"))
// listValue is a list of values that are all exactly "foo".

Karte

Zuordnungsfelder wie mapValue im vorherigen Beispiel sind Schlüssel/Wert-Paare, die anhand des Vorhandenseins und des Werts bestimmter Elemente ausgewertet werden können.

Beispiel:

has(resource.mapValue.foo) && resource.mapValue.foo == "bar"
// mapValue contains the key "foo", and that key has the value "bar".

Fehlerbehebung bei benutzerdefinierten Einschränkungen

In den folgenden Abschnitten werden häufige Probleme beim Erstellen benutzerdefinierter Einschränkungen und mögliche Lösungen für diese Probleme beschrieben.

Fehler bei Methodentypen

Benutzerdefinierte Einschränkungen werden mit einer Liste von Methoden erstellt, die erzwungen werden sollen. In der Regel ist das entweder CREATE oder sowohl CREATE als auch UPDATE. Wenn Sie einen Methodentyp angeben, der von einer Ressource nicht unterstützt wird, z. B. die Methode UPDATE für Compute Engine-Bildressourcen, können Sie die benutzerdefinierte Einschränkung nicht speichern.

Nicht ausgewertete Tags

Tags für Organisations-, Ordner- oder Projektressourcen werden von benutzerdefinierten Einschränkungen unterstützt. Weitere Informationen dazu, welche Dienste Tags unterstützen, finden Sie in der dienstspezifischen Dokumentation.

Dienstübergreifende Einschränkungen

Einige Dienste wie Compute Engine umfassen eine große Anzahl von zugehörigen Ressourcen. Die Fehlermeldung für einen benutzerdefinierten Organisationsrichtlinienverstoß wird angezeigt, wenn der Verstoß auftritt, auch wenn die benutzerdefinierte Einschränkung für einen anderen Dienst gilt.

Eine Dataproc-Aktion kann beispielsweise durch eine benutzerdefinierte Einschränkung für Compute Engine-Ressourcen blockiert werden.

CEL-Fehler beheben

Der Organization Policy Service kompiliert und validiert die von Ihnen erstellten Bedingungen und gibt einen Fehler zurück, wenn die Bedingung nicht syntaktisch korrekt ist. Wenn Sie keine benutzerdefinierte Einschränkung erstellen oder speichern können, ist wahrscheinlich ein ungültiger CEL-Syntaxfehler aufgetreten, den Sie zuerst beheben müssen.

In der Google Cloud Konsole werden Fehler aufgrund ungültiger CEL-Syntax mit dem Symbol Fehler gekennzeichnet. Wenn Sie den Mauszeiger auf dieses Symbol bewegen, wird eine Kurzinfo mit weiteren Informationen zum Syntaxfehler angezeigt.

Bestimmte Bedingungen werden möglicherweise kompiliert, führen aber zu einem Fehler, wenn Google Cloudversucht, die Einschränkungen zu erzwingen. Wenn Sie beispielsweise eine Einschränkung mit einer Bedingung einrichten, die versucht, auf einen Listenindex oder einen Mapschlüssel zuzugreifen, der nicht vorhanden ist, schlägt die Einschränkung fehl und gibt zum Zeitpunkt der Erzwingung einen Fehler zurück. Jeder Versuch, die Ressource zu erstellen, wird blockiert.

In den folgenden Abschnitten werden häufige CEL-Fehler und mögliche Problemumgehungen für diese Fehler beschrieben.

Ungültiger Ausdruck oder Typkonflikt

Eine Bedingung, die mit ungültigen Ausdrücken oder Typkonflikten erstellt wird, gibt einen Fehler zurück, wenn Sie versuchen, die benutzerdefinierte Einschränkung einzurichten. Angenommen, Sie haben die folgende ungültige benutzerdefinierte Einschränkung, bei der ein String mit einer Ganzzahl verglichen wird:

name: organizations/1234567890123/customConstraints/custom.badConfig
resourceTypes:
- dataproc.googleapis.com/Cluster
methodTypes:
- CREATE
- UPDATE
condition: "resource.config.masterConfig.numInstances == 'mismatch'"
actionType: ALLOW
displayName: Number of instances is a string
description: Demonstrate that type mismatches cause an error.

Wenn Sie versuchen, diese Einschränkung mit der Google Cloud CLI einzurichten, wird ein Fehler ausgegeben:

ERROR: (gcloud.org-policies.set-custom-constraint) INVALID_ARGUMENT: Custom constraint condition [resource.config.masterConfig.numInstances == "mismatch"] is invalid. Error: ERROR: <input>:1:15: found no matching overload for '_==_' applied to '(int, string)' (candidates: (%A0, %A0))
 | resource.config.masterConfig.numInstances == "mismatch"
 | ..........................................^.

In der Google Cloud Konsole werden Fehler aufgrund ungültiger CEL-Syntax mit dem Symbol Fehler gekennzeichnet. Wenn Sie den Mauszeiger auf dieses Symbol bewegen, wird eine Kurzinfo mit weiteren Informationen zum Syntaxfehler angezeigt.

Der Organisationsrichtliniendienst kompiliert und validiert von Ihnen erstellte Bedingungen und gibt einen Fehler zurück, wenn die Bedingung nicht syntaktisch korrekt ist. Unter bestimmten Bedingungen kann es jedoch sein, dass die Kompilierung erfolgt, aber ein Fehler zurückgegeben wird, wenn Google Cloud versucht, die Einschränkungen zu erzwingen. Wenn Sie beispielsweise eine Einschränkung mit einer Bedingung einrichten, die versucht, auf einen Listenindex oder einen Mapschlüssel zuzugreifen, der nicht vorhanden ist, schlägt die Einschränkung fehl und gibt zum Zeitpunkt der Erzwingung einen Fehler zurück. Jeder Versuch, die Ressource zu erstellen, wird blockiert.

Wenn Sie Bedingungen erstellen, die von Listen- oder Kartenelementen abhängen, empfehlen wir, die Bedingung mit einer Prüfung zu beginnen, die sicherstellt, dass die Bedingung in allen Fällen gültig ist. Verwenden Sie beispielsweise list.size(), bevor Sie auf ein bestimmtes Listenelement verweisen, oder has(), bevor Sie auf ein Kartenelement verweisen.

Unterstützte Dienste

Für jeden Dienst wird die Gruppe der benutzerdefinierten Einschränkungsfelder definiert, die verwendet werden können, um Organisationsrichtlinien für die Dienstressourcen zu erzwingen. Eine Liste der Dienste, die benutzerdefinierte Einschränkungen unterstützen, finden Sie unter Von benutzerdefinierten Einschränkungen unterstützte Dienste.

Weitere Informationen zum Einrichten eines Scanners für Organisationsrichtlinien finden Sie unter Ergebnisse zu Sicherheitslücken in Organisationsrichtlinien.

Erzwingen von Pflicht-Tags für Ressourcen

Sie können obligatorische Tags für Ressourcen mit einer benutzerdefinierten Organisationsrichtlinie erzwingen. Wenn Sie obligatorische Tags erzwingen, können Sie nur Ressourcen erstellen, die den Tagging-Richtlinien Ihrer Organisation entsprechen. Das bedeutet, dass Ressourcen an die Tag-Werte für die in der Richtlinie angegebenen obligatorischen Tag-Schlüssel gebunden sind. Weitere Informationen finden Sie unter Benutzerdefinierte Einschränkung zum Erzwingen von Tags einrichten.

Nächste Schritte