Richtlinienänderungen simulieren

Auf dieser Seite wird gezeigt, wie Sie die Änderung einer IAM-Richtlinie (Identity and Access Management) mit Policy Simulator simulieren. Außerdem werden die Ergebnisse der Simulation und die Anwendung der simulierten Richtlinie auf Anfrage erläutert.

Hinweis

Berechtigungen abrufen

Bevor Sie eine Richtlinienänderung simulieren, müssen Sie prüfen, ob Sie die entsprechenden Berechtigungen haben. Zum Ausführen einer Simulation sind bestimmte Berechtigungen erforderlich. Darüber hinaus ermöglichen andere, nicht zwingend notwendige Berechtigungen die maximal möglichen Ergebnisse einer Simulation.

Weitere Informationen zu IAM-Rollen finden Sie unter Informationen zu Rollen.

Erforderliche Berechtigungen für die Zielressource

Die Zielressource der Simulation ist die Ressource, deren Richtlinien Sie simulieren.

Für die Zielressource benötigen Sie die Rolle "Simulator-Administrator" (roles/policysimulator.admin) und die Rolle "Sicherheitsprüfer" (roles/iam.securityReviewer) oder eine andere Rolle mit den folgenden Berechtigungen:

  • policysimulator.replays.run
  • cloudassets.assets.searchAllResources
  • service.resource.getIamPolicy, wobei resource der Ressourcentyp der Zielressource und service der Name des Google Cloud-Dienstes ist, zu dem diese Ressource gehört.

Erforderliche Berechtigungen für die Hostressource

Die Hostressource einer Simulation ist das Element – das Projekt, der Ordner oder die Organisation –, mit dem die Simulation erstellt und ausgeführt wird. Die Hostressource muss in keiner Weise der Zielressource zugeordnet sein.

Die Art und Weise, wie die Hostressource festlegt wird, hängt von der verwendeten Plattform ab.

Console

Die Hostressource ist das Projekt, der Ordner oder die Organisation in der Ressourcenauswahl.

Wenn Sie die Hostressource ändern möchten, wählen Sie in der Ressourcenauswahl ein anderes Projekt, einen anderen Ordner oder eine andere Organisation aus.

gcloud

Die Hostressource ist das aktuelle Kontingentprojekt. Um das Kontingentprojekt festzulegen, verwenden Sie den Befehl gcloud auth application-default set-quota-project.

REST API

Die Hostressource wird manuell bei jedem Senden einer Anfrage angegeben. Weitere Informationen finden Sie auf dieser Seite unter Richtlinienänderung simulieren.

Sie benötigen die Rolle "Simulator-Administrator" (roles/policysimulator.admin) für die Hostressource oder eine andere Rolle mit den folgenden Berechtigungen:

  • policysimulator.replays.create
  • policysimulator.replays.get
  • policysimulator.replayResults.list

Damit Sie die maximal möglichen Ergebnisse einer Simulation erhalten, benötigen Sie bestimmte IAM- und Google Workspace-Berechtigungen. Allerdings können Sie eine Simulation auch ohne diese Berechtigungen ausführen. Wenn Sie eine Simulation ohne diese Berechtigungen ausführen, kann dies aber zu einer erhöhten Anzahl unbekannter Zugriffsänderungen führen, da es dann möglicherweise nicht möglich ist, Informationen abzurufen, die sich eventuell auf die Ergebnisse der Simulation auswirken.

Wir empfehlen für das Ausführen einer Simulation die Rolle des Sicherheitsprüfers (roles/iam.securityReviewer) für Ihre Organisation. Wenn Sie bereits die Rolle "Sicherheitsadministrator" haben (roles/iam.securityAdmin), benötigen Sie keine zusätzlichen Rollen.

Mit diesen Rollen erhalten Sie die folgenden Berechtigungen für maximal mögliche Ergebnisse der Simulation:

  • iam.roles.get und iam.roles.list für alle relevanten Projekte, Ordner oder Organisationen, in denen benutzerdefinierte Rollen definiert sind. Projekte, Ordner oder Organisationen sind dann relevant, wenn sie Ancestor oder Nachfolgerelement der Ressource ist, deren Richtlinie Sie simulieren.
  • service.resource.getIamPolicy, wobei resource der Name eines Ressourcentyps ist, der eine IAM-Richtlinie haben kann, und service der Name des Google Cloud-Dienstes ist, zu dem diese Ressource gehört.

    Wenn Sie eine Simulation ausführen, empfehlen wir Ihnen diese Berechtigung für jede Ressource, die folgenden Kriterien entspricht:

    • Policy Simulator unterstützt die Ressource.
    • Die Ressource hat eine IAM-Richtlinie, die sich auf den Zugriff des Nutzers auswirken kann. Dies gilt, wenn eine der folgenden Bedingungen zutrifft:

      • Die Ressource ist ein Nachfolgerelement der Ressource, deren Richtlinie Sie simulieren, und wird in den entsprechenden Zugriffslogs angezeigt.
      • Die Ressource ist ein Ancestor der Ressource, deren Richtlinie Sie simulieren.

    Angenommen, Sie möchten eine Richtlinie für ein Projekt simulieren. Wenn die Zugriffslogs einen Zugriffsversuch auf einen Cloud Storage-Bucket im Projekt dokumentieren, benötigen Sie die Berechtigung storage.buckets.getIamPolicy für diesen Bucket. Wenn das Projekt einen übergeordneten Ordner mit einer IAM-Richtlinie hat, benötigen Sie außerdem die Berechtigung resourcemanager.folders.getIamPolicy für diesen Ordner.

Wir empfehlen die Berechtigung, Informationen zur Gruppenmitgliedschaft für jede Google-Gruppe in der ursprünglichen Richtlinie und der vorgeschlagenen Richtlinie abzurufen.

Super Admins und Gruppenadministratoren von Google Workspace haben in der Regel Zugriff auf die Gruppenmitgliedschaft. Wenn Sie weder Super Admin noch Gruppenadministrator sind, bitten Sie Ihren Google Workspace-Administrator, eine benutzerdefinierte Google Workspace-Administratorrolle zu erstellen, die die Berechtigung groups.read (unter Berechtigungen für Admin API) enthält, und Ihnen zuzuweisen. Sie können so die Mitgliedschaft aller Gruppen in Ihrer Domain aufrufen und Richtlinienänderungen effektiver simulieren.

Richtlinienänderung simulieren

Simulieren Sie eine Richtlinienänderung mit den im Folgenden aufgeführten Schritten.

Console

Das folgende Beispiel zeigt, wie Sie eine Richtlinienänderung für ein Projekt simulieren. Sie können eine Richtlinienänderung aber für jede Ressource simulieren, die eine IAM-Richtlinie hat.

Bearbeiten Sie die Berechtigungen eines Hauptkontos und klicken Sie dann anstelle von Speichern auf Simulieren:

  1. Rufen Sie in der Cloud Console die Seite IAM auf.

    Zur Seite "IAM"

  2. Erstellen Sie eine vorgeschlagene Richtlinienänderung durch Bearbeiten der Berechtigung eines vorhandenen Hauptkontos:

    1. Ermitteln Sie das Hauptkonto, dessen Zugriff Sie ändern möchten, und klicken Sie rechts auf die Schaltfläche Bearbeiten .
    2. Bearbeiten Sie den Zugriff des Hauptkontos und fügen Sie eine neue Rolle hinzu oder ändern bzw. widerrufen Sie eine vorhandene Rolle.
  3. Klicken Sie auf Simulieren, um die vorgeschlagene Änderung zu simulieren.

  4. Nach einigen Minuten zeigt die Cloud Console die Ergebnisse der simulierten Richtlinie als Liste mit Zugriffsänderungen an. Weitere Informationen finden Sie auf dieser Seite unter Informationen zu den Ergebnissen von Policy Simulator.

    Wenn der Zugriff in der vorhandenen Richtlinie durch die simulierte Richtlinie nicht geändert wurde, zeigt die Cloud Console keine Zugriffsänderungen an.

gcloud

Zum Simulieren einer Richtlinienänderung folgen Sie dem Muster read-modify-write, simulieren aber die Richtlinie, anstatt sie zu schreiben.

  1. Lesen Sie die aktuelle Richtlinie mit dem folgenden Befehl aus:

    gcloud resource-type get-iam-policy resource-id --format=format > filepath
    

    Ersetzen Sie dabei die folgenden Werte:

    • resource-type: Der Ressourcentyp, für den Sie eine Richtlinie simulieren möchten. Beispiel: projects.
    • resource-id: Die ID der Ressource, deren Richtlinie Sie simulieren möchten. Beispiel: my-project.
    • format: Der Wert JSON oder YAML.
    • filepath: Der Pfad zu einer neuen Ausgabedatei für die Richtlinie.

    Mit dem folgenden Befehl wird beispielsweise die Richtlinie für das Projekt my-project im JSON-Format abgerufen und im Basisverzeichnis des Nutzers gespeichert:

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json
    
  2. Ändern Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie so, dass sie die Richtlinienänderungen enthält, die Sie simulieren möchten.

    Für die Richtlinienbindung können Sie mehrere Arten von Änderungen vornehmen. Beispielsweise haben Sie die Möglichkeit, ein Hauptkonto zu einer Rollenbindung hinzuzufügen oder daraus zu entfernen oder eine Rollenbindung aus der Richtlinie zu entfernen.

  3. Führen Sie den folgenden Befehl aus, um die Richtlinienänderung zu simulieren:

    gcloud iam simulator replay-recent-access \
        full-resource-name \
        filepath \
        --format=format
    

    Ersetzen Sie dabei die folgenden Werte:

    • full-resource-name: Der vollständige Name der Ressource, deren Richtlinie Sie simulieren möchten.

      Der vollständige Ressourcenname ist ein URI, der aus dem Dienstnamen und dem Pfad zur Ressource besteht. Wenn Sie beispielsweise eine Richtlinie für ein Projekt simulieren, verwenden Sie //cloudresourcemanager.googleapis.com/projects/project- id, wobei project-id die ID des Projekts ist, dessen Richtlinie Sie simulieren möchten.

      Eine Liste der Formate für vollständige Ressourcennamen finden Sie unter Vollständige Ressourcennamen.

    • filepath: Der Pfad zur Datei mit der geänderten Richtlinie, die Sie simulieren möchten. Beispiel: ~/proposed_policy.json

    • format: Das Format für die Antwort. Beispiel: jsonoder yaml.

    Nach einigen Minuten gibt der Befehl eine Liste mit Wiederholungsergebnissen aus, die zeigen, wie sich der Zugriff des Hauptkontos ändert, wenn die vorgeschlagene Richtlinie angewendet wird. In diesen Ergebnissen finden Sie auch alle Fehler, die während der Simulation aufgetreten sind. Dazu zählen insbesondere Fehler aufgrund von nicht unterstützten Ressourcentypen.

    Weitere Informationen zum Lesen der Ergebnisse finden Sie unter Informationen zu den Ergebnissen von Policy Simulator auf dieser Seite. Informationen zum Speichern von Simulationsergebnissen, anstatt Sie auszugeben, erhalten Sie unter Simulationsergebnisse speichern.

    Das folgende Beispiel zeigt eine Antwort für eine Richtliniensimulation für den Nutzer my-user@example.com. Wenn in diesem Fall die vorgeschlagene Änderung angewendet wird, hat my-user@example.com potenziell nicht mehr die Berechtigungen resourcemanager.projects.list und resourcemanager.projects.get für das Projekt my-project und auf keinen Fall mehr die Berechtigung resourcemanager.projects.update für das Projekt my-project:

    [
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.list",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_MAYBE_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "UNKNOWN_INFO_DENIED",
              "errors": [
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                      "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                      "resourceType": "cloudresourcemanager.googleapis.com/projects"
                    }
                  ],
                  "message": "Missing permission to get relevant IAM policies."
                }
              ],
              "policies": [
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "policy": {}
                }
              ]
            }
          }
        },
        "lastSeenDate": {
          "day": 12,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.get",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_MAYBE_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "UNKNOWN_INFO_DENIED",
              "errors": [
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to view group membership.",
                      "resourceName": "group:everyone@example.com",
                      "resourceType": "Google group"
                    }
                  ],
                  "message": "Missing permission to view group membership."
                },
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                      "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                      "resourceType": "cloudresourcemanager.googleapis.com/projects"
                    }
                  ],
                  "message": "Missing permission to get relevant IAM policies."
                }
              ],
              "policies": [
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "bindingExplanations": [
                    {
                      "access": "UNKNOWN_INFO_DENIED",
                      "memberships": {
                        "group:everyone@example.com": {
                          "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED"
                        }
                      },
                      "role": "roles/owner"
                    }
                  ],
                  "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                  "policy": {
                    "bindings": [
                      {
                        "members": [
                          "group:everyone@example.com"
                        ],
                        "role": "roles/owner"
                      }
                    ],
                    "etag": "BwWgJSIInYA=",
                    "version": 3
                  }
                },
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "policy": {}
                }
              ]
            }
          }
        },
        "lastSeenDate": {
          "day": 10,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.update",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "NOT_GRANTED"
            }
          }
        },
        "lastSeenDate": {
          "day": 15,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {},
        "error": {
          "code": 12,
          "details": [
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.create"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.setIamPolicy"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.delete"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.update"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "pubsub.topics.publish"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.list"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.getIamPolicy"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.get"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            }
          ],
          "message": "Simulator does not yet support all resource types for 8 removed permissions."
        }
      }
    ]
    

    Wenn der Zugriff in der vorhandenen Richtlinie durch die simulierte Richtlinie nicht geändert wurde, gibt der Befehl No access changes found in the replay aus.

REST

Zum Simulieren einer Richtlinienänderung folgen Sie dem Muster read-modify-write. Statt die Richtlinie zu schreiben, erstellen Sie aber eine Simulation und führen sie aus.

  1. Lesen Sie die IAM-Richtlinie für die Ressource:

    Die Methode projects.getIamPolicy der Resource Manager API ruft die IAM-Richtlinie eines Projekts ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

    JSON-Text anfordern:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:project-owner@example.com"
          ]
        },
        {
          "role": "roles/iam.securityReviewer",
          "members": [
            "user:fatima@example.com"
          ]
        }
      ]
    }
    

  2. Ändern Sie die zurückgegebene Richtlinie, um die Änderungen festzulegen, die Sie simulieren möchten.

    Für die Richtlinienbindung können Sie mehrere Arten von Änderungen vornehmen. Beispielsweise haben Sie die Möglichkeit, ein Hauptkonto zu einer Rollenbindung hinzuzufügen oder daraus zu entfernen oder eine Rollenbindung aus der Richtlinie zu entfernen.

  3. Erstellen Sie eine Simulation oder eine Wiederholung mit der geänderten Richtlinie.

    Die Methode replays.create der Policy Simulator API erstellt eine Wiederholung für ein Projekt, einen Ordner oder eine Organisation.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • host-resource-type: Der Ressourcentyp, der die Wiederholung hostet. Dieser Wert muss projects, folders oder organizations sein.
    • host-resource-id: Die ID der Hostressource, z. B. my-project.
    • target-full-resource-name: Der vollständige Name der Ressource, deren Richtlinie Sie simulieren möchten. Diese Ressource kann eine beliebige Ressource sein, die IAM-Richtlinien akzeptiert, und muss in keiner Weise der Hostressource zugeordnet sein.

      Der vollständige Ressourcenname ist ein URI, der aus dem Dienstnamen und dem Pfad zur Ressource besteht. Wenn Sie beispielsweise eine Richtlinie für ein Projekt simulieren, verwenden Sie //cloudresourcemanager.googleapis.com/projects/project- id, wobei project-id die ID des Projekts ist, dessen Richtlinie Sie simulieren möchten.

      Eine vollständige Liste der Formate für Ressourcennamen finden Sie unter Vollständige Ressourcennamen.

    • policy: Die Richtlinie, die Sie simulieren möchten. Ein Beispiel für eine Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie mehrere Richtlinien simulieren möchten, fügen Sie mehrere Paare von "object-full-resource-name" : policy in den Anfragetext ein.

    So simulieren Sie mehrere Richtlinien:

    HTTP-Methode und URL:

    POST https://policysimulator.googleapis.com/v1/host-resource-type/host-resource-id/locations/global/replays

    JSON-Text anfordern:

    {
      "config": {
        "policyOverlay": {
          "target-full-resource-name" : policy
        }
      }
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält den Namen eines Vorgangs, der Ihre Wiederholung darstellt:

    {
      name: "operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8"
      metadata {
        type_url: "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata"
      }
    }
    

  4. Fragen Sie die Methode operations.get ab, bis die Wiederholung abgeschlossen ist.

    Für die Abfrage eines Vorgangs empfehlen wir, die Methode operations.get wiederholt mit einem Backoff von 10 Sekunden aufzurufen, bis die Antwort das Feld "done": true und das Feld name mit dem Namen die ausgeführten Wiederholung enthält.

    Die Methode operations.get der Policy Simulator API ruft den Status einer Wiederholung ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • operation-name: Der Name eines Wiederholungvorgangs, einschließlich des Präfixes operations. Kopieren Sie diesen Wert aus dem Feld name einer replays.create-Antwort. Beispiel:operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8

    HTTP-Methode und URL:

    GET https://policysimulator.googleapis.com/v1/operation-name

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Laufende Vorgänge geben eine Antwort wie die folgende zurück:

    {
      "name": "operations/42083b6b-3788-41b9-ae39-e97d7615a22d",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata",
        "startTime": "2021-01-15T05:34:14.732Z"
      }
    }
    

    Abgeschlossene Vorgänge geben eine Antwort wie die folgende zurück:

    {
      "name": "operations/89ab4892-9605-4c84-aedb-4fce4fc5195b"
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata"
        "startTime": "2021-01-15T05:40:15.922Z"
      }
      "done": true
      "response": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.Replay"
        "replay": {
          "name": "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b",
          "state": SUCCEEDED,
          "config": {},
          "resultsSummary": {
            "logCount": 1319,
            "unchangedCount": 1169,
            "differenceCount": 149,
            "errorCount": 1,
            "oldestDate": {
              "year": 2020,
              "month": 10,
              "day": 15
            },
            "newestDate": {
              "year": 2021,
              "month": 1,
              "day": 12
            }
          }
        }
      }
    }
    

  5. Rufen Sie die Ergebnisse der Wiederholung ab.

    Die Methode replays.results.list der Policy Simulator API ruft die Ergebnisse einer Wiederholung ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • replay-name: Der Name der Wiederholung, für die Sie Ergebnisse abrufen möchten. Kopieren Sie diesen Wert aus dem Feld response.replay.name einer operations.get-Antwort. Geben Sie alle Ressourcentypen und Standortpräfixe an. Beispiel: "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b".
    • page-size: Optional. Die maximale Anzahl an Ergebnissen, die von dieser Anfrage zurückgegeben werden sollen. Wenn nicht angegeben, bestimmt der Server die Anzahl der zurückzugebenden Ergebnisse. Wenn die Anzahl der Ergebnisse die Seitengröße überschreitet, enthält die Antwort ein Paginierungstoken, mit dem Sie die nächste Ergebnisseite abrufen können.
    • page-token: Optional. Das Paginierungstoken, das in einer früheren Antwort von dieser Methode zurückgegeben wurde. Wenn dieser Wert angegeben wird, beginnt die Liste der Ergebnisse dort, wo die vorherige Anfrage endet.

    HTTP-Methode und URL:

    GET https://policysimulator.googleapis.com/v1/replay-name/results?pageSize=page-size&pageToken=page-token

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält eine Liste mit Ergebnissen, die erläutern, wie sich der Zugriff des Hauptkontos bei Anwendung der vorgeschlagenen Richtlinie ändert. In diesen Ergebnissen finden Sie auch alle Fehler, die während der Simulation aufgetreten sind. Dazu zählen insbesondere alle Fehler aufgrund von nicht unterstützten Ressourcentypen.

    Weitere Informationen zum Lesen der Ergebnisse finden Sie unter Informationen zu den Ergebnissen von Policy Simulator auf dieser Seite.

    Das folgende Beispiel zeigt eine Antwort für eine Richtliniensimulation für den Nutzer my-user@example.com. Wenn in diesem Fall die vorgeschlagene Änderung angewendet wird, hat my-user@example.com potenziell nicht mehr die Berechtigungen resourcemanager.projects.list und resourcemanager.projects.get für das Projekt my-project und auf keinen Fall die Berechtigung resourcemanager.projects.update für das Projekt my-project:

    {
      "replayResults": [
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.list",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_MAYBE_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "UNKNOWN_INFO_DENIED",
                "errors": [
                  {
                    "code": 7,
                    "message": "Missing permission to get relevant IAM policies.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                        "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                        "resourceType": "cloudresourcemanager.googleapis.com/projects"
                      }
                    ]
                  }
                ],
                "policies": [
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "policy": {}
                  }
                ]
              }
            }
          }
        },
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.get",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_MAYBE_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "UNKNOWN_INFO_DENIED",
                "errors": [
                  {
                    "code": 7,
                    "message": "Missing permission to view group membership.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to view group membership.",
                        "resourceName": "group:everyone@example.com",
                        "resourceType": "Google group"
                      }
                    ]
                  },
                  {
                    "code": 7,
                    "message": "Missing permission to get relevant IAM policies.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                        "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                        "resourceType": "cloudresourcemanager.googleapis.com/projects"
                      }
                    ]
                  }
                ],
                "policies": [
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "bindingExplanations": [
                      {
                        "access": "UNKNOWN_INFO_DENIED",
                        "memberships": {
                          "group:everyone@example.com": {
                            "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED"
                          }
                        },
                        "role": "roles/owner"
                      }
                    ],
                    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                    "policy": {
                      "bindings": [
                        {
                          "members": [
                            "group:everyone@example.com"
                          ],
                          "role": "roles/owner"
                        }
                      ],
                      "etag": "BwWgJSIInYA=",
                      "version": 3
                    }
                  },
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "policy": {}
                  }
                ]
              }
            }
          }
        },
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.update",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "NOT_GRANTED"
              }
            }
          }
        },
        {
          "accessTuple": {},
          "error": {
            "code": 12,
            "message": "Simulator does not yet support all resource types for 8 removed permissions.",
            "details": [
              {
                "@type": "type.googleapis.com/google.rpc.Status",
                "code": 12,
                "message": "Simulator does not yet support all resource types for 8 removed permissions.",
                "details": [
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.create"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.setIamPolicy"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.delete"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.update"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "pubsub.topics.publish"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.list"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.getIamPolicy"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.get"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  }
                ]
              }
            ]
          }
        }
      ]
      "nextPageToken": "AWukk3zjv80La+chWx6WNt7X8czGPLtP792gRpkNVEV/URZ/VdWzxmuJKr"
    }
    

    Wenn der Zugriff in der vorhandenen Richtlinie durch die simulierte Richtlinie nicht geändert wurde, gibt die Anfrage eine leere Liste ({}) zurück.

Informationen zu den Ergebnissen von Policy Simulator

Policy Simulator ermittelt die Auswirkungen einer vorgeschlagenen Richtlinienänderung in Form einer Liste von Zugriffsänderungen. Jede Zugriffsänderung stellt einen Zugriffsversuch der letzten 90 Tage dar, der gemäß der vorgeschlagenen Richtlinie ein anderes Ergebnis als die aktuelle Richtlinie hat.

Im Richtliniensimulator werden auch Fehler aufgeführt, die während der Simulation aufgetreten sind. So können Sie potenzielle Lücken in der Simulation identifizieren.

Die Darstellung dieser Änderungen und Fehler hängt von der verwendeten Plattform ab.

Console

Auf der Ergebnisseite von Policy Simulator werden die Ergebnisse der Simulation in verschiedenen Abschnitten dargestellt:

  • Richtlinienübersicht: In diesem Abschnitt werden die ursprüngliche Rolle, die das Hauptkonto für die Ressource hat, sowie die Rolle aufgeführt, die es in der vorgeschlagenen Richtlinie hat. Die ursprüngliche Rolle ist unter Vorhandene Richtlinie und die vorgeschlagene Rolle unter Vorgeschlagene Richtlinie enthalten.

  • Zusammenfassung der Zugriffsänderungen: In diesem Abschnitt wird die Anzahl der Zugriffsversuche der letzten 90 Tage angezeigt, die mit der vorgeschlagenen Richtlinie anders verlaufen. Diese Zusammenfassung umfasst alle potenziellen oder unbekannten Zugriffsänderungen sowie alle Fehler, die während der Simulation aufgetreten sind.

  • Zugriffsänderungen in den letzten 90 Tagen: In diesem Abschnitt sind alle Zugriffsversuche der letzten 90 Tage aufgeführt, die mit der vorgeschlagenen Richtlinie anders verlaufen. Jeder Eintrag oder jede Zugriffsänderung enthält den Typ der Zugriffsänderung sowie die Ressource, das Hauptkonto und die Berechtigung, die für den Zugriffsversuch gültig war.

    Es gibt verschiedene Arten von Zugriffsänderungen:

    Zugriffsänderung Details
    Zugriff entzogen Das Hauptkonto hatte gemäß der aktuellen Richtlinie Zugriff, hat aber nach der vorgeschlagenen Änderung keinen Zugriff mehr.
    Zugriff möglicherweise entzogen

    Das Problem kann folgende Ursachen haben:

    • Das Hauptkonto hatte gemäß der aktuellen Richtlinie Zugriff, aber gemäß der vorgeschlagenen Richtlinie ist sein Zugriff unbekannt.
    • Der Zugriff des Hauptkontos war gemäß der aktuellen Richtlinie unbekannt, aber nach der vorgeschlagenen Änderung hat das Hauptkonto keinen Zugriff.
    Zugriff erhalten Das Hauptkonto hatte gemäß der aktuellen Richtlinie keinen Zugriff, hat aber nach der vorgeschlagenen Änderung Zugriff.
    Zugriff möglicherweise erhalten

    Das Problem kann folgende Ursachen haben:

    • Das Hauptkonto hat keinen Zugriff unter der aktuellen Richtlinie, aber sein Zugriff ist nach der vorgeschlagenen Änderung unbekannt.
    • Der Zugriff des Hauptkontos gemäß der aktuellen Richtlinie ist unbekannt, aber nach der vorgeschlagenen Änderung hat es Zugriff.
    Zugriffsstatus unbekannt Der Zugriff des Hauptkontos sowohl gemäß der aktuellen Richtlinie als auch der vorgeschlagenen Richtlinie ist unbekannt und die vorgeschlagenen Änderungen können sich auf den Zugriff des Hauptkontos auswirken.
    Fehler Bei der Simulation ist ein Fehler aufgetreten.

    Klicken Sie auf die Zugriffsänderung, um weitere Details dazu aufzurufen. Daraufhin wird das Fenster Änderungsdetails ansehen geöffnet, in dem zusätzliche Informationen zur Zugriffsänderung angezeigt werden, einschließlich des vorhandenen Zugriffs des Hauptkontos, des vorgeschlagenen Zugriffs des Hauptkontos und weiterer Details zur Zugriffsänderung.

gcloud

Wenn Sie den Befehl replay-recent-access verwenden, enthält die Antwort des gcloud-Tools eine Liste von replayResults.

Jedes Wiederholungsergebnis beschreibt einen Zugriffsversuch, dessen Ergebnis anders wäre, wenn die vorgeschlagene Richtlinie zum Zeitpunkt des Versuchs gültig gewesen wäre. Das folgende Wiederholungsergebnis zeigt beispielsweise, dass my-user@example.com in der Vergangenheit die Berechtigung resourcemanager.projects.update verwendet hat, um eine Aktion im Projekt my-project auszuführen. Mit der vorgeschlagenen Richtlinie wird der Zugriff verweigert.

{
  "accessTuple": {
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "resourcemanager.projects.update",
    "principal": "my-user@example.com"
  },
  "lastSeenDate": {
    "day": 15,
    "month": 1,
    "year": 2021
  },
  "diff": {
    "accessDiff": {
      "baseline": {
        "accessState": "GRANTED"
      },
      "simulated": {
        "accessState": "NOT_GRANTED"
      },
      "accessChange": "ACCESS_REVOKED"
    }
  }
}

Jedes Wiederholungsergebnis enthält die folgenden Felder:

  • accessTuple: Der Zugriffsversuch, auf den sich das Ergebnis bezieht. Dieses Feld enthält die Ressource, die Berechtigung und das Hauptkonto, die am Zugriffsversuch beteiligt waren.

  • lastSeenDate: Das Datum, an dem der Zugriffsversuch zuletzt erfolgt ist.

  • diff.accessDiff oder error: Wenn die Wiederholung eines Zugriffsversuchs erfolgreich ist, enthält das Ergebnis ein Feld diff.accessDiff, das den Unterschied zwischen den Ergebnissen des Zugriffsversuchs gemäß der aktuellen Richtlinie und der vorgeschlagenen Richtlinie darstellt. Wenn der Wiederholungsversuch nicht erfolgreich ist, enthält das Wiederholungsergebnis das Feld error mit einer Fehlerbeschreibung. Weitere Informationen zu Simulationsfehlern finden Sie auf dieser Seite unter Fehler.

Jeder dargestellte unterschiedliche Zugriff besteht aus folgenden Komponenten:

  • baseline: Das Zugriffsergebnis, wenn die aktuelle Richtlinie verwendet wird. Dies wird mit einem der folgenden Werte dargestellt: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED. Wenn das Ergebnis UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED ist, werden in der Antwort auch alle Fehler aufgelistet, die mit den unbekannten Informationen verknüpft sind, sowie die Richtlinien, die von diesem Fehler betroffen sind. Weitere Informationen zu UNKNOWN-Werten finden Sie auf dieser Seite unter Unbekannte Ergebnisse.
  • simulated: Das Zugriffsergebnis, wenn die vorgeschlagene Richtlinie verwendet wird. Dies wird mit einem der folgenden Werte dargestellt: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED. Wenn das Ergebnis UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED ist, werden in der Antwort auch alle Fehler aufgelistet, die mit den unbekannten Informationen verknüpft sind, sowie die Richtlinien, die von diesem Fehler betroffen sind. Weitere Informationen zu UNKNOWN-Werten finden Sie auf dieser Seite unter Unbekannte Ergebnisse.
  • accessChange: Die Änderung zwischen dem aktuellen Zugriffsstatus und dem simulierten Zugriffsstatus. In der folgenden Tabelle sind mögliche Werte aufgeführt:

    Zugriffsänderung Details
    ACCESS_REVOKED Das Hauptkonto hatte gemäß der aktuellen Richtlinie Zugriff, hat aber nach der vorgeschlagenen Änderung keinen Zugriff mehr.
    ACCESS_MAYBE_REVOKED

    Das Problem kann folgende Ursachen haben:

    • Das Hauptkonto hatte gemäß der aktuellen Richtlinie Zugriff, aber gemäß der vorgeschlagenen Richtlinie ist sein Zugriff unbekannt.
    • Der Zugriff des Hauptkontos war gemäß der aktuellen Richtlinie unbekannt, aber nach der vorgeschlagenen Änderung hat das Hauptkonto keinen Zugriff.
    ACCESS_GAINED Das Hauptkonto hatte gemäß der aktuellen Richtlinie keinen Zugriff, hat aber nach der vorgeschlagenen Änderung Zugriff.
    ACCESS_MAYBE_GAINED

    Das Problem kann folgende Ursachen haben:

    • Das Hauptkonto hat keinen Zugriff unter der aktuellen Richtlinie, aber sein Zugriff ist nach der vorgeschlagenen Änderung unbekannt.
    • Der Zugriff des Hauptkontos gemäß der aktuellen Richtlinie ist unbekannt, aber nach der vorgeschlagenen Änderung hat es Zugriff.
    UNKNOWN_CHANGE Der Zugriff des Hauptkontos sowohl gemäß der aktuellen Richtlinie als auch der vorgeschlagenen Richtlinie ist unbekannt und die vorgeschlagenen Änderungen können sich auf den Zugriff des Hauptkontos auswirken.

REST

Wenn Sie die Methode replays.results.list aufrufen, enthält die Antwort eine Liste von replayResults.

Jedes Wiederholungsergebnis beschreibt einen Zugriffsversuch, dessen Ergebnis anders wäre, wenn die vorgeschlagene Richtlinie zum Zeitpunkt des Versuchs gültig gewesen wäre. Das folgende Wiederholungsergebnis zeigt beispielsweise, dass my-user@example.com in der Vergangenheit die Berechtigung resourcemanager.projects.update verwendet hat, um eine Aktion im Projekt my-project auszuführen. Mit der vorgeschlagenen Richtlinie wird der Zugriff verweigert.

{
  "accessTuple": {
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "resourcemanager.projects.update",
    "principal": "my-user@example.com"
  },
  "lastSeenDate": {
    "day": 15,
    "month": 1,
    "year": 2021
  },
  "diff": {
    "accessDiff": {
      "baseline": {
        "accessState": "GRANTED"
      },
      "simulated": {
        "accessState": "NOT_GRANTED"
      },
      "accessChange": "ACCESS_REVOKED"
    }
  }
}

Jedes Wiederholungsergebnis enthält die folgenden Felder:

  • accessTuple: Der Zugriffsversuch, auf den sich das Ergebnis bezieht. Dieses Feld enthält die Ressource, die Berechtigung und das Hauptkonto, die am Zugriffsversuch beteiligt waren.

  • lastSeenDate: Das Datum, an dem der Zugriffsversuch zuletzt erfolgt ist.

  • diff.accessDiff oder error: Wenn die Wiederholung eines Zugriffsversuchs erfolgreich ist, enthält das Ergebnis ein Feld diff.accessDiff, das den Unterschied zwischen den Ergebnissen des Zugriffsversuchs gemäß der aktuellen Richtlinie und der vorgeschlagenen Richtlinie darstellt. Wenn der Wiederholungsversuch nicht erfolgreich ist, enthält das Wiederholungsergebnis das Feld error mit einer Fehlerbeschreibung. Weitere Informationen zu Simulationsfehlern finden Sie auf dieser Seite unter Fehler.

Jeder dargestellte unterschiedliche Zugriff besteht aus folgenden Komponenten:

  • baseline: Das Zugriffsergebnis, wenn die aktuelle Richtlinie verwendet wird. Dies wird mit einem der folgenden Werte dargestellt: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED. Wenn das Ergebnis UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED ist, werden in der Antwort auch alle Fehler aufgelistet, die mit den unbekannten Informationen verknüpft sind, sowie die Richtlinien, die von diesem Fehler betroffen sind. Weitere Informationen zu UNKNOWN-Werten finden Sie auf dieser Seite unter Unbekannte Ergebnisse.
  • simulated: Das Zugriffsergebnis, wenn die vorgeschlagene Richtlinie verwendet wird. Dies wird mit einem der folgenden Werte dargestellt: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED. Wenn das Ergebnis UNKNOWN_CONDITIONAL oder UNKNOWN_INFO_DENIED ist, werden in der Antwort auch alle Fehler aufgelistet, die mit den unbekannten Informationen verknüpft sind, sowie die Richtlinien, die von diesem Fehler betroffen sind. Weitere Informationen zu UNKNOWN-Werten finden Sie auf dieser Seite unter Unbekannte Ergebnisse.
  • accessChange: Die Änderung zwischen dem aktuellen Zugriffsstatus und dem simulierten Zugriffsstatus. In der folgenden Tabelle sind mögliche Werte aufgeführt:

    Zugriffsänderung Details
    ACCESS_REVOKED Das Hauptkonto hatte gemäß der aktuellen Richtlinie Zugriff, hat aber nach der vorgeschlagenen Änderung keinen Zugriff mehr.
    ACCESS_MAYBE_REVOKED

    Das Problem kann folgende Ursachen haben:

    • Das Hauptkonto hatte gemäß der aktuellen Richtlinie Zugriff, aber gemäß der vorgeschlagenen Richtlinie ist sein Zugriff unbekannt.
    • Der Zugriff des Hauptkontos war gemäß der aktuellen Richtlinie unbekannt, aber nach der vorgeschlagenen Änderung hat das Hauptkonto keinen Zugriff.
    ACCESS_GAINED Das Hauptkonto hatte gemäß der aktuellen Richtlinie keinen Zugriff, hat aber nach der vorgeschlagenen Änderung Zugriff.
    ACCESS_MAYBE_GAINED

    Das Problem kann folgende Ursachen haben:

    • Das Hauptkonto hat keinen Zugriff unter der aktuellen Richtlinie, aber sein Zugriff ist nach der vorgeschlagenen Änderung unbekannt.
    • Der Zugriff des Hauptkontos gemäß der aktuellen Richtlinie ist unbekannt, aber nach der vorgeschlagenen Änderung hat es Zugriff.
    UNKNOWN_CHANGE Der Zugriff des Hauptkontos sowohl gemäß der aktuellen Richtlinie als auch der vorgeschlagenen Richtlinie ist unbekannt und die vorgeschlagenen Änderungen können sich auf den Zugriff des Hauptkontos auswirken.

Unbekannte Ergebnisse

Wenn ein Zugriffsergebnis unbekannt ist, bedeutet dies, dass im Richtliniensimulator nicht genügend Informationen vorhanden sind, um den Zugriffsversuch vollständig zu evaluieren.

Console

Wenn ein Zugriffsergebnis unbekannt ist, wird im Detailbereich der Zugriffsänderung der Grund dafür angegeben. Außerdem werden die spezifischen Rollen, Richtlinien, Gruppenmitgliedschaften und Bedingungen aufgelistet, auf die nicht zugegriffen werden konnte oder die nicht evaluiert werden konnten.

Es gibt verschiedene Gründe, warum ein Ergebnis unbekannt sein kann:

  • Rolleninformationen verweigert: Das Hauptkonto, das die Simulation ausführt, ist nicht berechtigt, die Rollendetails einer oder mehrerer simulierter Rollen zu sehen.
  • Kein Zugriff auf Richtlinie: Das Hauptkonto, das die Simulation ausführt, war nicht berechtigt, die IAM-Richtlinie für eine oder mehrere an der Simulation beteiligten Ressourcen abzurufen.
  • Informationen zur Mitgliedschaft abgelehnt: Das Hauptkonto, das die Simulation ausführt, hatte keine Berechtigung, die Mitglieder einer oder mehrerer der in der vorgeschlagenen Richtlinie enthaltenen Gruppen anzuzeigen.
  • Nicht unterstützte Bedingung: In der Richtlinie, die getestet wird, gibt es eine bedingte Rollenbindung. Bedingungen werden von Policy Simulator nicht unterstützt, sodass die Bindung nicht evaluiert werden konnte.

gcloud

Im gcloud-Tool wird in den Simulationsergebnissen der Grund dafür aufgeführt, warum das Ergebnis in Bezug auf die Zugriffsunterschiede unbekannt ist.

Wenn das Zugriffsergebnis unbekannt ist, liegt einer der folgenden Gründe vor:

  • UNKNOWN_INFO_DENIED: Der Nutzer ist nicht berechtigt, auf Informationen zuzugreifen, die zur Evaluierung des Zugriffsstatus erforderlich sind. Dies kann folgende Gründe haben:

    • Der Nutzer ist nicht berechtigt, die Richtlinie, die simuliert werden soll, abzurufen, oder Richtlinien für Ressourcen in den Zugriffslogs abzurufen.
    • Der Nutzer ist nicht berechtigt, eine Gruppenmitgliedschaft einzusehen.
    • Der Nutzer kann die erforderlichen Rolleninformationen nicht abrufen.

    Welche Informationen fehlen, entnehmen Sie den Fehlerinformationen nach dem angegebenen Zugriffsstatus.

  • UNKNOWN_CONDITIONAL: In der getesteten Richtlinie gibt es eine bedingte Rollenbindung. Bedingungen werden von Policy Simulator nicht unterstützt, sodass die Bindung nicht evaluiert werden konnte.

Wenn das Ergebnis unbekannt ist, enthält das Feld accessDiff der Richtlinie (baseline oder simulated) das Feld errors, das angibt, warum die Informationen unbekannt sind, und das Feld policies, in dem die mit den Fehlern verbundenen Richtlinien aufgeführt sind. Weitere Informationen zu Fehlern finden Sie unter Fehler auf dieser Seite.

REST

In der REST API enthalten die Simulationsergebnisse den Grund dafür, warum das Ergebnis in der Zugriffsdifferenz unbekannt ist.

Wenn das Zugriffsergebnis unbekannt ist, liegt einer der folgenden Gründe vor:

  • UNKNOWN_INFO_DENIED: Der Nutzer ist nicht berechtigt, auf Informationen zuzugreifen, die zur Evaluierung des Zugriffsstatus erforderlich sind. Dies kann folgende Gründe haben:

    • Der Nutzer ist nicht berechtigt, die Richtlinie, die simuliert werden soll, abzurufen, oder Richtlinien für Ressourcen in den Zugriffslogs abzurufen.
    • Der Nutzer ist nicht berechtigt, eine Gruppenmitgliedschaft einzusehen.
    • Der Nutzer kann die erforderlichen Rolleninformationen nicht abrufen.

    Welche Informationen fehlen, entnehmen Sie den Fehlerinformationen nach dem angegebenen Zugriffsstatus.

  • UNKNOWN_CONDITIONAL: In der getesteten Richtlinie gibt es eine bedingte Rollenbindung. Bedingungen werden von Policy Simulator nicht unterstützt, sodass die Bindung nicht evaluiert werden konnte.

Wenn das Ergebnis unbekannt ist, enthält das Feld accessDiff der Richtlinie (baseline oder simulated) das Feld errors, das angibt, warum die Informationen unbekannt sind, und das Feld policies, in dem die mit den Fehlern verbundenen Richtlinien aufgeführt sind. Weitere Informationen zu Fehlern finden Sie unter Fehler auf dieser Seite.

Fehler

Policy Simulator ermittelt auch Fehler, die während der Simulation aufgetreten sind. Es ist wichtig, diese Fehler zu überprüfen, damit Sie die potenziellen Lücken in der Simulation verstehen.

Console

Policy Simulator kann verschiedene Arten von Fehlern ermitteln:

  • Vorgangsfehler: Die Simulation konnte nicht ausgeführt werden. Policy Simulator zeigt Vorgangsfehler oben auf der Suchergebnisseite an.

    Wenn die Fehlermeldung angibt, dass die Simulation nicht ausgeführt werden konnte, weil in Ihrem Projekt oder Ihrer Organisation zu viele Logs vorhanden sind, können Sie für die Ressource keine Simulation ausführen.

    Wenn dieser Fehler aus einem anderen Grund auftritt, führen Sie die Simulation nochmal aus. Wenn Sie die Simulation immer noch nicht ausführen können, wenden Sie sich an policy-simulator-feedback@google.com.

  • Wiederholungsfehler: Die erneute Ausführung eines einzelnen Zugriffsversuchs war nicht erfolgreich. Daher konnte Policy Simulator nicht ermitteln, ob sich das Ergebnis des Zugriffsversuchs unter der vorgeschlagenen Richtlinie ändert.

    In der Cloud Console werden Fehler bei der Wiederholung in der Tabelle Zugriffsänderungen in den letzten 90 Tagen aufgeführt. Der Bereich Änderungsdetails ansehen für jeden Fehler enthält eine Fehlermeldung, die hilft, das Problem zu nachzuvollziehen, sowie die Ressource und die Berechtigung, die beim Auftreten des Fehlers simuliert wurden.

  • Fehler bei nicht unterstützten Ressourcentypen: Die vorgeschlagene Richtlinie wirkt sich auf Berechtigungen im Zusammenhang mit einem nicht unterstützten Ressourcentyp aus, die Policy Simulator nicht simulieren kann.

    Policy Simulator listet diese Berechtigungen in den Simulationsergebnissen auf. Darin lässt sich feststellen, welche Berechtigungen nicht simuliert werden konnten.

gcloud

In den Simulationsergebnissen des gcloud-Tools können Fehler an zwei Stellen dargestellt werden:

  • Feld replayResult.error: Wenn die Wiederholung nicht erfolgreich war, gibt Policy Simulator den Fehler im Feld replayResult.error aus. Wenn ein Wiederholungsergebnis dieses Feld enthält, ist das Feld diff nicht vorhanden.
  • Das Feld replayResult.diff.accessDiff.policy-type.errors, wobei policy-type baseline oder simulated sein kann. Wenn der Wiederholungsversuch erfolgreich war, das Ergebnis jedoch UNKNOWN_INFO_DENIED oder UNKNOWN_CONDITIONAL ist, gibt Policy Simulator den Grund zurück, warum das Ergebnis in diesem Feld unbekannt ist.

Policy Simulator generiert die folgenden Fehlertypen:

Fehler Fehlercode Details
GENERIC_INTERNAL_ERROR 13 Die Simulation ist aufgrund eines internen Fehlers fehlgeschlagen. Um das Problem zu beheben, führen Sie die Simulation noch einmal aus. Wenn die Simulation weiterhin fehlschlägt, wenden Sie sich an policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator konnte den Zugriffsversuch nicht wiederholen, da er eine ungültige Berechtigung, einen ungültigen Ressourcennamen oder ein ungültiges Hauptkonto enthält.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator konnte die Mitgliedschaft des Hauptkontos in der Gruppe nicht evaluieren, da die Gruppe zu viele Untergruppen enthält. Dieser Fehler ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung zur Anzeige der Gruppenmitgliedschaft hat. Dieser Fehler ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung hat, eine IAM-Richtlinie abzurufen. Dieser Fehlertyp ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung hat, die Berechtigungen in einer IAM-Rolle abzurufen. Dieser Fehlertyp ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung hat, die IAM-Richtlinie einer Ancestor-Ressource abzurufen. Dieser Fehlertyp ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
UNIMPLEMENTED_MEMBER_TYPE 12 Das Zugriffs-Tupel enthält einen Hauptkontotyp, der von Policy Simulator nicht unterstützt wird.
UNIMPLEMENTED_MEMBER 12 Das Zugriffs-Tupel enthält ein Hauptkonto, das von Policy Simulator nicht unterstützt wird.
UNIMPLEMENTED_CONDITION 12 Das Zugriffs-Tupel enthält eine Bedingung, die von Policy Simulator nicht unterstützt wird. Dieser Fehlertyp ist mit UNKNOWN_CONDITIONAL-Zugriffsänderungen verbunden.
LOG_SIZE_TOO_LARGE 8 Die Ressource ist mit zu vielen Zugriffslogs verknüpft. Daher kann Policy Simulator die Simulation nicht ausführen. Weitere Informationen finden Sie auf der Seite mit den Policy Simulator-Konzepten unter Maximale Loggröße für die Wiederholung.
UNSUPPORTED_RESOURCE 12

Die vorgeschlagene Richtlinie ändert Berechtigungen, die mit nicht unterstützten Ressourcentypen verknüpft sind. Dieser Fehler wird im Feld replayResult.error angezeigt und enthält eine Liste der Berechtigungen, die mit nicht unterstützten Ressourcentypen verknüpft sind. Beispiel:


"error": {
  "code": 12,
  "details": [
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.create"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.setIamPolicy"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.get"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    }
  ],
  "message": "unsupported-permissions-error-message"
}

Weitere Informationen zu nicht unterstützten Ressourcentypen finden Sie auf der Policy Simulator-Konzeptseite unter Supportstufen für Ressourcentypen.

REST

In REST API-Simulationsergebnissen können Fehler an zwei Stellen enthalten sein:

  • Feld replayResult.error: Wenn die Wiederholung nicht erfolgreich war, gibt Policy Simulator den Fehler im Feld replayResult.error aus. Wenn ein Wiederholungsergebnis dieses Feld enthält, ist das Feld diff nicht vorhanden.
  • Das Feld replayResult.diff.accessDiff.policy-type.errors, wobei policy-type baseline oder simulated sein kann. Wenn der Wiederholungsversuch erfolgreich war, das Ergebnis jedoch UNKNOWN_INFO_DENIED oder UNKNOWN_CONDITIONAL ist, gibt Policy Simulator den Grund zurück, warum das Ergebnis in diesem Feld unbekannt ist.

Policy Simulator generiert die folgenden Fehlertypen:

Fehler Fehlercode Details
GENERIC_INTERNAL_ERROR 13 Die Simulation ist aufgrund eines internen Fehlers fehlgeschlagen. Um das Problem zu beheben, führen Sie die Simulation noch einmal aus. Wenn die Simulation weiterhin fehlschlägt, wenden Sie sich an policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator konnte den Zugriffsversuch nicht wiederholen, da er eine ungültige Berechtigung, einen ungültigen Ressourcennamen oder ein ungültiges Hauptkonto enthält.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator konnte die Mitgliedschaft des Hauptkontos in der Gruppe nicht evaluieren, da die Gruppe zu viele Untergruppen enthält. Dieser Fehler ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung zur Anzeige der Gruppenmitgliedschaft hat. Dieser Fehler ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung hat, eine IAM-Richtlinie abzurufen. Dieser Fehlertyp ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung hat, die Berechtigungen in einer IAM-Rolle abzurufen. Dieser Fehlertyp ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator konnte den Zugriff eines Nutzers nicht evaluieren, da der Aufrufer keine Berechtigung hat, die IAM-Richtlinie einer Ancestor-Ressource abzurufen. Dieser Fehlertyp ist mit UNKNOWN_INFO_DENIED-Zugriffsänderungen verbunden.
UNIMPLEMENTED_MEMBER_TYPE 12 Das Zugriffs-Tupel enthält einen Hauptkontotyp, der von Policy Simulator nicht unterstützt wird.
UNIMPLEMENTED_MEMBER 12 Das Zugriffs-Tupel enthält ein Hauptkonto, das von Policy Simulator nicht unterstützt wird.
UNIMPLEMENTED_CONDITION 12 Das Zugriffs-Tupel enthält eine Bedingung, die von Policy Simulator nicht unterstützt wird. Dieser Fehlertyp ist mit UNKNOWN_CONDITIONAL-Zugriffsänderungen verbunden.
LOG_SIZE_TOO_LARGE 8 Die Ressource ist mit zu vielen Zugriffslogs verknüpft. Daher kann Policy Simulator die Simulation nicht ausführen. Weitere Informationen finden Sie auf der Seite mit den Policy Simulator-Konzepten unter Maximale Loggröße für die Wiederholung.
UNSUPPORTED_RESOURCE 12

Die vorgeschlagene Richtlinie ändert Berechtigungen, die mit nicht unterstützten Ressourcentypen verknüpft sind. Dieser Fehler wird im Feld replayResult.error angezeigt und enthält eine Liste der Berechtigungen, die mit nicht unterstützten Ressourcentypen verknüpft sind. Beispiel:


"error": {
  "code": 12,
  "details": [
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.create"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.setIamPolicy"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.get"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    }
  ],
  "message": "unsupported-permissions-error-message"
}

Weitere Informationen zu nicht unterstützten Ressourcentypen finden Sie auf der Policy Simulator-Konzeptseite unter Supportstufen für Ressourcentypen.

Simulierte Richtlinienänderung anwenden

So wenden Sie eine simulierte Richtlinienänderung an:

Console

  1. Klicken Sie auf Vorgeschlagene Änderungen übernehmen.

  2. Klicken Sie im Bestätigungsdialogfeld auf Anwenden, um die Änderung zu bestätigen.

gcloud

Verwenden Sie den Befehl set-iam-policy und geben Sie den Pfad zur JSON-Datei an, die die simulierte Richtlinie enthält, die Sie anwenden möchten:

gcloud resource-type set-iam-policy resource-id filepath

Geben Sie folgende Werte an:

  • resource-type: Der Ressourcentyp, dessen Richtlinie Sie aktualisieren möchten. Beispiel: projects.
  • resource-id: Die ID der Ressource, deren Richtlinie Sie aktualisieren möchten. Beispiel: my-project.
  • filepath: Der Pfad zu einer Datei, die die aktualisierte Richtlinie enthält.

Die Antwort enthält die aktualisierte Richtlinie. Wenn Sie IAM-Richtlinien als Code verwenden und in einem Versionsverwaltungssystem ablegen, sollten Sie die vom gcloud-Tool zurückgegebene Richtlinie speichern und nicht die JSON-Datei, die die simulierte Richtlinie enthält.

REST

Legen Sie die vorgeschlagene Richtlinie als neue Richtlinie der Ressource fest.

Die Methode projects.setIamPolicy der Resource Manager API legt die Richtlinie in der Anfrage als neue IAM-Richtlinie des Projekts fest.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
  • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

HTTP-Methode und URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

JSON-Text anfordern:

{
  "policy": {
    POLICY
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Die Antwort enthält die aktualisierte Richtlinie.


Simulationsergebnisse speichern

Wenn Sie das gcloud-Tool verwenden, können Sie die Policy Simulator-Ergebnisse als JSON-, YAML- oder CSV-Datei speichern.

Als JSON- oder YAML-Datei speichern

Um die Ergebnisse einer Simulation als JSON- oder YAML-Datei zu speichern, fügen Sie dem Befehl replay-recent-access beim Ausführen der Simulation das folgende Flag hinzu:

--output=output-format > filename

Ersetzen Sie dabei die folgenden Werte:

  • output-format: Die Sprache der exportierten Datei, entweder json oder yaml.
  • filename: Der Name für die exportierte Datei.

Als CSV-Datei speichern

Um die Ergebnisse einer Simulation als CSV-Datei zu speichern, fügen Sie beim Ausführen der Simulation zum Befehl replay-recent-access das folgende Flag hinzu:

--flatten="diffs[]" --format=csv(output-fields) > filename

Ersetzen Sie dabei die folgenden Werte:

  • output-fields: Eine durch Kommas getrennte Liste der Felder, die Sie in die exportierten Ergebnisse aufnehmen möchten. Beispiel: diffs.accessTuple.principal, diffs.accessTuple.permission
  • filename: Der Name für die exportierte Datei.

Optional können Sie dem Flag --flatten zusätzliche Felder hinzufügen, z. B. errors[]. Wenn Sie dem Flag --flatten Felder hinzufügen, haben Sie die Möglichkeit, die Elemente in diesen Feldern in separaten Zeilen der CSV-Datei anzugeben.

Das folgende Beispiel zeigt einen replay-recent-access-Befehl, mit dem die wichtigsten Felder der Simulationsergebnisse als CSV-Datei simulation-results.csv gespeichert werden:

gcloud iam simulator replay-recent-access --flatten="diffs[]" \
    --format="csv(diffs.accessTuple.principal, diffs.accessTuple.permission, \
    diffs.accessTuple.fullResourceName, diffs.diff.accessDiff.accessChange, \
    diffs.diff.accessDiff.baseline.accessState, \
    diffs.diff.accessDiff.simulated.accessState)" \
    //cloudresourcemanager.googleapis.com/projects/my-project \
    proposed-policy.json > simulation-results.csv

In diesem Beispiel wird proposed-policy.json für das Projekt my-project simuliert und die Ergebnisse werden als simulation-results.csv gespeichert. Diese CSV-Datei enthält die folgenden Felder: Hauptkonto, Berechtigung, Ressource, Zugriffsänderung, aktueller Zugriffsstatus und simulierter Zugriffsstatus.

Weitere Informationen zur Formatierung mit dem gcloud-Tool finden Sie unter Formate.

Nächste Schritte