Testare le modifiche dei ruoli con Policy Simulator

In questa pagina viene descritto come simulare una modifica a un criterio di autorizzazione tramite il Simulatore di criteri. Viene inoltre spiegato come interpretare i risultati della simulazione e come applicare il criterio di autorizzazione simulato, se si sceglie di farlo.

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 determinate autorizzazioni, mentre altre non sono obbligatorie, ma consentono di ottenere i risultati più completi dalla simulazione.

Per saperne di più sui ruoli IAM (Gestione di identità e accessi), consulta Informazioni sui ruoli.

Autorizzazioni obbligatorie per la risorsa di destinazione

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

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

  • Amministratore simulatore (roles/policysimulator.admin)
  • Revisore sicurezza (roles/iam.securityReviewer)

Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.

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

Autorizzazioni obbligatorie

  • cloudassets.assets.searchAllResources
  • policysimulator.replays.run
  • service.resource.getIamPolicy, dove resource è il tipo di risorsa di destinazione, mentre service è il nome del servizio Google Cloud a cui appartiene la risorsa.

Potresti anche essere in grado di ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Autorizzazioni obbligatorie per la risorsa host

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 necessariamente collegata alla risorsa di destinazione.

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

console

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

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

gcloud

La risorsa host è il progetto della quota corrente. Per impostare il progetto della quota, utilizza il comando gcloud auth application-default set-quota-project.

REST

Devi specificare manualmente la risorsa host ogni volta che invii una richiesta. Per ulteriori dettagli, consulta la sezione Simulare una modifica delle norme in questa pagina.

Per ottenere le autorizzazioni necessarie per eseguire una simulazione, chiedi al tuo amministratore di concederti il ruolo IAM di Amministratore simulatore (roles/policysimulator.admin) nella risorsa host. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.

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

Autorizzazioni obbligatorie

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

Potresti anche essere in grado di 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 hai alcune o tutte queste autorizzazioni, puoi comunque eseguire una simulazione. Tuttavia, l'esecuzione di una simulazione senza queste autorizzazioni potrebbe comportare un aumento del numero di modifiche sconosciute, in quanto potresti non essere in grado di recuperare informazioni che potrebbero influire sui risultati della simulazione.

Ti consigliamo di ricoprire il ruolo di Revisore sicurezza (roles/iam.securityReviewer) per la tua organizzazione durante la simulazione. In alternativa, se hai già il ruolo Amministratore sicurezza (roles/iam.securityAdmin), non devi concedere altri ruoli.

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

  • iam.roles.get e iam.roles.list su qualsiasi progetto, cartella o organizzazione pertinente in cui sono definiti i ruoli personalizzati. Un progetto, una cartella o un'organizzazione è pertinente se è un predecessore o discendente della risorsa di cui stai simulando il criterio.
  • 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 che possiede la risorsa in questione.

    Quando esegui una simulazione, ti consigliamo di disporre di questa autorizzazione per 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. Ciò vale 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 predecessore 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 per un bucket Cloud Storage nel progetto, devi avere l'autorizzazione storage.buckets.getIamPolicy per quel bucket. Se il progetto ha una cartella padre con un criterio di autorizzazione, devi avere anche l'autorizzazione resourcemanager.folders.getIamPolicy per quella cartella.

Ti consigliamo di disporre dell'autorizzazione per recuperare le informazioni sulle iscrizioni ai gruppi per ogni gruppo Google nel criterio di autorizzazione originale e nel criterio di autorizzazione proposto.

In genere, i super amministratori e gli amministratori dei gruppi di Google Workspace possono accedere per visualizzare i membri del gruppo. Se non sei un super amministratore o un amministratore del gruppo, chiedi al tuo amministratore di Google Workspace di creare un ruolo amministrativo Google Workspace personalizzato contenente il privilegio groups.read (situato in Privilegi delle API amministrative) e di concederti l'autorizzazione. Questo ti permette di visualizzare l'appartenenza di tutti i gruppi all'interno del tuo dominio e di simulare più efficacemente le modifiche a un criterio di autorizzazione.

Simula una modifica dei criteri

Per simulare una modifica apportata 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 abbia un criterio di autorizzazione.

Modifica le autorizzazioni di un'entità, poi anziché fare clic su Salva, fai clic su Testa modifiche:

  1. Nella console, vai alla pagina IAM.

    Vai alla pagina IAM

  2. Per apportare una modifica proposta al criterio di autorizzazione, modifica le autorizzazioni principali esistenti:

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

  4. Dopo alcuni minuti, nella console verranno mostrati i risultati della simulazione sotto forma di elenco delle modifiche di accesso. Per ulteriori informazioni, consulta la sezione Comprendere i risultati del Simulatore di criteri in questa pagina.

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

gcloud

Per simulare una modifica a un criterio di autorizzazione, segui il pattern read-Modify-write, ma simula il criterio di autorizzazione anziché scriverlo.

  1. Leggi il criterio di autorizzazione corrente eseguendo questo 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 valore JSON o YAML.
    • filepath: il percorso di un nuovo file di output per il criterio allow.

    Ad esempio, il seguente comando ottiene il criterio di autorizzazione per il progetto my-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 in modo che rifletta le modifiche che vuoi simulare.

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

  3. Esegui questo comando per simulare la modifica al 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 di cui vuoi simulare il criterio di autorizzazione.

      Il nome completo della risorsa è un URI composto dal nome del servizio e dal percorso della risorsa. Ad esempio, se stai simulando un criterio di autorizzazione per un progetto, utilizzerai //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 completi dei nomi delle risorse, consulta la sezione Nomi completi delle risorse.

    • 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 repliche, che spiega come cambierebbe l'accesso dell'entità se venisse applicato il criterio di autorizzazione proposto. Questi risultati elencano anche eventuali errori che si sono verificati durante la simulazione, inclusi eventuali errori dovuti a tipi di risorse non supportati.

    Per informazioni su come leggere i risultati, consulta la sezione Comprendere i risultati del Simulatore dei criteri in questa pagina. Per informazioni su come salvare i risultati della simulazione anziché stamparli, consulta la sezione 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 fosse applicata, my-user@example.com non avrà più le autorizzazioni resourcemanager.projects.list e resourcemanager.projects.get per il progetto my-project, pertanto non avrebbe più l'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 è stata apportata alcuna modifica all'accesso tra il criterio di autorizzazione esistente e il criterio di autorizzazione simulato, il comando stampa No access changes found in the replay.

REST

Per simulare una modifica a un criterio di autorizzazione, segui il pattern read-Modify-write, ma invece di scrivere il criterio Allow, crea ed esegui una simulazione.

  1. Leggi il criterio di autorizzazione per la risorsa.

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

    Prima di utilizzare uno qualsiasi dei dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: ID progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente del criterio, ossia la versione 3. Per informazioni dettagliate, vedi Specificare la versione di un criterio quando si riceve un criterio.

    Metodo HTTP e URL:

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

    Corpo JSON richiesta:

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

    Per inviare la richiesta, espandi una delle seguenti 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 che rifletta le modifiche che vuoi simulare.

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

  3. Crea una simulazione o Ripeti con il criterio di autorizzazione modificato.

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

    Prima di utilizzare uno qualsiasi dei dati della richiesta, effettua le seguenti sostituzioni:

    • host-resource-type: il tipo di risorsa che ospita la riproduzione. 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 può essere qualsiasi risorsa che accetta criteri IAM e non deve essere necessariamente collegata alla risorsa host.

      Il nome completo della risorsa è un URI composto dal nome del servizio e dal percorso della risorsa. Ad esempio, se stai simulando un criterio per un progetto, utilizzerai //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 la sezione Nomi completi delle risorse.

    • policy: il criterio che vuoi simulare. Per un esempio di criterio, consulta il riferimento per i criteri.

      Per simulare più criteri, includi più coppie "object-full-resource-name" : policy nel corpo della richiesta.

    Metodo HTTP e URL:

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

    Corpo JSON richiesta:

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

    Per inviare la richiesta, espandi una delle seguenti opzioni:

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

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

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

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

    Prima di utilizzare uno qualsiasi dei dati della richiesta, effettua 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

    Metodo HTTP e URL:

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

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Le operazioni in corso restituiscono una risposta come la 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. Ricevi i risultati della replica.

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

    Prima di utilizzare uno qualsiasi dei dati della richiesta, effettua le seguenti sostituzioni:

    • replay-name: il nome della replica per cui vuoi recuperare i risultati. Copia questo valore dal campo response.replay.name di una risposta operations.get. Includi qualsiasi tipo di risorsa e prefisso di località. 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 è specificato, il server determinerà il numero di risultati da restituire. Se il numero di risultati è maggiore della dimensione della pagina, la risposta contiene un token di impaginazione che puoi utilizzare per recuperare la pagina dei risultati successiva.
    • page-token: facoltativo. Il token di impaginazione ha restituito una risposta precedente da questo metodo. Se specificato, l'elenco dei risultati inizierà da dove è terminata la richiesta precedente.

    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 delle seguenti opzioni:

    La risposta contiene un elenco di risultati che spiegano come cambierebbe l'accesso dell'entità se venisse applicato il criterio proposto. Questi risultati elencano anche eventuali errori che si sono verificati durante la simulazione, in particolare tutti gli errori dovuti a tipi di risorse non supportati

    Per informazioni su come leggere i risultati, consulta la sezione Comprendere i risultati del Simulatore dei criteri 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 venisse applicata la modifica proposta, my-user@example.com non avrà 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 ({}).

Comprendere i risultati del Simulatore di criteri

Il simulatore di criteri segnala l'impatto di una modifica proposta a un criterio di autorizzazione come elenco di modifiche di accesso. Ogni modifica all'accesso rappresenta un tentativo degli ultimi 90 giorni che avrebbe un risultato diverso in base al criterio di autorizzazione proposto rispetto all'attuale criterio di autorizzazione.

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

La presentazione di queste modifiche e di errori dipende dalla piattaforma in uso.

console

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

  • Modifiche ai criteri: in questa sezione sono elencate le risorse di cui consenti la modifica delle norme, i ruoli che vuoi proporre e i ruoli che vuoi proporre.

    Questa sezione contiene anche un pulsante Visualizza differenze criteri. Se fai clic su questo pulsante, puoi visualizzare l'aspetto del 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à cambiano se vengono applicate le modifiche proposte. Questi conteggi delle autorizzazioni sono calcolati confrontando le autorizzazioni nei ruoli correnti dell'entità con le autorizzazioni nei ruoli proposti dell'entità, 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 correnti e proposti dell'entità.

  • Modifiche dell'accesso negli ultimi 90 giorni: questa sezione mostra quali tentativi di accesso degli ultimi 90 giorni hanno risultati diversi rispetto al criterio di autorizzazione proposto e al criterio di autorizzazione corrente. Questa sezione include sia un riepilogo delle modifiche di accesso che una tabella con risultati più dettagliati.

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

    Questa sezione contiene anche una tabella delle modifiche dell'accesso. In questa tabella sono elencati tutti i tentativi di accesso degli ultimi 90 giorni che hanno un risultato diverso in base al criterio di autorizzazione proposto e all'attuale criterio di autorizzazione. Ogni voce include la risorsa a cui stava tentando di accedere l'entità, la data della richiesta, l'entità che effettua la richiesta, l'autorizzazione nella richiesta e lo stato dell'accesso nel criterio di autorizzazione proposto rispetto allo stato di accesso dell'attuale criterio di autorizzazione.

    Esistono diversi tipi di modifiche dell'accesso:

    Modifica accesso Dettagli
    Accesso revocato L'entità aveva accesso secondo il criterio di autorizzazione attuale, ma non potrà più accedervi dopo la modifica proposta.
    Accesso potenzialmente revocato

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità disponeva dell'accesso in base al criterio di autorizzazione corrente, ma l'accesso in base al criterio di autorizzazione proposto è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma non sarà possibile accedervi dopo la modifica proposta.
    Accesso ottenuto L'entità non aveva accesso secondo il criterio di autorizzazione attuale, ma potrà accedervi dopo la modifica proposta.
    Accesso potenzialmente ottenuto

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità non disponeva dell'accesso ai sensi dell'attuale criterio di autorizzazione, ma il suo accesso dopo la modifica proposta è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma gli utenti avranno accesso dopo la modifica proposta.
    Accesso sconosciuto L'accesso dell'entità sia al criterio di autorizzazione corrente che al criterio di autorizzazione 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 dell'accesso, fai clic sulla modifica di accesso. Si apre il riquadro Dettagli della modifica dell'accesso, che mostra ulteriori informazioni sulla modifica dell'accesso, tra cui l'accesso esistente dell'entità, l'accesso proposto dell'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 di ripetizione descrive un tentativo di accesso il cui risultato sarebbe stato diverso se il criterio di autorizzazione proposto fosse stato impostato al momento del tentativo. Ad esempio, il seguente risultato della replica mostra che my-user@example.com ha utilizzato l'autorizzazione resourcemanager.projects.update in passato per eseguire un'azione nel progetto my-project. Tuttavia, se il criterio di autorizzazione proposto fosse stato implementato, sarebbe stato negato l'accesso.

{
  "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 di replica ha i seguenti campi:

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

  • lastSeenDate: data dell'ultimo tentativo di accesso.

  • diff.accessDiff o error: se la ripetizione di un tentativo di accesso ha esito positivo, il risultato contiene un campo diff.accessDiff che segnala la differenza tra i risultati del tentativo di accesso ai sensi del criterio di autorizzazione corrente e del criterio di autorizzazione proposto. Se il tentativo di ripetizione non ha esito positivo, il risultato della replica contiene un campo error con una descrizione dell'errore. Per scoprire di più sugli errori di simulazione, consulta Errori in questa pagina.

Ogni diff di accesso ha i seguenti componenti:

  • baseline: il risultato dell'accesso quando viene utilizzato il criterio di autorizzazione corrente. Il valore deve essere 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 gli errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a tale errore. Per ulteriori informazioni sui valori UNKNOWN, consulta la sezione Risultati sconosciuti in questa pagina.
  • simulated: il risultato dell'accesso quando viene utilizzato il criterio di autorizzazione proposto. Questo valore 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 gli errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a tale errore. Per ulteriori informazioni sui valori UNKNOWN, consulta la sezione Risultati sconosciuti in questa pagina.
  • accessChange: la variazione tra lo stato dell'accesso di riferimento e lo stato dell'accesso simulato. Per un elenco dei potenziali valori, consulta la tabella seguente:

    Modifica accesso Dettagli
    ACCESS_REVOKED L'entità aveva accesso secondo il criterio di autorizzazione attuale, ma non potrà più accedervi dopo la modifica proposta.
    ACCESS_MAYBE_REVOKED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità disponeva dell'accesso in base al criterio di autorizzazione corrente, ma l'accesso in base al criterio di autorizzazione proposto è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma non sarà possibile accedervi dopo la modifica proposta.
    ACCESS_GAINED L'entità non aveva accesso secondo il criterio di autorizzazione attuale, ma potrà accedervi dopo la modifica proposta.
    ACCESS_MAYBE_GAINED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità non disponeva dell'accesso ai sensi dell'attuale criterio di autorizzazione, ma il suo accesso dopo la modifica proposta è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma gli utenti avranno accesso dopo la modifica proposta.
    UNKNOWN_CHANGE L'accesso dell'entità sia al criterio di autorizzazione corrente che al criterio di autorizzazione 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 di ripetizione descrive un tentativo di accesso il cui risultato sarebbe stato diverso se il criterio di autorizzazione proposto fosse stato impostato al momento del tentativo. Ad esempio, il seguente risultato della replica mostra che my-user@example.com ha utilizzato l'autorizzazione resourcemanager.projects.update in passato per eseguire un'azione nel progetto my-project. Tuttavia, se il criterio di autorizzazione proposto fosse stato implementato, sarebbe stato negato l'accesso.

{
  "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 di replica ha i seguenti campi:

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

  • lastSeenDate: data dell'ultimo tentativo di accesso.

  • diff.accessDiff o error: se la ripetizione di un tentativo di accesso ha esito positivo, il risultato contiene un campo diff.accessDiff che segnala la differenza tra i risultati del tentativo di accesso ai sensi del criterio di autorizzazione corrente e del criterio di autorizzazione proposto. Se il tentativo di ripetizione non ha esito positivo, il risultato della replica contiene un campo error con una descrizione dell'errore. Per scoprire di più sugli errori di simulazione, consulta Errori in questa pagina.

Ogni diff di accesso ha i seguenti componenti:

  • baseline: il risultato dell'accesso quando viene utilizzato il criterio di autorizzazione corrente. Il valore deve essere 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 gli errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a tale errore. Per ulteriori informazioni sui valori UNKNOWN, consulta la sezione Risultati sconosciuti in questa pagina.
  • simulated: il risultato dell'accesso quando viene utilizzato il criterio di autorizzazione proposto. Questo valore 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 gli errori associati alle informazioni sconosciute, nonché i criteri di autorizzazione associati a tale errore. Per ulteriori informazioni sui valori UNKNOWN, consulta la sezione Risultati sconosciuti in questa pagina.
  • accessChange: la variazione tra lo stato dell'accesso di riferimento e lo stato dell'accesso simulato. Per un elenco dei potenziali valori, consulta la tabella seguente:

    Modifica accesso Dettagli
    ACCESS_REVOKED L'entità aveva accesso secondo il criterio di autorizzazione attuale, ma non potrà più accedervi dopo la modifica proposta.
    ACCESS_MAYBE_REVOKED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità disponeva dell'accesso in base al criterio di autorizzazione corrente, ma l'accesso in base al criterio di autorizzazione proposto è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma non sarà possibile accedervi dopo la modifica proposta.
    ACCESS_GAINED L'entità non aveva accesso secondo il criterio di autorizzazione attuale, ma potrà accedervi dopo la modifica proposta.
    ACCESS_MAYBE_GAINED

    Questo risultato può verificarsi per i seguenti motivi:

    • L'entità non disponeva dell'accesso ai sensi dell'attuale criterio di autorizzazione, ma il suo accesso dopo la modifica proposta è sconosciuto.
    • L'accesso dell'entità in base al criterio di autorizzazione corrente è sconosciuto, ma gli utenti avranno accesso dopo la modifica proposta.
    UNKNOWN_CHANGE L'accesso dell'entità sia al criterio di autorizzazione corrente che al criterio di autorizzazione 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 disponeva di informazioni sufficienti per valutare pienamente il tentativo di accesso.

console

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

I risultati possono essere sconosciuti per diversi motivi:

  • Informazioni sul ruolo rifiutate: l'entità che esegue la simulazione non disponeva dell'autorizzazione per visualizzare i dettagli del ruolo per uno o più ruoli simulati.
  • Impossibile accedere al criterio: l'entità che esegue la simulazione non dispone dell'autorizzazione per ottenere il criterio di autorizzazione per una o più risorse coinvolte nella simulazione.
  • Informazioni sull'appartenenza rifiutate: l'entità che esegue la simulazione non disponeva dell'autorizzazione per visualizzare i membri di uno o più gruppi inclusi nel criterio di autorizzazione proposto.
  • Condizione non supportata: esiste un'associazione di ruolo condizionale nel criterio di autorizzazione che viene testato. Policy Simulator non supporta le condizioni, quindi non è stato possibile valutare l'associazione.

gcloud

Nell'interfaccia a riga di comando gcloud, i risultati della simulazione segnaleranno il motivo per cui il risultato è sconosciuto nella diff di accesso.

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

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

    • L'utente non ha l'autorizzazione per recuperare il criterio di autorizzazione che è simulato o non è in grado di recuperare i criteri di autorizzazione per le risorse nei log di accesso.
    • L'utente non dispone dell'autorizzazione necessaria per visualizzare l'iscrizione al gruppo.
    • L'utente non riesce a recuperare le informazioni necessarie sul ruolo.

    Per individuare le informazioni mancanti, consulta le informazioni sull'errore dopo lo stato dell'accesso segnalato.

  • UNKNOWN_CONDITIONAL: esiste un'associazione di ruolo condizionale nel criterio di autorizzazione in fase di test. Policy Simulator non supporta le condizioni, quindi 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 sono sconosciute e un campo policies che elenca i criteri di autorizzazione associati agli errori. Per ulteriori informazioni sugli errori, consulta la sezione Errori in questa pagina.

REST

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

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

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

    • L'utente non ha l'autorizzazione per recuperare il criterio di autorizzazione che è simulato o non è in grado di recuperare i criteri di autorizzazione per le risorse nei log di accesso.
    • L'utente non dispone dell'autorizzazione necessaria per visualizzare l'iscrizione al gruppo.
    • L'utente non riesce a recuperare le informazioni necessarie sul ruolo.

    Per individuare le informazioni mancanti, consulta le informazioni sull'errore dopo lo stato dell'accesso segnalato.

  • UNKNOWN_CONDITIONAL: esiste un'associazione di ruolo condizionale nel criterio di autorizzazione in fase di test. Policy Simulator non supporta le condizioni, quindi 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 sono sconosciute e un campo policies che elenca i criteri di autorizzazione associati agli errori. Per ulteriori informazioni sugli errori, consulta la sezione 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 della simulazione.

console

Esistono diversi tipi di errori che Policy Simulator potrebbe segnalare:

  • Errori operativi: non è stato possibile eseguire la simulazione. Policy Simulator segnala errori delle operazioni nella parte superiore della pagina dei risultati.

    Se il messaggio di errore indica che non è possibile eseguire la simulazione perché nel tuo progetto o nella tua organizzazione sono presenti molti log, non puoi eseguire una simulazione sulla risorsa.

    Se visualizzi 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: una replica di un singolo tentativo di accesso non è andata a buon fine, pertanto Policy Simulator non è riuscito a determinare se il risultato del tentativo di accesso cambierà in base al criterio di autorizzazione proposto.

    La console elenca gli errori di replica nella tabella Modifiche degli accessi negli ultimi 90 giorni. Il riquadro Dettagli modifica accesso per ogni errore include un messaggio di errore per aiutarti a comprendere il problema, nonché la risorsa e l'autorizzazione che erano state simulate quando si è verificato l'errore.

  • Errori relativi ai tipi di risorsa non supportati: il criterio di autorizzazione proposto influisce sulle autorizzazioni associate a un tipo di risorsa non supportato, che il Simulatore di criteri non è in grado di simulare.

    Policy Simulator elenca queste autorizzazioni nei risultati della simulazione in modo che tu sappia quali autorizzazioni non è stato in grado di simulare.

gcloud

Nei risultati della simulazione dell'interfaccia a riga di comando gcloud, gli errori possono essere visualizzati in due punti:

  • Il campo replayResult.error: se il tentativo di ripetizione non è riuscito, il Simulatore di criteri segnala l'errore nel campo replayResult.error. Se un risultato di ripetizione 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 ripetizione ha avuto esito positivo, ma il risultato è stato UNKNOWN_INFO_DENIED o UNKNOWN_CONDITIONAL, Policy Simulator segnala il motivo per cui il risultato è sconosciuto in questo campo.

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 funzionare, contatta policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator non è riuscito a riprodurre il tentativo di accesso perché conteneva una permisison, un nome risorsa o un'entità non validi.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator non ha potuto valutare l'appartenenza dell'entità al gruppo perché contiene troppi sottogruppi. Questo errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per visualizzare le iscrizioni al gruppo. Questo errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per recuperare un criterio di autorizzazione. Questo tipo di errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per recuperare le autorizzazioni in un ruolo IAM. Questo tipo di errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per recuperare un criterio di autorizzazione della risorsa predecessore. Questo tipo di errore è associato alle modifiche dell'accesso di 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, che non è supportata da Policy Simulator. Questo tipo di errore è associato alle modifiche dell'accesso di UNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 La risorsa è associata a troppi log di accesso, pertanto Policy Simulator non ha potuto eseguire la simulazione. Per maggiori dettagli, consulta la pagina Dimensioni massime di riproduzione dei log nella pagina dei concetti del Simulatore di criteri.
UNSUPPORTED_RESOURCE 12

Il criterio di autorizzazione proposto modifica le autorizzazioni associate ai 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 la pagina Livelli di assistenza per i tipi di risorse nella pagina dei concetti del Simulatore di criteri.

REST

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

  • Il campo replayResult.error: se il tentativo di ripetizione non è riuscito, il Simulatore di criteri segnala l'errore nel campo replayResult.error. Se un risultato di ripetizione 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 ripetizione ha avuto esito positivo, ma il risultato è stato UNKNOWN_INFO_DENIED o UNKNOWN_CONDITIONAL, Policy Simulator segnala il motivo per cui il risultato è sconosciuto in questo campo.

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 funzionare, contatta policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator non è riuscito a riprodurre il tentativo di accesso perché conteneva una permisison, un nome risorsa o un'entità non validi.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator non ha potuto valutare l'appartenenza dell'entità al gruppo perché contiene troppi sottogruppi. Questo errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per visualizzare le iscrizioni al gruppo. Questo errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per recuperare un criterio di autorizzazione. Questo tipo di errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per recuperare le autorizzazioni in un ruolo IAM. Questo tipo di errore è associato alle modifiche dell'accesso di UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator non è riuscito a valutare l'accesso di un utente perché il chiamante non dispone dell'autorizzazione per recuperare un criterio di autorizzazione della risorsa predecessore. Questo tipo di errore è associato alle modifiche dell'accesso di 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, che non è supportata da Policy Simulator. Questo tipo di errore è associato alle modifiche dell'accesso di UNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 La risorsa è associata a troppi log di accesso, pertanto Policy Simulator non ha potuto eseguire la simulazione. Per maggiori dettagli, consulta la pagina Dimensioni massime di riproduzione dei log nella pagina dei concetti del Simulatore di criteri.
UNSUPPORTED_RESOURCE 12

Il criterio di autorizzazione proposto modifica le autorizzazioni associate ai 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 la pagina Livelli di assistenza per i tipi di risorse nella pagina dei concetti del Simulatore di criteri.

Applica una simulazione di criteri simulati

Per applicare una modifica simulata a una norma 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 un percorso al 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 che contiene il criterio allow aggiornato.

La risposta contiene il criterio di autorizzazione aggiornato. Se consideri i criteri IAM consentiti come codice e li archivi in un sistema di controllo della versione, devi archiviare il criterio di autorizzazione restituito dall'interfaccia a riga di comando gcloud, non il file JSON che contiene il criterio di autorizzazione simulato.

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 uno qualsiasi dei dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: ID progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, come my-project.
  • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di una norma, consulta il riferimento sulle norme.

Metodo HTTP e URL:

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

Corpo JSON richiesta:

{
  "policy": {
    POLICY
  }
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

La risposta contiene il criterio di autorizzazione aggiornato.


Salva i risultati della simulazione

Se utilizzi l'interfaccia a riga di comando gcloud, puoi salvare i risultati del Simulatore di criteri 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, che può essere json o yaml.
  • filename: nome del 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 che vuoi includere nei risultati esportati. Ad esempio, diffs.accessTuple.principal, diffs.accessTuple.permission.
  • filename: nome del file esportato.

Facoltativamente, puoi aggiungere ulteriori campi, ad esempio errors[], al flag --flatten. L'aggiunta di campi al flag --flatten consente di elencare gli elementi di questi campi in righe separate del 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 dell'accesso di riferimento e stato dell'accesso simulato.

Per ulteriori informazioni sulla formattazione con l'interfaccia a riga di comando gcloud, consulta i formati.

Passaggi successivi