Testa le modifiche dei ruoli con Policy Simulator

Questa pagina descrive come simulare una modifica a un criterio di autorizzazione utilizzando Policy Simulator per i criteri di autorizzazione di Identity and Access Management. Inoltre, spiega come interpretare i risultati della simulazione e come applicare il criterio di autorizzazione simulato, se vuoi.

Prima di iniziare

Autorizzazioni obbligatorie

Prima di simulare una modifica a un criterio di autorizzazione, devi assicurarti di disporre delle autorizzazioni appropriate. Per eseguire una simulazione sono necessarie alcune autorizzazioni; altre non sono necessarie, ma ti aiutano a ottenere i risultati più completi dalla simulazione.

Per scoprire di più sui ruoli di Identity and Access Management (IAM), consulta Informazioni sui ruoli.

Autorizzazioni richieste per le risorse di destinazione

La risorsa di destinazione della simulazione è la risorsa di cui stai simulando i criteri di autorizzazione.

Per ottenere le autorizzazioni necessarie per eseguire una simulazione, chiedi all'amministratore di concederti i seguenti ruoli IAM sulla risorsa di destinazione:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per eseguire una simulazione. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per eseguire una simulazione sono necessarie le seguenti autorizzazioni:

  • cloudasset.assets.searchAllResources
  • policysimulator.replays.run
  • service.resource.getIamPolicy, dove resource è il tipo di risorsa della risorsa di destinazione e service è il nome del servizio Google Cloud proprietario della risorsa.

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Autorizzazioni delle risorse host richieste

La risorsa host di una simulazione è il progetto, la cartella o l'organizzazione che crea ed esegue la simulazione. La risorsa host non deve essere correlata in alcun modo alla risorsa di destinazione.

Il modo in cui imposti la risorsa host dipende dalla piattaforma che utilizzi.

Console

La risorsa host è il progetto, la cartella o l'organizzazione visualizzata nel selettore di risorse.

Per modificare la risorsa host, scegli un progetto, una cartella o un'organizzazione diversa nel selettore delle risorse.

gcloud

La risorsa host è il progetto quota attuale. Per impostare il progetto quota, usa il comando gcloud auth application-default set-quota-project.

REST

Specifichi manualmente la risorsa host ogni volta che invii una richiesta. Per informazioni dettagliate, consulta la sezione Simulare una modifica delle norme in questa pagina.

Per ottenere le autorizzazioni necessarie per eseguire una simulazione, chiedi all'amministratore di concederti il ruolo IAM Amministratore del simulatore (roles/policysimulator.admin) nella risorsa host. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per eseguire una simulazione. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per eseguire una simulazione sono necessarie le seguenti autorizzazioni:

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

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Per ottenere i risultati più completi da una simulazione, ti consigliamo di disporre di determinate autorizzazioni IAM e Google Workspace. Se non disponi di alcune o di tutte queste autorizzazioni, puoi comunque eseguire una simulazione. Tuttavia, eseguire una simulazione senza queste autorizzazioni potrebbe comportare un aumento del numero di modifiche di accesso sconosciute, perché potresti non essere in grado di recuperare informazioni che potrebbero influire sui risultati della simulazione.

Ti consigliamo di disporre del ruolo Revisore della sicurezza (roles/iam.securityReviewer) per la tua organizzazione quando esegui una simulazione. In alternativa, se disponi già del ruolo Amministratore sicurezza (roles/iam.securityAdmin), non è necessario che ti vengano concessi altri ruoli.

Questi ruoli ti forniscono le seguenti autorizzazioni, che ti aiutano a ottenere i risultati più completi dalla simulazione:

  • iam.roles.get e iam.roles.list in progetti, cartelle o organizzazioni pertinenti in cui sono definiti i ruoli personalizzati. Un progetto, una cartella o un'organizzazione è pertinente se è un'antenata o un discendente della risorsa di cui stai simulando il criterio di autorizzazione.
  • service.resource.getIamPolicy, dove resource è il nome di un tipo di risorsa che può avere un criterio di autorizzazione e service è il nome del servizio Google Cloud proprietario della risorsa.

    Quando esegui una simulazione, ti consigliamo di disporre di questa autorizzazione su ogni risorsa che soddisfa i seguenti criteri:

    • Policy Simulator supporta la risorsa.
    • La risorsa ha un criterio di autorizzazione che potrebbe influire sull'accesso dell'utente. Questo accade se si applica una delle seguenti condizioni:

      • La risorsa è un discendente della risorsa di cui stai simulando il criterio di autorizzazione e viene visualizzata nei log di accesso pertinenti.
      • La risorsa è un'antenata della risorsa di cui stai simulando il criterio di autorizzazione.

    Ad esempio, immagina di voler simulare un criterio di autorizzazione per un progetto. Se i log di accesso includono un tentativo di accesso a un bucket Cloud Storage nel progetto, devi disporre dell'autorizzazione storage.buckets.getIamPolicy per il bucket. Se il progetto ha una cartella principale con un criterio di autorizzazione, devi disporre anche dell'autorizzazione resourcemanager.folders.getIamPolicy per quella cartella.

Ti consigliamo di disporre dell'autorizzazione per recuperare le informazioni sull'appartenenza al gruppo per ogni gruppo Google nelle norme relative alle autorizzazioni originali e in quelle proposte.

In genere, i super amministratori e gli amministratori dei gruppi di Google Workspace hanno accesso per visualizzare l'appartenenza al gruppo. Se non sei un super amministratore o un amministratore di gruppo, chiedi all'amministratore di Google Workspace di creare un ruolo amministrativo di Google Workspace personalizzato che contenga il privilegio groups.read (in Privilegi API di amministrazione) e di concedertelo. In questo modo puoi visualizzare l'appartenenza di tutti i gruppi all'interno del tuo dominio e simulare in modo più efficace le modifiche a un criterio di autorizzazione.

Simulare una modifica ai criteri

Per simulare una modifica a un criterio di autorizzazione, segui questi passaggi.

Console

L'esempio seguente mostra come simulare una modifica a un criterio di autorizzazione per un progetto. Tuttavia, puoi simulare una modifica a un criterio di autorizzazione per qualsiasi risorsa che ne abbia uno.

Modifica le autorizzazioni di un amministratore e, anziché fare clic su Salva, fai clic su Testa modifiche:

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai alla pagina IAM

  2. Crea una modifica proposta al criterio di autorizzazione modificando le autorizzazioni di un principale esistente:

    1. Individua il principale di cui vuoi modificare l'accesso e fai clic sul pulsante Modifica a destra.
    2. Modifica l'accesso dell'entità aggiungendo un nuovo ruolo oppure revocando o modificando un ruolo esistente.
  3. Per simulare la modifica proposta, fai clic su Testa modifiche.

  4. Dopo alcuni minuti, la console Google Cloud mostrerà i risultati della simulazione sotto forma di elenco di modifiche di accesso. Per ulteriori informazioni, consulta Informazioni sui risultati Policy Simulator norme in questa pagina.

    Se non sono state apportate modifiche all'accesso tra il criterio di autorizzazione esistente e quello simulato, la console Google Cloud non mostrerà alcuna modifica all'accesso.

gcloud

Per simulare una modifica a un criterio di autorizzazione, segui il pattern di lettura, modifica e scrittura, ma simula il criterio di autorizzazione anziché scriverlo.

  1. Leggi il criterio di autorizzazione corrente eseguendo il seguente comando:

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

    Sostituisci i seguenti valori:

    • resource-type: il tipo di risorsa per cui vuoi simulare un criterio di autorizzazione. Ad esempio, projects.
    • resource-id: l'ID della risorsa di cui vuoi simulare il criterio di autorizzazione. Ad esempio, my-project.
    • format: il formato della risposta. Utilizza il valore json o yaml.
    • filepath: il percorso di un nuovo file di output per il criterio di autorizzazione.

    Ad esempio, il seguente comando recupera il criterio di autorizzazione per il progettomy-project in formato JSON e lo salva nella home directory dell'utente:

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json
  2. Modifica il criterio di autorizzazione JSON o YAML restituito dal comando get-iam-policy per riflettere le modifiche che vuoi simulare.

    Esistono diversi tipi di modifiche che puoi apportare al criterio di autorizzazione. Ad esempio, puoi aggiungere o rimuovere un entità da un'associazione di ruoli oppure rimuovere un'associazione di ruoli dal criterio di autorizzazione.

  3. Esegui il comando seguente per simulare la modifica del criterio di autorizzazione:

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

    Sostituisci i seguenti valori:

    • full-resource-name: il nome completo della risorsa il cui criterio di autorizzazione vuoi simulare.

      Il nome completo della risorsa è un URI costituito dal nome del servizio e dal percorso della risorsa. Ad esempio, se stai simulando un criterio di autorizzazione per un progetto, devi utilizzare //cloudresourcemanager.googleapis.com/projects/project- id, dove project-id è l'ID del progetto di cui stai simulando il criterio di autorizzazione.

      Per un elenco dei formati dei nomi completi delle risorse, consulta Nomi completi della risorsa.

    • filepath: il percorso del file contenente il criterio di autorizzazione modificato che vuoi simulare. Ad esempio, ~/proposed_policy.json.

    • format: il formato della risposta. Ad esempio, json o yaml.

    Dopo alcuni minuti, il comando stampa un elenco di risultati della riproduzione che spiegano in che modo l'accesso dell'entità cambierebbe se la policy di autorizzazione proposta fosse applicata. Questi risultati elencano anche eventuali errori che si sono verificati durante la simulazione, inclusi quelli dovuti a tipi di risorse non supportati.

    Consulta la sezione Informazioni sui risultati del simulatore di norme in questa pagina per scoprire come leggere i risultati. Per scoprire come salvare i risultati della simulazione anziché stamparli, consulta Salvare i risultati della simulazione.

    Di seguito è riportata una risposta di esempio per una simulazione di criteri di autorizzazione che coinvolge l'utente my-user@example.com. In questo caso, se la modifica proposta venisse applicata, my-user@example.com potrebbe non disporre più delle autorizzazioni resourcemanager.projects.list e resourcemanager.projects.get per il progetto my-project e non disporrebbe più dell'autorizzazione resourcemanager.projects.update per il progetto 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."
        }
      }
    ]

    Se non sono state apportate modifiche all'accesso tra il criterio di autorizzazione esistente e quello simulato, il comando stampa No access changes found in the replay.

REST

Per simulare una modifica a un criterio di autorizzazione, segui il pattern di lettura, modifica e scrittura, ma anziché scrivere il criterio di autorizzazione, crea ed esegui una simulazione.

  1. Leggi il criterio di autorizzazione per la risorsa.

    Per ottenere il criterio di autorizzazione di un progetto, utilizza il metodo projects.getIamPolicy dell'API Resource Manager.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

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

  2. Modifica il criterio di autorizzazione restituito in modo da riflettere le modifiche che vuoi simulare.

    Esistono diversi tipi di modifiche che puoi apportare al criterio di autorizzazione. Ad esempio, puoi aggiungere o rimuovere un entità da un'associazione di ruoli oppure rimuovere un'associazione di ruoli dal criterio di autorizzazione.

  3. Crea una simulazione o esegui un replay con il criterio di autorizzazione modificato.

    Per creare una simulazione per un progetto, una cartella o un'organizzazione, utilizza il metodo replays.create dell'API Policy Simulator.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • HOST_RESOURCE_TYPE: il tipo di risorsa che ospiterà la ripetizione. Questo valore deve essere projects, folders o organizations.
    • HOST_RESOURCE_ID: l'ID della risorsa host, ad esempio my-project.
    • TARGET_FULL_RESOURCE_NAME: il nome completo della risorsa di cui vuoi simulare il criterio. Questa risorsa può essere qualsiasi risorsa che accetta i criteri IAM e non deve essere correlata alla risorsa host in alcun modo.

      Il nome completo della risorsa è un URI costituito dal nome del servizio e dal percorso della risorsa. Ad esempio, se stai simulando un criterio per un progetto, devi utilizzare //cloudresourcemanager.googleapis.com/projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto di cui stai simulando il criterio.

      Per un elenco completo dei formati dei nomi delle risorse, consulta Nomi completi della risorsa.

    • POLICY: il criterio che vuoi simulare. Per un esempio di criterio, consulta la documentazione di riferimento.

      Per simulare più criteri, includi più coppie "OBJECT_FULL_RESOURCE_NAME" : POLICY nel corpo della richiesta.

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.

    Metodo HTTP e URL:

    POST https://policysimulator.googleapis.com/v1/HOST_RESOURCE_TYPE/HOST_RESOURCE_ID/locations/global/replays

    Corpo JSON della richiesta:

    {
      "config": {
        "policyOverlay": {
          "TARGET_FULL_RESOURCE_NAME" : POLICY
        }
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il nome di un'operazione che rappresenta la riproduzione:

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

  4. Esegui il polling del metodo operations.get fino al completamento del replay.

    Per eseguire il polling di un'operazione, ti consigliamo di invocare ripetutamente il metodo operations.get finché la risposta non include il campo "done": true e un campo name con il nome della riproduzione completata. Utilizza il backoff esponenziale troncato per introdurre un ritardo tra ogni richiesta.

    Per ottenere lo stato di una riproduzione, utilizza il metodo operations.get dell'API Policy Simulator.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • OPERATION_NAME: il nome di un'operazione di riproduzione, incluso il prefisso operations. Copia questo valore dal campo name di una risposta replays.create. Ad esempio: operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8
    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.

    Metodo HTTP e URL:

    GET https://policysimulator.googleapis.com/v1/OPERATION_NAME

    Per inviare la richiesta, espandi una di queste opzioni:

    Le operazioni in corso restituiscono una risposta simile alla seguente:

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

    Le operazioni completate restituiscono una risposta simile alla seguente:

    {
      "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. Ottieni i risultati della riproduzione.

    Per ottenere i risultati di una riproduzione, utilizza il metodo replays.results.list dell'API Policy Simulator.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • REPLAY_NAME: il nome della Replay per cui vuoi recuperare i risultati. Copia questo valore dal campo response.replay.name di una risposta operations.get. Includi eventuali prefissi di tipo di risorsa e posizione. Ad esempio, "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b"
    • PAGE_SIZE: facoltativo. Il numero massimo di risultati da restituire da questa richiesta. Se non viene specificato, il server determinerà il numero di risultati da restituire. Se il numero di risultati è maggiore del numero di elementi per pagina, la risposta contiene un token di paginazione che puoi utilizzare per recuperare la pagina successiva di risultati.
    • PAGE_TOKEN: facoltativo. Il token di pagina restituito in una risposta precedente di questo metodo. Se specificato, l'elenco dei risultati inizierà dove è terminata la richiesta precedente.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.

    Metodo HTTP e URL:

    GET https://policysimulator.googleapis.com/v1/REPLAY_NAME/results?pageSize=page-size&pageToken=PAGE_TOKEN

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene un elenco di risultati che spiegano in che modo cambierebbe l'accesso dell'entità se fosse applicata la policy proposta. Questi risultati elencano anche eventuali errori verificatisi durante la simulazione, in particolare quelli dovuti a tipi di risorse non supportati.

    Per scoprire come leggere i risultati, consulta la sezione Informazioni sui risultati del simulatore di norme in questa pagina.

    Di seguito è riportata una risposta di esempio per una simulazione di criteri che coinvolge l'utente my-user@example.com. In questo caso, se la modifica proposta venisse applicata, my-user@example.com potenzialmente non avrebbe più le autorizzazioni resourcemanager.projects.list e resourcemanager.projects.get per il progetto my-project e non avrebbe più l'autorizzazione resourcemanager.projects.update per il progetto 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"
    }
    

    Se non è stata apportata alcuna modifica all'accesso tra il criterio di autorizzazione esistente e il criterio di autorizzazione simulato, la richiesta restituisce un elenco vuoto ({}).

Informazioni sui risultati di Policy Simulator

Policy Simulator segnala l'impatto di una modifica proposta a un criterio di autorizzazione come elenco di modifiche di accesso. Ogni modifica dell'accesso rappresenta un tentativo di accesso degli ultimi 90 giorni che avrebbe un esito diverso in base al criterio di autorizzazione proposto rispetto a quello attuale.

Policy Simulator elenca anche gli errori che si sono verificati durante la simulazione, il che ti aiuta a identificare potenziali lacune nella simulazione.

La presentazione di queste modifiche ed errori dipende dalla piattaforma che stai utilizzando.

Console

La pagina dei risultati del Simulatore di criteri mostra i risultati della simulazione in diverse sezioni:

  • Modifiche alle norme: in questa sezione sono elencati la risorsa per cui stai proponendo modifiche al criterio di autorizzazione, i ruoli che stai proponendo di rimuovere e i ruoli che stai proponendo di aggiungere.

    Questa sezione contiene anche un pulsante Visualizza differenze policy. Se fai clic su questo pulsante, puoi visualizzare il criterio di autorizzazione della risorsa prima e dopo le modifiche proposte.

  • Modifiche alle autorizzazioni: questa sezione contiene i conteggi delle autorizzazioni rimosse e aggiunte, che descrivono in che modo le autorizzazioni dell'entità cambierebbero se si applicassero le modifiche proposte. Questi conteggi delle autorizzazioni vengono calcolati confrontando le autorizzazioni nei ruoli attuali dell'entità con quelle nei ruoli proposti, ignorando i ruoli ereditati.

    Questa sezione contiene anche un pulsante Visualizza diff autorizzazioni. Se fai clic su questo pulsante, puoi visualizzare un confronto affiancato delle autorizzazioni nei ruoli attuali e proposti dell'entità.

  • Modifiche all'accesso negli ultimi 90 giorni: questa sezione mostra i tentativi di accesso degli ultimi 90 giorni che hanno risultati diversi in base al criterio di autorizzazione proposto e a quello attuale. Questa sezione include sia un riepilogo delle modifiche di accesso sia una tabella con risultati più dettagliati.

    Il riepilogo delle modifiche di accesso elenca il numero di ciascun tipo di modifica di accesso, il numero di errori e risultati sconosciuti e il numero di tentativi di accesso che hanno lo stesso risultato in base al criterio di autorizzazione proposto e a quello corrente. Il riepilogo mostra anche quante autorizzazioni non è stato possibile simulare. Per ulteriori informazioni, vedi Errori in questa pagina.

    Questa sezione contiene anche una tabella delle modifiche di accesso. Questa tabella elenca ogni tentativo di accesso degli ultimi 90 giorni che ha un risultato diverso in base al criterio di autorizzazione proposto e a quello attuale. Ogni voce include la risorsa a cui l'entità stava tentando di accedere, la data della richiesta, l'entità che ha effettuato la richiesta, l'autorizzazione nella richiesta e lo stato di accesso in base al criterio di autorizzazione proposto rispetto allo stato di accesso in base al criterio di autorizzazione corrente.

    Esistono diversi tipi di modifiche dell'accesso:

    Modifica accesso Dettagli
    Accesso revocato L'entità aveva accesso in base al criterio di autorizzazione corrente, ma non avrà più accesso dopo la modifica proposta.
    Accesso potenzialmente revocato

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità aveva accesso in base al criterio di autorizzazione corrente, ma il suo accesso in base al criterio di autorizzazione proposto è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma non avrà accesso dopo la modifica proposta.
    Accesso ottenuto L'entità non aveva accesso ai sensi del criterio di autorizzazione corrente, ma avrà accesso dopo la modifica proposta.
    Accesso potenzialmente ottenuto

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità non aveva accesso in base al criterio di autorizzazione corrente, ma il suo accesso dopo la modifica proposta è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma avrà accesso dopo la modifica proposta.
    Accesso sconosciuto L'accesso dell'entità sia nel criterio di autorizzazione corrente sia in quello proposto è sconosciuto e le modifiche proposte potrebbero influire sull'accesso dell'entità.
    Errore Si è verificato un errore durante la simulazione.

    Per visualizzare ulteriori dettagli su una modifica di accesso, fai clic sulla modifica di accesso. Si apre il riquadro Dettagli cambiamento di accesso, che mostra informazioni aggiuntive sulla modifica dell'accesso, tra cui l'accesso esistente dell'entità, l'accesso proposto dall'entità e ulteriori dettagli sul risultato della modifica dell'accesso.

gcloud

Quando utilizzi il comando replay-recent-access, la risposta dell'interfaccia a riga di comando gcloud contiene un elenco di replayResults.

Ogni risultato della riproduzione descrive un tentativo di accesso il cui risultato sarebbe stato diverso se la regola di autorizzazione proposta fosse stata in vigore al momento del tentativo. Ad esempio, il seguente risultato della riproduzione mostra che my-user@example.com ha utilizzato l'autorizzazione resourcemanager.projects.update nel passato per eseguire un'azione nel progetto my-project. Tuttavia, se il criterio di autorizzazione proposto fosse stato in vigore, l'accesso sarebbe stato negato.

{
  "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"
    }
  }
}

Ogni risultato della riproduzione contiene i seguenti campi:

  • accessTuple: il tentativo di accesso a cui si riferisce il risultato. Questo campo include la risorsa, l'autorizzazione e l'entità coinvolte nel tentativo di accesso.

  • lastSeenDate: la data dell'ultimo tentativo di accesso.

  • diff.accessDiff o error: se la riproduzione di un tentativo di accesso è andata a buon fine, il risultato contiene un campo diff.accessDiff che indica la differenza tra i risultati del tentativo di accesso in base alle norme di autorizzazione attuali e a quelle proposte. Se il tentativo di riproduzione non va a buon fine, il risultato della riproduzione contiene un campo error con una descrizione dell'errore. Per saperne di più sugli errori di simulazione, consulta la sezione Errori in questa pagina.

Ogni differenza di accesso contiene i seguenti componenti:

  • baseline: il risultato di accesso quando si utilizza il criterio di autorizzazione corrente. Viene riportato come uno dei seguenti valori: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED. Se il risultato è UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED, la risposta elenca anche eventuali errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a quell'errore. Per ulteriori informazioni sui valori UNKNOWN, consulta Risultati sconosciuti in questa pagina.
  • simulated: il risultato dell'accesso quando si utilizza il criterio di autorizzazione proposto. Questo valore viene riportato come uno dei seguenti: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED. Se il risultato è UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED, la risposta elenca anche eventuali errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a quell'errore. Per ulteriori informazioni sui valori UNKNOWN, consulta Risultati sconosciuti in questa pagina.
  • accessChange: la differenza tra lo stato di accesso di riferimento e lo stato di accesso simulato. Consulta la tabella seguente per un elenco di possibili valori:

    Modifica accesso Dettagli
    ACCESS_REVOKED L'entità aveva accesso in base al criterio di autorizzazione corrente, ma non avrà più accesso dopo la modifica proposta.
    ACCESS_MAYBE_REVOKED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità aveva accesso in base al criterio di autorizzazione corrente, ma il suo accesso in base al criterio di autorizzazione proposto è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma non avrà accesso dopo la modifica proposta.
    ACCESS_GAINED L'entità non aveva accesso ai sensi del criterio di autorizzazione corrente, ma lo avrà dopo la modifica proposta.
    ACCESS_MAYBE_GAINED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità non aveva accesso in base al criterio di autorizzazione corrente, ma il suo accesso dopo la modifica proposta è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma avrà accesso dopo la modifica proposta.
    UNKNOWN_CHANGE L'accesso dell'entità sia nel criterio di autorizzazione corrente sia in quello proposto è sconosciuto e le modifiche proposte potrebbero influire sull'accesso dell'entità.

REST

Quando chiami il metodo replays.results.list, la risposta contiene un elenco di replayResults.

Ogni risultato della riproduzione descrive un tentativo di accesso il cui risultato sarebbe stato diverso se la regola di autorizzazione proposta fosse stata in vigore al momento del tentativo. Ad esempio, il seguente risultato della riproduzione mostra che my-user@example.com ha utilizzato l'autorizzazione resourcemanager.projects.update nel passato per eseguire un'azione nel progetto my-project. Tuttavia, se il criterio di autorizzazione proposto fosse stato applicato, l'accesso sarebbe stato negato.

{
  "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"
    }
  }
}

Ogni risultato della riproduzione contiene i seguenti campi:

  • accessTuple: il tentativo di accesso a cui si riferisce il risultato. Questo campo include la risorsa, l'autorizzazione e l'entità coinvolte nel tentativo di accesso.

  • lastSeenDate: la data dell'ultimo tentativo di accesso.

  • diff.accessDiff o error: se la riproduzione di un tentativo di accesso è andata a buon fine, il risultato contiene un campo diff.accessDiff che indica la differenza tra i risultati del tentativo di accesso in base alle norme di autorizzazione attuali e a quelle proposte. Se il tentativo di riproduzione non va a buon fine, il risultato della riproduzione contiene un campo error con una descrizione dell'errore. Per saperne di più sugli errori di simulazione, consulta la sezione Errori in questa pagina.

Ogni differenza di accesso contiene i seguenti componenti:

  • baseline: il risultato dell'accesso quando si utilizza il criterio di autorizzazione corrente. Viene riportato come uno dei seguenti valori: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED. Se il risultato è UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED, la risposta elenca anche eventuali errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a quell'errore. Per ulteriori informazioni sui valori UNKNOWN, consulta Risultati sconosciuti in questa pagina.
  • simulated: il risultato dell'accesso quando si utilizza il criterio di autorizzazione proposto. Questo valore viene riportato come uno dei seguenti: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED. Se il risultato è UNKNOWN_CONDITIONAL o UNKNOWN_INFO_DENIED, la risposta elenca anche eventuali errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a quell'errore. Per ulteriori informazioni sui valori UNKNOWN, consulta Risultati sconosciuti in questa pagina.
  • accessChange: la differenza tra lo stato di accesso di riferimento e lo stato di accesso simulato. Consulta la tabella seguente per un elenco di possibili valori:

    Modifica accesso Dettagli
    ACCESS_REVOKED L'entità aveva accesso in base al criterio di autorizzazione corrente, ma non avrà più accesso dopo la modifica proposta.
    ACCESS_MAYBE_REVOKED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità aveva accesso in base al criterio di autorizzazione corrente, ma il suo accesso in base al criterio di autorizzazione proposto è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma non avrà accesso dopo la modifica proposta.
    ACCESS_GAINED L'entità non aveva accesso ai sensi del criterio di autorizzazione corrente, ma avrà accesso dopo la modifica proposta.
    ACCESS_MAYBE_GAINED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità non aveva accesso in base al criterio di autorizzazione corrente, ma il suo accesso dopo la modifica proposta è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma avrà accesso dopo la modifica proposta.
    UNKNOWN_CHANGE L'accesso dell'entità sia nel criterio di autorizzazione corrente sia in quello proposto è sconosciuto e le modifiche proposte potrebbero influire sull'accesso dell'entità.

Risultati sconosciuti

Se un risultato di accesso è sconosciuto, significa che Policy Simulator non ha avuto informazioni sufficienti per valutare completamente il tentativo di accesso.

Console

Se il risultato di un accesso è sconosciuto, il riquadro dei dettagli della modifica dell'accesso riporta il motivo per cui non è noto, oltre ai ruoli specifici, ai criteri di autorizzazione, alle iscrizioni ai gruppi e alle condizioni a cui non è stato possibile accedere o valutare.

Esistono diversi motivi per cui un risultato può essere sconosciuto:

  • Informazioni sul ruolo negate: l'entità che esegue la simulazione non aveva l'autorizzazione per visualizzare i dettagli di uno o più ruoli simulati.
  • Impossibile accedere al criterio: l'entità che esegue la simulazione non aveva l'autorizzazione per recuperare il criterio di autorizzazione per una o più delle risorse coinvolte nella simulazione.
  • Informazioni sull'appartenenza negate: l'entità che esegue la simulazione non aveva l'autorizzazione per visualizzare i membri di uno o più gruppi inclusi nel criterio di autorizzazione proposto.
  • Condizione non supportata: nel criterio di autorizzazione in fase di test è presente un'associazione di ruoli condizionale. Policy Simulator non supporta le condizioni, pertanto non è stato possibile valutare l'associazione.

gcloud

Nella gcloud CLI, i risultati della simulazione indicheranno il motivo per cui il risultato è sconosciuto nella differenza di accesso.

Il motivo per cui il risultato dell'accesso è sconosciuto sarà uno dei seguenti:

  • UNKNOWN_INFO_DENIED: l'utente non dispone dell'autorizzazione per accedere alle informazioni necessarie per valutare lo stato di accesso. Ciò può accadere per uno dei seguenti motivi:

    • L'utente non dispone dell'autorizzazione per recuperare il criterio di autorizzazione in simulazione o non dispone dell'autorizzazione per recuperare i criteri di autorizzazione per le risorse nei log di accesso.
    • L'utente non dispone dell'autorizzazione per visualizzare l'appartenenza a un gruppo.
    • L'utente non riesce a recuperare le informazioni necessarie sul ruolo.

    Per sapere quali informazioni mancavano, consulta le informazioni sull'errore riportate dopo lo stato di accesso registrato.

  • UNKNOWN_CONDITIONAL: nel criterio di autorizzazione in fase di test è presente un'associazione di ruoli condizionale. Policy Simulator non supporta le condizioni, pertanto non è stato possibile valutare l'associazione.

Se il risultato è sconosciuto, il campo per il criterio di autorizzazione (baseline o simulated) contiene un campo errors che descrive il motivo per cui le informazioni erano sconosciute e un campo policies che elenca i criteri di autorizzazione associati ai errori. Per ulteriori informazioni sugli errori, vedi Errori in questa pagina.

REST

Nell'API REST, i risultati della simulazione indicheranno il motivo per cui il risultato è sconosciuto nella differenza di accesso.

Il motivo per cui il risultato dell'accesso è sconosciuto sarà uno dei seguenti:

  • UNKNOWN_INFO_DENIED: l'utente non dispone dell'autorizzazione per accedere alle informazioni necessarie per valutare lo stato di accesso. Ciò può accadere per uno dei seguenti motivi:

    • L'utente non dispone dell'autorizzazione per recuperare il criterio di autorizzazione in simulazione o non dispone dell'autorizzazione per recuperare i criteri di autorizzazione per le risorse nei log di accesso.
    • L'utente non dispone dell'autorizzazione per visualizzare l'appartenenza a un gruppo.
    • L'utente non riesce a recuperare le informazioni necessarie sul ruolo.

    Per sapere quali informazioni mancavano, consulta le informazioni sull'errore riportate dopo lo stato di accesso registrato.

  • UNKNOWN_CONDITIONAL: nel criterio di autorizzazione in fase di test è presente un'associazione di ruoli condizionale. Policy Simulator non supporta le condizioni, pertanto non è stato possibile valutare l'associazione.

Se il risultato è sconosciuto, il campo per il criterio di autorizzazione (baseline o simulated) contiene un campo errors che descrive il motivo per cui le informazioni erano sconosciute e un campo policies che elenca i criteri di autorizzazione associati ai errori. Per ulteriori informazioni sugli errori, vedi Errori in questa pagina.

Errori

Policy Simulator segnala anche eventuali errori che si sono verificati durante la simulazione. È importante esaminare questi errori per comprendere le potenziali lacune nella simulazione.

Console

Policy Simulator potrebbe segnalare diversi tipi di errori:

  • Errori di operazione: non è stato possibile eseguire la simulazione. Policy Simulator segnala gli errori di operazione nella parte superiore della pagina dei risultati.

    Se il messaggio di errore indica che la simulazione non è stata eseguita perché sono presenti troppi log nel progetto o nell'organizzazione, non puoi eseguire una simulazione sulla risorsa.

    Se ricevi questo errore per un altro motivo, prova a eseguire di nuovo la simulazione. Se non riesci ancora a eseguire la simulazione, contatta policy-simulator-feedback@google.com.

  • Errori di riproduzione: la riproduzione di un singolo tentativo di accesso non è andata a buon fine, pertanto Policy Simulator non è stato in grado di determinare se il risultato del tentativo di accesso cambierebbe in base al criterio di autorizzazione proposto.

    La console Google Cloud elenca gli errori di riproduzione nella tabella Modifiche all'accesso negli ultimi 90 giorni. Il riquadro Dettagli della modifica dell'accesso per ogni errore include un messaggio di errore che ti aiuta a comprendere il problema, nonché la risorsa e l'autorizzazione che erano in fase di simulazione quando si è verificato l'errore.

  • Errori relativi a tipi di risorse non supportati: il criterio di autorizzazione proposto influisce sulle autorizzazioni associate a un tipo di risorsa non supportato, che Policy Simulator non può simulare.

    Policy Simulator elenca queste autorizzazioni nei risultati della simulazione in modo che tu possa sapere quali autorizzazioni non è stato possibile simulare.

gcloud

Nei risultati della simulazione gcloud CLI, gli errori possono comparire in due punti:

  • Il campo replayResult.error: se il tentativo di riproduzione non è andato a buon fine, Policy Simulator segnala l'errore nel campo replayResult.error. Se un risultato della riproduzione contiene questo campo, non contiene un campo diff.
  • Il campo replayResult.diff.accessDiff.policy-type.errors, dove policy-type è baseline o simulated. Se il tentativo di riproduzione è andato a buon fine, ma il risultato è UNKNOWN_INFO_DENIED o UNKNOWN_CONDITIONAL, in questo campo viene riportato il motivo per cui il risultato è sconosciuto.

Policy Simulator genera i seguenti tipi di errori:

Errore Codice di errore Dettagli
GENERIC_INTERNAL_ERROR 13 La simulazione non è riuscita a causa di un errore interno. Per risolvere il problema, prova a eseguire di nuovo la simulazione. Se la simulazione continua a non riuscire, contatta policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator non è riuscito a riprodurre nuovamente il tentativo di accesso perché conteneva un'autorizzazione, un nome della risorsa o un principale non valido.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator non è stato in grado di valutare l'appartenenza del principale al gruppo perché il gruppo ha troppi sottogruppi. Questo errore è associato alle modifiche di accesso a UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché l'utente che ha eseguito la chiamata non ha l'autorizzazione per visualizzare l'appartenenza al gruppo. Questo errore è associato alle modifiche di accesso a UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché l'utente chiamante non ha l'autorizzazione per recuperare un criterio di autorizzazione. Questo tipo di errore è associato alle modifiche di accessoUNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché l'utente chiamante non ha l'autorizzazione per recuperare le autorizzazioni in un ruolo IAM. Questo tipo di errore è associato alle modifiche di accessoUNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non ha l'autorizzazione per recuperare il criterio di autorizzazione di una risorsa principale. Questo tipo di errore è associato alle modifiche di accesso UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 La tupla di accesso contiene un tipo di entità non supportato da Policy Simulator.
UNIMPLEMENTED_MEMBER 12 La tupla di accesso contiene un'entità non supportata da Policy Simulator.
UNIMPLEMENTED_CONDITION 12 La tupla di accesso contiene una condizione non supportata da Policy Simulator. Questo tipo di errore è associato alle modifiche di accessoUNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 La risorsa è associata a troppi log di accesso, pertanto Policy Simulator non ha potuto eseguire la simulazione. Per informazioni dettagliate, consulta Dimensioni massime di riproduzione dei log nella pagina Concetti di Policy Simulator.
UNSUPPORTED_RESOURCE 12

Le autorizzazioni di modifica dei criteri di autorizzazione consentiti proposti associati a tipi di risorse non supportati. Questo errore viene visualizzato nel campo replayResult.error e contiene un elenco delle autorizzazioni associate ai tipi di risorse non supportati. Ad esempio:

"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"
}

Per ulteriori informazioni sui tipi di risorse non supportati, consulta Livelli di supporto per i tipi di risorse nella pagina Concetti di Policy Simulator.

REST

Nei risultati della simulazione dell'API REST, gli errori possono essere visualizzati in due posizioni:

  • Il campo replayResult.error: se il tentativo di riproduzione non è andato a buon fine, Policy Simulator segnala l'errore nel campo replayResult.error. Se un risultato della riproduzione contiene questo campo, non contiene un campo diff.
  • Il campo replayResult.diff.accessDiff.policy-type.errors, dove policy-type è baseline o simulated. Se il tentativo di riproduzione è andato a buon fine, ma il risultato è UNKNOWN_INFO_DENIED o UNKNOWN_CONDITIONAL, in questo campo viene riportato il motivo per cui il risultato è sconosciuto.

Policy Simulator genera i seguenti tipi di errori:

Errore Codice di errore Dettagli
GENERIC_INTERNAL_ERROR 13 La simulazione non è riuscita a causa di un errore interno. Per risolvere il problema, prova a eseguire di nuovo la simulazione. Se la simulazione continua a non riuscire, contatta policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator non è riuscito a riprodurre nuovamente il tentativo di accesso perché conteneva un'autorizzazione, un nome della risorsa o un principale non valido.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator non è stato in grado di valutare l'appartenenza del principale al gruppo perché il gruppo ha troppi sottogruppi. Questo errore è associato alle modifiche di accesso a UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché l'utente che ha eseguito la chiamata non ha l'autorizzazione per visualizzare l'appartenenza al gruppo. Questo errore è associato alle modifiche di accesso a UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché l'utente chiamante non ha l'autorizzazione per recuperare un criterio di autorizzazione. Questo tipo di errore è associato alle modifiche di accessoUNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché l'utente chiamante non ha l'autorizzazione per recuperare le autorizzazioni in un ruolo IAM. Questo tipo di errore è associato alle modifiche di accessoUNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non ha l'autorizzazione per recuperare il criterio di autorizzazione di una risorsa principale. Questo tipo di errore è associato alle modifiche di accesso UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 La tupla di accesso contiene un tipo di entità non supportato da Policy Simulator.
UNIMPLEMENTED_MEMBER 12 La tupla di accesso contiene un'entità non supportata da Policy Simulator.
UNIMPLEMENTED_CONDITION 12 La tupla di accesso contiene una condizione non supportata da Policy Simulator. Questo tipo di errore è associato alle modifiche di accessoUNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 La risorsa è associata a troppi log di accesso, pertanto Policy Simulator non ha potuto eseguire la simulazione. Per informazioni dettagliate, consulta Dimensioni massime di riproduzione dei log nella pagina Concetti di Policy Simulator.
UNSUPPORTED_RESOURCE 12

Le autorizzazioni di modifica dei criteri di autorizzazione previsti associate a tipi di risorse non supportati. Questo errore viene visualizzato nel campo replayResult.error e contiene un elenco delle autorizzazioni associate ai tipi di risorse non supportati. Ad esempio:

"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"
}

Per ulteriori informazioni sui tipi di risorse non supportati, consulta Livelli di supporto per i tipi di risorse nella pagina Concetti di Policy Simulator.

Applicare una modifica simulata ai criteri

Per applicare una modifica simulata a un criterio di autorizzazione:

Console

  1. Fai clic su Applica modifiche proposte.

  2. Nella finestra di dialogo di conferma, fai clic su Applica per confermare la modifica.

gcloud

Utilizza il comando set-iam-policy e fornisci il percorso del file JSON contenente il criterio di autorizzazione simulato che vuoi applicare:

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

Fornisci i seguenti valori:

  • resource-type: il tipo di risorsa di cui vuoi aggiornare il criterio di autorizzazione. Ad esempio, projects.
  • resource-id: l'ID della risorsa di cui vuoi aggiornare il criterio di autorizzazione. Ad esempio, my-project.
  • filepath: il percorso di un file contenente il criterio di autorizzazione aggiornato.

La risposta contiene il criterio di autorizzazione aggiornato. Se tratti le policy di autorizzazione IAM come codice e le memorizzi in un sistema di controllo della versione, devi memorizzare la policy di autorizzazione restituita da gcloud CLI, non il file JSON che contiene la policy di autorizzazione simulata.

REST

Imposta il criterio di autorizzazione proposto come nuovo criterio di autorizzazione della risorsa.

Per impostare il criterio di autorizzazione nella richiesta come nuovo criterio di autorizzazione del progetto, utilizza il metodo projects.setIamPolicy dell'API Resource Manager.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
  • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "policy": {
    POLICY
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene il criterio di autorizzazione aggiornato.


Salvare i risultati della simulazione

Se utilizzi gcloud CLI, puoi salvare i risultati di Policy Simulator come file JSON, YAML o CSV.

Salva come JSON o YAML

Per salvare i risultati di una simulazione come file JSON o YAML, aggiungi il seguente flag al comando replay-recent-access quando esegui la simulazione:

--output=output-format > filename

Sostituisci i seguenti valori:

  • output-format: la lingua del file esportato, json o yaml.
  • filename: un nome per il file esportato.

Salva come CSV

Per salvare un file CSV, aggiungi il seguente flag al comando replay-recent-access quando esegui la simulazione:

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

Sostituisci i seguenti valori:

  • output-fields: un elenco separato da virgole dei campi da includere nei risultati esportati. Ad esempio, diffs.accessTuple.principal, diffs.accessTuple.permission.
  • filename: un nome per il file esportato.

Se vuoi, puoi aggiungere altri campi, ad esempio errors[], al flag --flatten. L'aggiunta di campi al flag --flatten consente di elencare gli elementi in questi campi su righe separate nel file CSV.

Di seguito è riportato un esempio di comando replay-recent-access che salva i campi più importanti dei risultati della simulazione come file CSV simulation-results.csv:

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

Questo esempio simula proposed-policy.json per il progetto my-project e salva i risultati come simulation-results.csv. Questo file CSV contiene i seguenti campi: entità, autorizzazione, risorsa, modifica dell'accesso, stato di accesso di riferimento e stato di accesso simulato.

Per ulteriori informazioni sulla formattazione con gcloud CLI, consulta formats.

Passaggi successivi