Risoluzione dei problemi relativi alle autorizzazioni IAM

Lo strumento per la risoluzione dei problemi relativi ai criteri per IAM ti aiuta a capire perché un utente ha accesso a una risorsa o non ha l'autorizzazione per chiamare un'API. Dati un indirizzo email, una risorsa e un'autorizzazione, lo strumento per la risoluzione dei problemi relativi ai criteri esamina tutti i criteri di autorizzazione e negazione che si applicano alla risorsa. Poi, utilizza questi criteri per indicare se l'entità dispone dell'autorizzazione. Elenca inoltre le associazioni di ruoli e le regole di negazione nei criteri e spiega in che modo influiscono sull'accesso dell'entità.

Puoi accedere allo strumento per la risoluzione dei problemi relativi ai criteri utilizzando la console Google Cloud, Google Cloud CLI o l'API REST. Per le query semplici, l'utilizzo della console Google Cloud è in genere più veloce. Per scenari più complessi, considera gcloud CLI o l'API REST.

Prima di iniziare

  • Attiva l'API Policy Troubleshooter.

    Abilita l'API

Autorizzazioni obbligatorie

Per risolvere completamente i problemi di accesso delle entità, devi disporre delle seguenti autorizzazioni.

Autorizzazioni per risolvere i problemi di accesso per singole entità

Lo strumento per la risoluzione dei problemi relativi ai criteri analizza l'accesso di un'entità a una risorsa in base ai criteri di autorizzazione, negazione e ruoli per cui disponi dell'autorizzazione di visualizzazione. Se non hai l'autorizzazione per visualizzare un criterio che si applica a una risorsa o se non hai l'autorizzazione per visualizzare un ruolo personalizzato, potresti non essere in grado di determinare se un'entità dispone dell'accesso.

Per ottenere le autorizzazioni necessarie per risolvere i problemi di accesso di un'entità, chiedi all'amministratore di concederti i seguenti ruoli IAM nell'organizzazione:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Autorizzazioni per la risoluzione dei problemi di accesso per i membri del gruppo

Se i tuoi criteri di autorizzazione e negazione includono gruppi, devi disporre dell'autorizzazione dell'API Google Workspace Admin groups.read per risolvere i problemi di accesso dei singoli membri del gruppo. I super amministratori e gli amministratori dei gruppi dispongono automaticamente di questa autorizzazione. Per assegnare questa autorizzazione a un utente che non è un super amministratore o un gruppo di amministratori, crea un ruolo di amministratore di Google Workspace personalizzato che contenga il privilegio groups.read (che si trova in Privilegi delle API amministrative) e concedilo all'utente.

Se non disponi di queste autorizzazioni, le associazioni di ruoli e le regole di negazione che contengono gruppi o domini avranno come risultato di accesso Unknown, a meno che l'associazione o la regola di negazione dei ruoli non includa esplicitamente l'entità.

Autorizzazioni per la risoluzione dei problemi di accesso per i membri del dominio

Se i criteri di autorizzazione e rifiuto includono un account Google Workspace o un dominio Cloud Identity, devi essere un amministratore di dominio per risolvere i problemi di accesso dei singoli membri del dominio.

Se non disponi di queste autorizzazioni, le associazioni di ruoli e le regole di negazione che contengono gruppi o domini avranno come risultato di accesso Unknown, a meno che l'associazione o la regola di negazione dei ruoli non includa esplicitamente l'entità.

Risolvere i problemi di accesso

Per risolvere i problemi di accesso, devi avere le seguenti informazioni:

  • Entità:l'indirizzo email da controllare. L'indirizzo email deve fare riferimento a un account utente o di servizio. Non sono supportati altri tipi di entità, inclusi gruppi, domini, identità forza lavoro e identità dei carichi di lavoro.
  • Risorsa: il nome completo della risorsa. Ad esempio, per controllare il progetto my-project, inserisci //cloudresourcemanager.googleapis.com/projects/my-project. Per altri tipi di risorse, vedi gli esempi di nomi completi delle risorse.
  • Autorizzazione: l'autorizzazione per controllare. Se utilizzi la console Google Cloud, durante la digitazione viene visualizzato un elenco di suggerimenti. Per un elenco completo delle autorizzazioni, consulta la documentazione di riferimento sulle autorizzazioni.

Console

Per risolvere i problemi di accesso:

  1. Nella console Google Cloud, vai alla pagina Strumento per la risoluzione dei problemi relativi ai criteri.

    Vai allo strumento per la risoluzione dei problemi relativi ai criteri

  2. Inserisci l'email dell'entità di cui vuoi controllare l'accesso.

  3. Inserisci il nome completo della risorsa da controllare.

    Se non conosci il nome completo della risorsa, esegui una delle seguenti operazioni:

    • Se stai risolvendo problemi di accesso a un progetto, una cartella o un'organizzazione, inizia a digitare per visualizzare le opzioni di completamento automatico.
    • Se stai tentando di risolvere i problemi di accesso per un altro tipo di risorsa, fai clic su Sfoglia per aprire la finestra di dialogo di ricerca delle risorse, quindi cerca la risorsa:

      1. Nella casella Seleziona ambito, seleziona un progetto, una cartella o un'organizzazione in cui eseguire la ricerca.
      2. Nella casella Tipo di risorsa, seleziona i tipi di risorse che vuoi cercare.
      3. Nella casella Cerca risorse, inserisci una parte del nome della risorsa.
      4. Nella sezione dei risultati, seleziona la risorsa che vuoi controllare.
      5. Fai clic su Seleziona per scegliere la risorsa e chiudere la finestra di dialogo.
  4. Inserisci l'autorizzazione da verificare.

    Se non conosci il nome completo dell'autorizzazione, inizia a digitare per visualizzare le opzioni di completamento automatico.

  5. (Facoltativo) Per controllare più risorse e autorizzazioni, seleziona Aggiungi un'altra coppia e ripeti il passaggio precedente.

  6. Fai clic su Verifica l'accesso.

gcloud

Per scoprire perché un'entità ha o non ha un'autorizzazione IAM, utilizza il comando gcloud policy-troubleshoot iam.

Prima di utilizzare uno qualsiasi dei dati del comando riportati di seguito, apporta le seguenti sostituzioni:

  • EMAIL: l'indirizzo email dell'entità di cui vuoi risolvere i problemi relativi alle autorizzazioni.
  • RESOURCE: la risorsa per cui viene concessa l'autorizzazione.
  • PERMISSION: l'autorizzazione per cui vuoi risolvere i problemi.

Esegui il comando gcloud policy-troubleshoot iam:

Linux, macOS o Cloud Shell

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION

Windows (PowerShell)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION

Windows (cmd.exe)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION

Dovresti ricevere una risposta simile alla seguente:

{
  "accessTuple": {
    "conditionContext": {
      "destination": {},
      "effectiveTags": [
        {
          "tagValue": "tagValues/281481941428044",
          "namespacedTagValue": "803434038361/env/dev",
          "tagKey": "tagKeys/281475994198094",
          "namespacedTagKey": "803434038361/env",
          "tagKeyParentName": "organizations/803434038361"
        }
      ],
      "request": {},
      "resource": {}
    },
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "compute.instances.get",
    "permissionFqdn": "compute.googleapis.com/instances.get",
    "principal": "user1@example.com"
  },
  "allowPolicyExplanation": {
    "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
    "explainedPolicies": [
      {
        "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
        "bindingExplanations": [
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_HIGH"
            },
            "memberships": {
              "user:user1@example.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "role": "roles/compute.viewer",
            "rolePermission": "ROLE_PERMISSION_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/owner",
            "rolePermission": "ROLE_PERMISSION_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user1@example.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.organizationAdmin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          }
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
        "policy": {
          "bindings": [
            {
              "members": [
                "user:user1@example.com"
              ],
              "role": "roles/compute.viewer"
            },
            {
              "members": [
                "user:user2@example.com"
              ],
              "role": "roles/owner"
            },
            {
              "members": [
                "user:user1@example.com"
              ],
              "role": "roles/resourcemanager.organizationAdmin"
            },
          ],
          "etag": "BwX5/L9Vbg4=",
          "version": 3
        },
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      }
    ],
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  },
  "denyPolicyExplanation": {
    "denyAccessState": "DENY_ACCESS_STATE_DENIED",
    "explainedResources": [
      {
        "denyAccessState": "DENY_ACCESS_STATE_DENIED",
        "explainedPolicies": [
          {
            "denyAccessState": "DENY_ACCESS_STATE_DENIED",
            "policy": {
              "createTime": "2023-04-18T07:15:47.702191Z",
              "displayName": "Deny compute instance get",
              "etag": "MTc3MDA1ODIyNjExNTMzMDg2NzI=",
              "kind": "DenyPolicy",
              "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/deny-compute-get",
              "rules": [
                {
                  "denyRule": {
                    "deniedPrincipals": [
                      "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com"
                    ],
                    "deniedPermissions": [
                      "compute.googleapis.com/instances.get"
                    ]
                  }
                }
              ],
              "uid": "77e93c80-b383-0027-268e-a52a608aa13d",
              "updateTime": "2023-04-18T07:15:47.702191Z",
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "ruleExplanations": [
              {
                "combinedDeniedPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedDeniedPrincipal": {
                  "membership": "MEMBERSHIP_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedExceptionPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedExceptionPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "deniedPermissions": {
                  "compute.googleapis.com/instances.get": {
                    "permissionMatchingState": "PERMISSION_PATTERN_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                  }
                },
                "deniedPrincipals": {
                  "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com": {
                    "membership": "MEMBERSHIP_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                  }
                },
                "denyAccessState": "DENY_ACCESS_STATE_DENIED",
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            ]
          }
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012",
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      }
    ],
    "permissionDeniable": true,
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "overallAccessState": "CANNOT_ACCESS"
}

REST

Per scoprire perché un'entità ha o non ha un'autorizzazione IAM, utilizza il metodo iam.troubleshoot dell'API Policy Strumento per la risoluzione dei problemi.

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

  • EMAIL: l'indirizzo email dell'entità di cui vuoi risolvere i problemi relativi alle autorizzazioni.
  • RESOURCE: la risorsa per cui viene concessa l'autorizzazione.
  • PERMISSION: l'autorizzazione per cui vuoi risolvere i problemi.
  • PROJECT_ID: l'ID del progetto che vuoi utilizzare per effettuare la richiesta. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.

Metodo HTTP e URL:

POST https://policytroubleshooter.googleapis.com/v3/iam:troubleshoot

Corpo JSON richiesta:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION"
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "overallAccessState": "CANNOT_ACCESS",
  "accessTuple": {
    "principal": "user1@example.com",
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "compute.instances.get",
    "permissionFqdn": "compute.googleapis.com/instances.get",
    "conditionContext": {
      "effectiveTags": [
        {
          "tagValue": "tagValues/281481941428044",
          "namespacedTagValue": "803434038361/env/dev",
          "tagKey": "tagKeys/281475994198094",
          "namespacedTagKey": "803434038361/env",
          "tagKeyParentName": "organizations/803434038361"
        }
      ]
    }
  },
  "allowPolicyExplanation": {
    "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
    "explainedPolicies": [
      {
        "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
        "bindingExplanations": [
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
            "role": "roles/compute.viewer",
            "rolePermission": "ROLE_PERMISSION_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH",
            "combinedMembership": {
              "membership": "MEMBERSHIP_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_HIGH"
            },
            "memberships": {
              "user:user1@example.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "role": "roles/owner",
            "rolePermission": "ROLE_PERMISSION_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "role": "roles/resourcemanager.organizationAdmin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL",
            "combinedMembership": {
              "membership": "MEMBERSHIP_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user1@example.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL"
          }
        ],
        "relevance": "HEURISTIC_RELEVANCE_HIGH",
        "policy": {
          "version": 3,
          "etag": "BwX5/L9Vbg4=",
          "bindings": [
            {
              "role": "roles/compute.viewer",
              "members": [
                "user:user1@example.com"
              ]
            },
            {
              "role": "roles/owner",
              "members": [
                "user:user2@example.com"
              ]
            },
            {
              "role": "roles/resourcemanager.organizationAdmin",
              "members": [
                "user:user1@example.com"
              ]
            },
          ]
        }
      }
    ],
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  },
  "denyPolicyExplanation": {
    "denyAccessState": "DENY_ACCESS_STATE_DENIED",
    "explainedResources": [
      {
        "denyAccessState": "DENY_ACCESS_STATE_DENIED",
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012",
        "explainedPolicies": [
          {
            "denyAccessState": "DENY_ACCESS_STATE_DENIED",
            "policy": {
              "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/deny-compute-get",
              "uid": "77e93c80-b383-0027-268e-a52a608aa13d",
              "kind": "DenyPolicy",
              "displayName": "Deny compute instance get",
              "etag": "MTc3MDA1ODIyNjExNTMzMDg2NzI=",
              "createTime": "2023-04-18T07:15:47.702191Z",
              "updateTime": "2023-04-18T07:15:47.702191Z",
              "rules": [
                {
                  "denyRule": {
                    "deniedPrincipals": [
                      "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com"
                    ],
                    "deniedPermissions": [
                      "compute.googleapis.com/instances.get"
                    ]
                  }
                }
              ]
            },
            "ruleExplanations": [
              {
                "denyAccessState": "DENY_ACCESS_STATE_DENIED",
                "combinedDeniedPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "deniedPermissions": {
                  "compute.googleapis.com/instances.get": {
                    "permissionMatchingState": "PERMISSION_PATTERN_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                  }
                },
                "combinedExceptionPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedDeniedPrincipal": {
                  "membership": "MEMBERSHIP_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "deniedPrincipals": {
                  "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com": {
                    "membership": "MEMBERSHIP_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                  }
                },
                "combinedExceptionPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            ],
            "relevance": "HEURISTIC_RELEVANCE_HIGH"
          }
        ],
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      }
    ],
    "relevance": "HEURISTIC_RELEVANCE_HIGH",
    "permissionDeniable": true
  }
}

Comprendere i risultati dello strumento per la risoluzione dei problemi

Console

La pagina dei risultati contiene le seguenti informazioni:

Dettagli della valutazione

La sezione Dettagli valutazione contiene un riepilogo dell'accesso per il quale stai risolvendo i problemi, che include entità, risorsa e autorizzazione specificati. Se stai risolvendo problemi relativi a più coppie di autorizzazioni delle risorse, puoi utilizzare l'elenco Valutazione degli accessi per passare da una all'altra.

Dettagli delle norme

La sezione Dettagli criterio contiene dettagli su come i criteri di autorizzazione e negazione pertinenti influiscono sull'accesso dell'entità.

I criteri di autorizzazione e di negazione pertinenti includono:

  • Il criterio di autorizzazione della risorsa
  • Gli eventuali criteri di negazione della risorsa
  • I criteri di autorizzazione del progetto, della cartella e dell'organizzazione padre della risorsa, se presenti
  • I criteri di negazione dell'organizzazione, della cartella e del progetto padre della risorsa, se presenti

I criteri di autorizzazione e rifiuto dei progetti, delle cartelle e delle organizzazioni padre sono pertinenti per via dell'ereditarietà dei criteri. Quando colleghi un criterio di autorizzazione o negazione a un progetto, una cartella o un'organizzazione, questo criterio si applica anche a tutte le risorse all'interno del progetto, della cartella o dell'organizzazione.

Ad esempio, se un criterio di negazione per un'organizzazione indica che un'entità non può utilizzare un'autorizzazione specifica, non può utilizzare quell'autorizzazione per nessuna risorsa all'interno dell'organizzazione. Questa regola si applica anche se le cartelle e i progetti all'interno dell'organizzazione hanno criteri di negazione più permissivi o criteri di autorizzazione che conferiscono l'autorizzazione all'entità.

Analogamente, se un criterio di autorizzazione per un progetto concede a un'entità un'autorizzazione specifica, l'entità dispone di questa autorizzazione per qualsiasi risorsa all'interno del progetto, a condizione che non sia negata.

La sezione Dettagli norme contiene le seguenti sezioni:

Stato dell'accesso

La sezione Stato di accesso contiene un breve riepilogo dell'accesso dell'entità in base ai criteri di autorizzazione e negazione IAM pertinenti. Questo riepilogo include l'impatto dei criteri di negazione, l'impatto dei criteri di autorizzazione e il risultato finale dell'accesso in base ai criteri di negazione e autorizzazione pertinenti.

Criterio di negazione

Nella sezione Criterio di negazione puoi visualizzare tutti i criteri di negazione pertinenti, identificare le regole di negazione che negano l'accesso all'entità e capire perché una regola di negazione nega o non nega l'entità.

Il riquadro Risorse con criteri di negazione elenca tutti i criteri di negazione pertinenti, organizzati in base alle risorse a cui sono collegati. Accanto a ogni criterio di negazione c'è una valutazione dell'accesso. Questa valutazione si applica solo a quel criterio di negazione e non riflette alcun accesso dai criteri ereditati. Se non hai l'autorizzazione per visualizzare il criterio di negazione di una risorsa, l'elenco delle risorse non include la risorsa o i relativi criteri di negazione.

Per visualizzare le regole di negazione pertinenti in questi criteri di negazione, fai clic su un criterio di negazione. Per visualizzare tutte le regole di negazione nei criteri di negazione di una risorsa, fai clic su una risorsa. Le regole di negazione vengono visualizzate nel riquadro Regole di negazione. Questo riquadro contiene una tabella di tutte le regole di negazione con l'entità o l'autorizzazione sottoposta a query per la risorsa o il criterio di negazione che hai selezionato.

La colonna Accesso indica se la regola di negazione nega l'entità l'autorizzazione. Per visualizzare ulteriori dettagli sulla regola di negazione, fai clic su Visualizza regola di negazione nella riga della regola.

Criterio di autorizzazione

Nella sezione Criterio di autorizzazione, puoi esplorare tutti i criteri di autorizzazione pertinenti, identificare le associazioni di ruoli che concedono l'accesso all'entità e capire perché l'associazione dei ruoli concede o non concede all'entità l'autorizzazione.

Il riquadro Risorse elenca la risorsa specificata e i relativi predecessori. Accanto a ogni risorsa è presente una valutazione dell'accesso. Questa valutazione si applica solo al criterio di autorizzazione della risorsa e non riflette l'accesso dai criteri ereditati. Se non hai l'autorizzazione per visualizzare il criterio di autorizzazione di una risorsa, tale risorsa non è inclusa nell'elenco delle risorse.

Fai clic sulla risorsa per visualizzare le associazioni di ruoli pertinenti nel criterio di autorizzazione di una risorsa e vedere come assegnano o meno l'autorizzazione all'entità. Le associazioni del criterio di autorizzazione vengono visualizzate nel riquadro Associazioni dei ruoli.

Il riquadro Associazioni di ruoli contiene una tabella di associazioni di ruoli nel criterio di autorizzazione della risorsa selezionata. Per impostazione predefinita, la tabella contiene solo associazioni di ruoli che includono un ruolo con l'autorizzazione specificata. Se l'entità non ha accesso, la tabella mostra anche le associazioni di ruoli con ruoli personalizzati modificabili. Per visualizzare tutte le associazioni di ruoli, deseleziona la casella di controllo Mostra solo associazioni pertinenti.

La colonna Accesso indica se l'associazione del ruolo concede all'entità l'autorizzazione. Per visualizzare ulteriori dettagli sull'associazione dei ruoli, fai clic su Visualizza i dettagli dell'associazione nella riga dell'associazione.

gcloud

La risposta contiene quattro sezioni principali: una descrizione della tupla di accesso nella richiesta, i risultati della valutazione del criterio di autorizzazione, i risultati della valutazione del criterio di negazione e lo stato di accesso complessivo.

  • accessTuple: una descrizione della tupla di accesso nella richiesta, che include l'eventuale contesto della condizione che hai fornito. Questa sezione contiene anche un riepilogo dei tag che si applicano alla risorsa.
  • allowPolicyExplanation: un riepilogo che indica se i criteri di autorizzazione pertinenti concedono l'autorizzazione all'entità, seguito da un elenco di criteri di autorizzazione e delle relative associazioni di ruoli.

    Per ogni criterio di autorizzazione, la risposta elenca tutte le associazioni di ruoli nel criterio e le valuta in base ai seguenti criteri:

    • Indica se l'associazione include l'autorizzazione.
    • Indica se l'associazione include l'entità.
    • Se sono soddisfatte le condizioni dell'associazione.

    Quindi, la risposta stampa il testo JSON completo del criterio di autorizzazione.

  • denyPolicyExplanation: un riepilogo che indica se i criteri di negazione pertinenti negano all'entità l'autorizzazione, seguito da un elenco di risorse con criteri di negazione. Per ogni risorsa, la risposta elenca tutti i criteri di negazione associati alla risorsa.

    Per ogni criterio di negazione, la risposta stampa i metadati del criterio, elenca le regole di negazione nel criterio e valuta ogni regola in base ai seguenti criteri:

    • Indica se la regola di negazione include l'autorizzazione.
    • Indica se l'autorizzazione è elencata come eccezione nella regola di negazione.
    • Indica se la regola di negazione include l'entità.
    • Indica se l'entità è elencata come eccezione nella regola di negazione.
    • Indica se vengono soddisfatte le eventuali condizioni della regola di negazione.
  • overallAccessState: indica se l'entità è in grado di utilizzare l'autorizzazione specificata per accedere alla risorsa specificata in base ai criteri di autorizzazione e negazione pertinenti.

    I criteri di autorizzazione e di negazione pertinenti includono:

    • Il criterio di autorizzazione della risorsa
    • Gli eventuali criteri di negazione della risorsa
    • I criteri di autorizzazione del progetto, della cartella e dell'organizzazione padre della risorsa, se presenti
    • I criteri di negazione dell'organizzazione, della cartella e del progetto padre della risorsa, se presenti

    I criteri di autorizzazione e rifiuto dei progetti, delle cartelle e delle organizzazioni padre sono pertinenti per via dell'ereditarietà dei criteri. Quando colleghi un criterio di autorizzazione o negazione a un progetto, una cartella o un'organizzazione, questo criterio si applica anche a tutte le risorse all'interno del progetto, della cartella o dell'organizzazione.

    Ad esempio, se un criterio di negazione per un'organizzazione indica che un'entità non può utilizzare un'autorizzazione specifica, non può utilizzare quell'autorizzazione per nessuna risorsa all'interno dell'organizzazione. Questa regola si applica anche se le cartelle e i progetti all'interno dell'organizzazione hanno criteri di negazione più permissivi o criteri di autorizzazione che conferiscono l'autorizzazione all'entità.

    Analogamente, se un criterio di autorizzazione per un progetto concede a un'entità un'autorizzazione specifica, l'entità dispone di questa autorizzazione per qualsiasi risorsa all'interno del progetto, a condizione che non sia negata.

  • Molti oggetti nella risposta hanno anche un campo relevance. Il valore in questo campo indica in che misura l'oggetto contribuisce allo stato di accesso generale. Il campo relevance può contenere i seguenti valori:

    • HEURISTIC_RELEVANCE_HIGH: indica che l'oggetto ha un forte impatto sul risultato. In altre parole, la rimozione dell'oggetto probabilmente modificherà lo stato di accesso generale. Ad esempio, un'associazione di ruoli che concede all'entità l'autorizzazione specificata avrà questo valore di pertinenza.

    • HEURISTIC_RELEVANCE_NORMAL: indica che l'oggetto ha un impatto limitato sul risultato. In altre parole, è improbabile che la rimozione dell'oggetto modifichi lo stato di accesso complessivo. Ad esempio, una regola di negazione che non contiene l'autorizzazione o l'entità avrà questo valore di pertinenza.

REST

La risposta contiene quattro sezioni principali: lo stato di accesso complessivo, una descrizione della tupla di accesso nella richiesta, i risultati della valutazione dei criteri di autorizzazione e i risultati della valutazione dei criteri di negazione.

  • overallAccessState: indica se l'entità è in grado di utilizzare l'autorizzazione specificata per accedere alla risorsa specificata in base ai criteri di autorizzazione e negazione pertinenti.

    I criteri di autorizzazione e di negazione pertinenti includono:

    • Il criterio di autorizzazione della risorsa
    • Gli eventuali criteri di negazione della risorsa
    • I criteri di autorizzazione del progetto, della cartella e dell'organizzazione padre della risorsa, se presenti
    • I criteri di negazione dell'organizzazione, della cartella e del progetto padre della risorsa, se presenti

    I criteri di autorizzazione e rifiuto dei progetti, delle cartelle e delle organizzazioni padre sono pertinenti per via dell'ereditarietà dei criteri. Quando colleghi un criterio di autorizzazione o negazione a un progetto, una cartella o un'organizzazione, questo criterio si applica anche a tutte le risorse all'interno del progetto, della cartella o dell'organizzazione.

    Ad esempio, se un criterio di negazione per un'organizzazione indica che un'entità non può utilizzare un'autorizzazione specifica, non può utilizzare quell'autorizzazione per nessuna risorsa all'interno dell'organizzazione. Questa regola si applica anche se le cartelle e i progetti all'interno dell'organizzazione hanno criteri di negazione più permissivi o criteri di autorizzazione che conferiscono l'autorizzazione all'entità.

    Analogamente, se un criterio di autorizzazione per un progetto concede a un'entità un'autorizzazione specifica, l'entità dispone di questa autorizzazione per qualsiasi risorsa all'interno del progetto, a condizione che non sia negata.

  • accessTuple: una descrizione della tupla di accesso nella richiesta, che include l'eventuale contesto della condizione che hai fornito. Questa sezione contiene anche un riepilogo dei tag che si applicano alla risorsa.
  • allowPolicyExplanation: un riepilogo che indica se i criteri di autorizzazione pertinenti concedono l'autorizzazione all'entità, seguito da un elenco di criteri di autorizzazione e delle relative associazioni di ruoli.

    Per ogni criterio di autorizzazione, la risposta elenca tutte le associazioni di ruoli nel criterio e le valuta in base ai seguenti criteri:

    • Indica se l'associazione include l'autorizzazione.
    • Indica se l'associazione include l'entità.
    • Se sono soddisfatte le condizioni dell'associazione.

    Quindi, la risposta stampa il testo JSON completo del criterio di autorizzazione.

  • denyPolicyExplanation: un riepilogo che indica se i criteri di negazione pertinenti negano all'entità l'autorizzazione, seguito da un elenco di risorse con criteri di negazione. Per ogni risorsa, la risposta elenca tutti i criteri di negazione associati alla risorsa.

    Per ogni criterio di negazione, la risposta stampa i metadati del criterio, elenca le regole di negazione nel criterio e valuta ogni regola in base ai seguenti criteri:

    • Indica se la regola di negazione include l'autorizzazione.
    • Indica se l'autorizzazione è elencata come eccezione nella regola di negazione.
    • Indica se la regola di negazione include l'entità.
    • Indica se l'entità è elencata come eccezione nella regola di negazione.
    • Indica se vengono soddisfatte le eventuali condizioni della regola di negazione.
  • Molti oggetti nella risposta hanno anche un campo relevance. Il valore in questo campo indica in che misura l'oggetto contribuisce allo stato di accesso generale. Il campo relevance può contenere i seguenti valori:

    • HEURISTIC_RELEVANCE_HIGH: indica che l'oggetto ha un forte impatto sul risultato. In altre parole, la rimozione dell'oggetto probabilmente modificherà lo stato di accesso generale. Ad esempio, un'associazione di ruoli che concede all'entità l'autorizzazione specificata avrà questo valore di pertinenza.

    • HEURISTIC_RELEVANCE_NORMAL: indica che l'oggetto ha un impatto limitato sul risultato. In altre parole, è improbabile che la rimozione dell'oggetto modifichi lo stato di accesso complessivo. Ad esempio, una regola di negazione che non contiene l'autorizzazione o l'entità avrà questo valore di pertinenza.

Risoluzione dei problemi relativi alle associazioni condizionali dei ruoli

Lo strumento per la risoluzione dei problemi relativi ai criteri risolve automaticamente i problemi relativi alle associazioni di ruoli condizionali e alle regole di negazione in base ai tag. Tuttavia, per risolvere altri tipi di associazioni di ruoli condizionali o regole di negazione condizionali, lo strumento per la risoluzione dei problemi relativi ai criteri ha bisogno di ulteriore contesto per la richiesta. Ad esempio, per risolvere i problemi relativi alle condizioni in base agli attributi data/ora, lo strumento per la risoluzione dei problemi relativi ai criteri ha bisogno dell'ora della richiesta.

Nell'interfaccia alla gcloud CLI e nell'API REST, devi fornire questo contesto aggiuntivo manualmente.

Nella console Google Cloud, puoi fornire questo contesto aggiuntivo risolvendo i problemi direttamente da qualsiasi audit log dell'attività di amministrazione o audit log degli accessi ai dati. Ogni voce di audit log corrisponde a una richiesta a un'API Google Cloud o a un'azione che Google Cloud esegue per tuo conto. Quando esegui la risoluzione dei problemi da un log di controllo, lo strumento per la risoluzione dei problemi relativi ai criteri riceve automaticamente informazioni aggiuntive sulla richiesta, come la data e l'ora, in modo che possa analizzare le associazioni di ruoli condizionali e le regole di negazione.

Console

Per risolvere i problemi relativi alle associazioni di ruoli condizionali e alle regole di negazione:

  1. Nella console Google Cloud, vai alla pagina Esplora log.

    Vai a Esplora log

  2. Se il titolo della pagina è Visualizzatore log legacy, fai clic sull'elenco a discesa Esegui l'upgrade e seleziona Esegui l'upgrade al nuovo Esplora log.

  3. Per visualizzare solo gli audit log dell'attività di amministrazione e dell'accesso ai dati, inserisci la seguente query in Query Builder, quindi fai clic su Esegui query:

    logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

    Sostituisci i seguenti valori:

    • RESOURCE_TYPE: il tipo di risorsa per cui vuoi elencare gli audit log. Utilizza projects, folders o organizations.
    • RESOURCE_ID: l'ID della risorsa.
  4. Individua la voce dell'audit log corrispondente alla richiesta di cui vuoi risolvere i problemi. Per scoprire come utilizzare Esplora log per trovare voci specifiche, consulta Utilizzo di Esplora log.

  5. Nella colonna Riepilogo della voce di log, fai clic su IAM e poi su Risolvi i problemi di accesso.

    Lo strumento per la risoluzione dei problemi relativi ai criteri utilizza le informazioni nella voce di log per risolvere i problemi di accesso, quindi mostra i risultati. Il contesto aggiuntivo è elencato nei dettagli della valutazione in Contesto della condizione. Per visualizzare i dettagli del contesto, fai clic su Visualizza contesto condizione. Per saperne di più sulla pagina dei risultati dello strumento per la risoluzione dei problemi relativi ai criteri, vedi Risoluzione dei problemi di accesso in questa pagina.

  6. (Facoltativo) Per risolvere i problemi di un'altra richiesta che riguarda associazioni di ruoli condizionali e regole di negazione, torna alla pagina Esplora log e ripeti i passaggi precedenti.

gcloud

Per risolvere i problemi relativi alle associazioni di ruoli condizionali e alle regole di negazione, utilizza il comando gcloud policy-troubleshoot iam.

Prima di utilizzare uno qualsiasi dei dati del comando riportati di seguito, apporta le seguenti sostituzioni:

  • EMAIL: l'indirizzo email dell'entità di cui vuoi risolvere i problemi relativi alle autorizzazioni.
  • RESOURCE: la risorsa per cui è stata concessa l'autorizzazione.
  • PERMISSION: l'autorizzazione per cui vuoi risolvere i problemi.
  • DESTINATION_IP: facoltativo. L'indirizzo IP di destinazione della richiesta da utilizzare durante il controllo delle associazioni di ruoli condizionali. Ad esempio, 198.1.1.1.
  • DESTINATION_PORT: facoltativo. La porta di destinazione della richiesta da utilizzare durante il controllo delle associazioni di ruoli condizionali. Ad esempio, "8080".
  • REQUEST_TIME: facoltativo. Il timestamp della richiesta da utilizzare durante il controllo delle associazioni di ruoli condizionali. Utilizza un timestamp in formato RFC 3339, ad esempio 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: facoltativo. Il valore del nome della risorsa da utilizzare durante il controllo delle associazioni di ruoli condizionali. Per un elenco dei formati dei nomi delle risorse accettati, vedi Formato del nome delle risorse.
  • RESOURCE_SERVICE: facoltativo. Il valore del servizio della risorsa da utilizzare durante il controllo delle associazioni di ruoli condizionali. Per un elenco dei nomi dei servizi accettati, vedi Valori dei servizi delle risorse.
  • RESOURCE_TYPE: facoltativo. Per un elenco dei tipi di risorse accettati, vedi Valori dei tipi di risorse.

Esegui il comando gcloud policy-troubleshoot iam:

Linux, macOS o Cloud Shell

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION --destination-ip=DESTINATION_IP \
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME \
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE \
    --resource-type=RESOURCE_TYPE

Windows (PowerShell)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION --destination-ip=DESTINATION_IP `
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME `
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE `
    --resource-type=RESOURCE_TYPE

Windows (cmd.exe)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION --destination-ip=DESTINATION_IP ^
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME ^
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE ^
    --resource-type=RESOURCE_TYPE

La risposta contiene una spiegazione dell'accesso dell'entità. Per ogni regola di associazione e negazione dei ruoli con una condizione, la risposta include un campo conditionExplanation che descrive se la condizione restituisce true o false in base al contesto della condizione che hai fornito.

Ad esempio, di seguito è riportata la valutazione di un'associazione di ruoli con una condizione che specifica il tipo e il servizio delle risorse:

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "evaluationStates": [{
      "end": 51,
      "start": 1,
      "value": true
    }, {
      "end": 99,
      "start": 55,
      "value": true
    }],
    "value": true,
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
}
...

REST

Per risolvere i problemi relativi alle associazioni di ruoli condizionali e alle regole di negazione, utilizza il metodo iam.troubleshoot dell'API Policy Strumento per la risoluzione dei problemi.

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

  • EMAIL: l'indirizzo email dell'entità di cui vuoi risolvere i problemi relativi alle autorizzazioni.
  • RESOURCE: la risorsa per cui è stata concessa l'autorizzazione.
  • PERMISSION: l'autorizzazione per cui vuoi risolvere i problemi.
  • DESTINATION_IP: facoltativo. L'indirizzo IP di destinazione della richiesta da utilizzare durante il controllo delle associazioni di ruoli condizionali. Ad esempio, 198.1.1.1.
  • DESTINATION_PORT: facoltativo. La porta di destinazione della richiesta da utilizzare durante il controllo delle associazioni di ruoli condizionali. Ad esempio, "8080".
  • REQUEST_TIME: facoltativo. Il timestamp della richiesta da utilizzare durante il controllo delle associazioni di ruoli condizionali. Utilizza un timestamp in formato RFC 3339, ad esempio 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: facoltativo. Il valore del nome della risorsa da utilizzare durante il controllo delle associazioni di ruoli condizionali. Per un elenco dei formati dei nomi delle risorse accettati, vedi Formato del nome delle risorse.
  • RESOURCE_SERVICE: facoltativo. Il valore del servizio della risorsa da utilizzare durante il controllo delle associazioni di ruoli condizionali. Per un elenco dei nomi dei servizi accettati, vedi Valori dei servizi delle risorse.
  • RESOURCE_TYPE: facoltativo. Per un elenco dei tipi di risorse accettati, vedi Valori dei tipi di risorse.

Metodo HTTP e URL:

POST https://policytroubleshooter.googleapis.com/v3/iam:troubleshoot

Corpo JSON richiesta:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION",
    "conditionContext": {
      "destination": {
        "ip": DESTINATION_IP,
        "port": DESTINATION_PORT
      },
      "request": {
        "receiveTime": REQUEST_TIME
      },
      "resource": {
        "name": RESOURCE_NAME,
        "service": RESOURCE_SERVICE,
        "type": RESOURCE_TYPE
      }
    }
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene una spiegazione dell'accesso dell'entità. Per ogni regola di associazione e negazione dei ruoli con una condizione, la risposta include un campo conditionExplanation che descrive se la condizione restituisce true o false in base al contesto della condizione che hai fornito.

Ad esempio, di seguito è riportata la valutazione di un'associazione di ruoli con una condizione che specifica il tipo e il servizio delle risorse:

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "value": true,
    "evaluationStates": [{
      "start": 1,
      "end": 51,
      "value": true
    }, {
      "start": 55,
      "end": 99,
      "value": true
    }]
  }
}
...

Passaggi successivi