Änderungen an Organisationsrichtlinien mit Policy Simulator testen

Mit dem Policy Simulator für Organisationsrichtlinien können Sie sich eine Vorschau der Auswirkungen einer neuen benutzerdefinierten Einschränkung oder Organisationsrichtlinie ansehen, die eine benutzerdefinierte Einschränkung erzwingt, bevor sie in Ihrer Produktionsumgebung erzwungen wird. Policy Simulator stellt eine Liste von Ressourcen bereit, die gegen die vorgeschlagene Richtlinie verstoßen, bevor sie erzwungen wird. So können Sie diese Ressourcen neu konfigurieren, Ausnahmen anfordern oder den Bereich Ihrer Organisationsrichtlinie ändern, ohne dass Ihre Entwickler beeinträchtigt werden oder Ihre Umgebung beeinträchtigt wird.

Auf dieser Seite wird beschrieben, wie Sie eine Änderung an einer Organisationsrichtlinie mit Policy Simulator testen. Außerdem wird erläutert, wie die Ergebnisse der Simulation interpretiert werden und wie die getestete Organisationsrichtlinie bei Bedarf angewendet wird.

Hinweise

  • Legen Sie in der Google Cloud CLI das Projekt fest, das Sie für API-Aufrufe verwenden möchten:

    gcloud config set project PROJECT_ID

    Ersetzen Sie PROJECT_ID durch den Namen oder die ID des Projekts.

  • Policy Simulator and Resource Manager APIs aktivieren.

    Aktivieren Sie die APIs

  • Optional: Sehen Sie sich eine Einführung in den Organisationsrichtliniendienst an.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle OrgPolicy-Simulator-Administrator (roles/policysimulator.orgPolicyAdmin) für die Organisation zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Ausführen von Simulationen und Zugriff auf Simulationen benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Ausführen und Aufrufen von Simulationen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um Simulationen auszuführen und darauf zuzugreifen:

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.get
  • orgpolicy.policies.list
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.listResource
  • cloudasset.assets.listOrgPolicy
  • policysimulator.orgPolicyViolationsPreviews.list
  • policysimulator.orgPolicyViolationsPreviews.get
  • policysimulator.orgPolicyViolationsPreviews.create
  • policysimulator.orgPolicyViolations.list

Möglicherweise können Sie diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Richtlinienänderung testen

Sie können eine Änderung an einer benutzerdefinierten Einschränkung, an einer Organisationsrichtlinie, die eine benutzerdefinierte Einschränkung erzwingt, oder an beiden gleichzeitig testen.

  1. Erstellen Sie zum Testen einer benutzerdefinierten Einschränkung eine JSON- oder YAML-Datei, in der die zu testende benutzerdefinierte Einschränkung definiert ist.

    Eine benutzerdefinierte Einschränkung, die das Erstellen von Google Kubernetes Engine-Clusterressourcen einschränkt, wenn die Binärautorisierung nicht aktiviert ist, sollte in etwa so aussehen:

    name: "organizations/ORGANIZATION_ID/customConstraints/custom.EnforceGKEBinaryAuthz"
    resource_types: "container.googleapis.com/Cluster"
    method_types: CREATE
    condition: "resource.binaryAuthorization.enabled == true"
    action_type: ALLOW
    

    Ersetzen Sie ORGANIZATION_ID durch Ihre Organisations-ID, z. B. 1234567890123.

    Weitere Informationen zum Erstellen von benutzerdefinierten Einschränkungen finden Sie unter Benutzerdefinierte Einschränkungen erstellen und verwalten.

  2. Erstellen Sie zum Testen einer Organisationsrichtlinie, die eine benutzerdefinierte Einschränkung erzwingt, eine JSON- oder YAML-Datei, in der die zu testende Organisationsrichtlinie definiert ist.

    Beispiel: Eine Organisationsrichtlinie, die das Erstellen von Google Kubernetes Engine-Clusterressourcen einschränkt, wenn die Binärautorisierung nicht aktiviert ist, sollte in etwa so aussehen:

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
        - enforce: true
    

    Ersetzen Sie ORGANIZATION_ID durch Ihre Organisations-ID, z. B. 1234567890123.

  3. Wenn Sie eine Organisationsrichtlinie testen möchten, die eine benutzerdefinierte Einschränkung basierend auf dem Vorhandensein eines bestimmten Tags bedingt erzwingt, erstellen Sie eine JSON- oder YAML-Datei, in der die zu testende Organisationsrichtlinie definiert ist.

    Die folgende Organisationsrichtlinie schränkt beispielsweise das Erstellen von Google Kubernetes Engine-Clusterressourcen ein, für die die Binärautorisierung nicht aktiviert ist. Ausgenommen hiervon sind Ressourcen, denen das Tag env=dev angehängt ist.

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
        - condition:
            expression: resource.matchTag('env', 'dev')
          enforce: false
        - enforce: true
    

    Ersetzen Sie ORGANIZATION_ID durch Ihre Organisations-ID, z. B. 1234567890123.

    Weitere Informationen zu bedingten Organisationsrichtlinien finden Sie unter Organisationsrichtlinie mit Tags festlegen.

  4. Erstellen Sie zum Testen des Löschens einer Organisationsrichtlinie, die eine benutzerdefinierte Einschränkung erzwingt, eine JSON- oder YAML-Datei, die die Organisationsrichtlinie definiert, aber keine Regeln festlegt und die Richtlinie von der übergeordneten Ressource übernimmt.

    Die folgende Organisationsrichtlinie würde beispielsweise das Löschen einer vorhandenen benutzerdefinierten Einschränkung custom.EnforceGKEBinaryAuthz simulieren.

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        inheritFromParent: true
    
  1. Führen Sie den folgenden Befehl aus, um die Änderung an der benutzerdefinierten Einschränkung, der Organisationsrichtlinie oder beidem zu simulieren:

    gcloud beta policy-intelligence simulate orgpolicy \
       --organization=ORGANIZATION_ID \
       --custom-constraints=CONSTRAINT_PATH \
       --policies=POLICY_PATH
    

    Ersetzen Sie Folgendes:

    • ORGANIZATION_ID: Ihre Organisations-ID, z. B. 1234567890123. Das Simulieren von Änderungen über mehrere Organisationen wird nicht unterstützt.

    • CONSTRAINT_PATH: Der vollständige Pfad zur benutzerdefinierten Einschränkung, die Sie erstellt oder aktualisiert haben. Beispiel: tmp/constraint.yaml Wenn Sie das Flag --policies festgelegt haben, müssen Sie das Flag --custom-constraints nicht angeben.

    • POLICY_PATH: Der vollständige Pfad zur Organisationsrichtlinie, die Sie erstellt oder aktualisiert haben. Beispiel: tmp/policy.yaml Wenn Sie das Flag --custom-constraints festgelegt haben, müssen Sie das Flag --policies nicht angeben.

    Nach einigen Minuten gibt der Befehl eine Liste von Ressourcen aus, die gegen die Änderungen an der benutzerdefinierten Einschränkung, der Organisationsrichtlinie oder beidem verstoßen würden.

    Im Folgenden finden Sie eine Beispielantwort auf eine Simulation einer Organisationsrichtlinie. Diese Simulation umfasst eine benutzerdefinierte Einschränkung, die die Erstellung von Google Kubernetes Engine-Clusterressourcen einschränkt, wenn die Binärautorisierung nicht aktiviert ist. Wenn die vorgeschlagene Änderung in diesem Fall angewendet würde, würden zwei Clusterressourcen gegen die Richtlinie verstoßen: orgpolicy-test-cluster unter dem Projekt simulator-test-project und autopilot-cluster-1 unter dem Projekt orgpolicy-test-0.

    Waiting for operation [organizations/012345678901/locations/global/orgPolic
    yViolationsPreviews/85be9a2d-8c49-470d-a65a-d0cb9ffa8f83/operations/1883a83
    c-c448-42e5-a7c5-10a850928f06] to complete...done.
    ---
    customConstraint:
     actionType: ALLOW
     condition: resource.binaryAuthorization.enabled == true
     methodTypes:
     - CREATE
     name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
     resourceTypes:
     - container.googleapis.com/Cluster
    name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/b9fd23a5-7163-46de-9fec-7b9aa6af1113
    resource:
     ancestors:
     - organizations/012345678901
     - projects/456789012345
     assetType: container.googleapis.com/Cluster
     resource: //container.googleapis.com/projects/simulator-test-project/locations/us-central1/clusters/orgpolicy-test-cluster
    ---
    customConstraint:
     actionType: ALLOW
     condition: resource.binaryAuthorization.enabled == true
     methodTypes:
     - CREATE
     name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
     resourceTypes:
     - container.googleapis.com/Cluster
    name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/e73896e6-7613-4a8d-8436-5df7a6455121
    resource:
     ancestors:
     - organizations/012345678901
     - folders/789012345678
     - projects/456789012345
     assetType: container.googleapis.com/Cluster
     resource: //container.googleapis.com/projects/orgpolicy-test-0/locations/us-central1/clusters/autopilot-cluster-1
    

Getestete Richtlinienänderung anwenden

Nachdem Sie die benutzerdefinierte Einschränkung, Ihre Organisationsrichtlinie oder beides getestet haben, können Sie die benutzerdefinierte Einschränkung einrichten und die Organisationsrichtlinie mithilfe der normalen Prozesse erzwingen.

  1. Wenn Sie eine benutzerdefinierte Einschränkung erzwingen möchten, müssen Sie sie so einrichten, dass sie für Organisationsrichtlinien in Ihrer Organisation verfügbar ist. Verwenden Sie den Befehl gcloud org-policies set-custom-constraint, um eine benutzerdefinierte Einschränkung einzurichten:

    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.

    Danach ist die benutzerdefinierte Einschränkung in der Liste der Google Cloud-Organisationsrichtlinien verfügbar.

  2. Verwenden Sie den Befehl gcloud org-policies set-policy, um eine Organisationsrichtlinie mit einer benutzerdefinierten Einschränkung zu erzwingen:

    gcloud org-policies set-policy POLICY_PATH
    

    Ersetzen Sie POLICY_PATH durch den vollständigen Pfad zur YAML-Datei für die Organisationsrichtlinie.

    Es kann bis zu 15 Minuten dauern, bis die Richtlinie wirksam wird.

Simulationsergebnisse speichern

Wenn Sie die gcloud CLI verwenden, können Sie Policy Simulator-Ergebnisse als JSON- oder YAML-Dateien speichern.

Standardmäßig werden Testergebnisse in der Google Cloud CLI im YAML-Format ausgegeben. Wenn Sie ein Testergebnis als YAML-Datei speichern möchten, leiten Sie die Ausgabe des Befehls simulate orgpolicy beim Ausführen der Simulation weiter:

> FILENAME

Ersetzen Sie FILENAME durch einen Namen für die Ausgabedatei.

Zum Speichern eines Testergebnisses als JSON-Datei fügen Sie dem Befehl simulate orgpolicy beim Ausführen der Simulation das folgende Flag hinzu:

--format=json > FILENAME

Ersetzen Sie FILENAME durch einen Namen für die Ausgabedatei.

Nächste Schritte