Risoluzione dei problemi relativi alle autorizzazioni IAM

Lo strumento per la risoluzione dei problemi dei criteri ti aiuta a capire se un'entità può accedere a una risorsa. Dati un'entità, una risorsa e un'autorizzazione, lo strumento per la risoluzione dei problemi dei criteri esamina i criteri di autorizzazione, di negazione e di limite di accesso all'entità (PAB) che influiscono sull'accesso dell'entità. Poi ti dice se, in base a questi criteri, l'entità può utilizzare l'autorizzazione specificata per accedere alla risorsa. Vengono inoltre elencate le norme pertinenti e spiegato 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 di base, in genere è più veloce utilizzare la console Google Cloud. Per scenari più complessi, valuta la possibilità di utilizzare l'interfaccia a riga di comando gcloud o l'API REST.

Prima di iniziare

  • Enable the Policy Troubleshooter API.

    Enable the API

Autorizzazioni obbligatorie

Per risolvere completamente i problemi di accesso dei principali, devi disporre delle seguenti autorizzazioni.

Autorizzazioni per la risoluzione dei problemi di accesso per i singoli principali

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

Autorizzazioni per la risoluzione dei problemi relativi ai criteri di autorizzazione e di negazione

Per risolvere i problemi relativi ai criteri di autorizzazione e di rifiuto, devi disporre delle autorizzazioni per l'organizzazione che contiene la risorsa che vuoi risolvere. Queste autorizzazioni ti consentono di visualizzare i criteri di autorizzazione e di negazione che controllano l'accesso alla risorsa.

Per ottenere le autorizzazioni necessarie per risolvere i problemi di accesso di un principale, chiedi all'amministratore di concederti i seguenti ruoli IAM nell'organizzazione contenente la risorsa per cui vuoi risolvere i problemi di accesso:

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

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Se non disponi dell'autorizzazione per visualizzare i criteri di autorizzazione e di rifiuto per una risorsa, i risultati di accesso per questi criteri sono Unknown.

Autorizzazioni per la risoluzione dei problemi relativi ai criteri di Principal Access Boundary

Per risolvere i problemi relativi ai criteri di confine dell'accesso dell'entità, devi disporre delle autorizzazioni per l'organizzazione il cui insieme di entità include l'entità. Il modo in cui identifichi questa organizzazione dipende dal tipo di principale:

  • Account Google e gruppi Google: l'organizzazione associata al dominio Google Workspace che include il principale
  • Identità federate (identità nei pool di identità della forza lavoro o nei pool di identità del workload): l'organizzazione che contiene il pool di identità che include il principale
  • Account di servizio: l'organizzazione che contiene il progetto in cui è stato creato l'account di servizio

Queste autorizzazioni ti consentono di visualizzare i criteri di Principal Access Boundary che controllano ciò a cui l'entità può accedere.

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

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

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Se non disponi dell'autorizzazione per visualizzare i criteri di Principal Access Boundary applicati a un'entità, i risultati di accesso per i criteri di Principal Access Boundary sono Unknown.

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

Se i criteri di autorizzazione e diniego includono gruppi, devi disporre dell'autorizzazione API Admin di Google Workspace groups.read per risolvere i problemi di accesso per i 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 amministratore di gruppo, crea un ruolo amministrativo di Google Workspace personalizzato che contenga il privilegio groups.read (in Privilegi API amministrative) e concedilo all'utente.

Se non disponi di queste autorizzazioni, le associazioni di ruoli e le regole di rifiuto che contengono gruppi o domini hanno un risultato di accesso Sconosciuto, a meno che l'associazione di ruoli o la regola di rifiuto non includa esplicitamente anche l'entità.

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

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

Se non disponi di queste autorizzazioni, le associazioni di ruoli e le regole di rifiuto che contengono gruppi o domini hanno un risultato di accesso Sconosciuto, a meno che l'associazione di ruoli o la regola di rifiuto non includa esplicitamente anche l'entità.

Risolvere i problemi di accesso

Per risolvere i problemi di accesso, devi disporre delle seguenti informazioni:

  • Principal: l'indirizzo email da controllare. L'indirizzo email deve fare riferimento a un account utente o di servizio. Altri tipi di entità, tra cui gruppi, domini, identità della forza lavoro e identità per i workload, non sono supportati.
  • Risorsa:il nome completo della risorsa per la quale vuoi risolvere i problemi di accesso. Ad esempio, per risolvere i problemi di accesso al progetto my-project, inserisci //cloudresourcemanager.googleapis.com/projects/my-project. Per altri tipi di risorse, consulta gli esempi di nomi completi delle risorse.

  • Autorizzazione:l'autorizzazione da controllare. Se utilizzi la console Google Cloud, viene visualizzato un elenco di suggerimenti man mano che digiti.

    Per risolvere i problemi relativi a un'autorizzazione, questa deve essere applicabile alla risorsa nella richiesta. In altre parole, deve essere possibile utilizzare questa autorizzazione per accedere alla risorsa in qualche modo. Se l'autorizzazione non è applicabile alla risorsa, la richiesta non va a buon fine. Ad esempio, se provi a risolvere i problemi relativi all'autorizzazione compute.instances.get per un cluster Google Kubernetes Engine, la richiesta non va a buon fine perché l'autorizzazione compute.instances.get non può essere utilizzata per accedere ai cluster Google Kubernetes Engine.compute.instance.get

    Per un elenco completo delle autorizzazioni, consulta il riferimento alle 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 a Strumento per la risoluzione dei problemi relativi ai criteri

  2. Inserisci l'indirizzo 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 i problemi di accesso per un progetto, una cartella o un'organizzazione, inizia a digitare per visualizzare le opzioni di completamento automatico.
    • Se stai risolvendo 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 da 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 controllare.

    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 accesso.

gcloud

Per scoprire perché un'entità dispone o meno di un'autorizzazione IAM, utilizza il comando gcloud beta policy-troubleshoot iam.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • VERSION: facoltativo. La versione del comando da utilizzare. Per risolvere i problemi relativi all'accesso basato solo su criteri di autorizzazione e negazione, non specificare una versione. Per risolvere i problemi di accesso basati su criteri di autorizzazione, di negazione e di limiti di accesso all'entità, utilizza la versione beta.
  • 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 di cui vuoi risolvere i problemi.

Esegui il comando gcloud beta policy-troubleshoot iam:

Linux, macOS o Cloud Shell

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

Windows (PowerShell)

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

Windows (cmd.exe)

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

Dovresti ricevere una risposta simile alla seguente:

Risposta

{
  "accessTuple": {
    "conditionContext": {
      "destination": {},
      "effectiveTags": [
        {
          "namespacedTagKey": "project-1/tag-key-1",
          "namespacedTagValue": "project-1/tag-key-1/tag-value-1",
          "tagKey": "tagKeys/123456789012",
          "tagKeyParentName": "projects/123456789012",
          "tagValue": "tagValues/123456789012"
        },
      ],
      "request": {},
      "resource": {}
    },
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
    "permission": "bigtable.instances.create",
    "permissionFqdn": "bigtable.googleapis.com/instances.create",
    "principal": "service-account-3@project-1.iam.gserviceaccount.com"
  },
  "allowPolicyExplanation": {
    "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
    "explainedPolicies": [
      {
        "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
        "bindingExplanations": [
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
              "title": "Resource-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 62,
                  "value": false
                }
              ],
              "value": false
            },
            "memberships": {
              "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
              "title": "Tag-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 73,
                  "value": true
                }
              ],
              "value": true
            },
            "memberships": {
              "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/compute.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-3@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/iam.serviceAccountTokenCreator",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "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": {
              "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.projectIamAdmin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.tagViewer",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          }
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
        "policy": {
          "bindings": [
            {
              "condition": {
                "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
                "title": "Resource-based condition"
              },
              "members": [
                "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "condition": {
                "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
                "title": "Tag-based condition"
              },
              "members": [
                "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "members": [
                "user:user-2@example.com"
              ],
              "role": "roles/compute.admin"
            },
            {
              "members": [
                "user:user-1@example.com",
                "user:user-3@example.com"
              ],
              "role": "roles/iam.serviceAccountTokenCreator"
            },
            {
              "members": [
                "user:user-2@example.com",
                "user:user-1@example.com"
              ],
              "role": "roles/owner"
            },
            {
              "members": [
                "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com",
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.projectIamAdmin"
            },
            {
              "members": [
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.tagViewer"
            }
          ],
          "etag": "BwYY6ttEMEY=",
          "version": 3
        },
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      },
    ],
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "denyPolicyExplanation": {
    "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
    "explainedResources": [
      {
        "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
        "explainedPolicies": [
          {
            "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
            "policy": {
              "createTime": "2024-04-09T23:28:24.103203Z",
              "displayName": "Troubleshooter v3 prober non-tag deny policy",
              "etag": "MTgyMzk3MDY4OTY4MDE0ODg4OTY=",
              "kind": "DenyPolicy",
              "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F546942305807/denypolicies/deny-policy-1",
              "rules": [
                {
                  "denyRule": {
                    "deniedPermissions": [
                      "bigquery.googleapis.com/datasets.create"
                    ],
                    "deniedPrincipals": [
                      "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com"
                    ]
                  }
                }
              ],
              "uid": "fab63b4d-ecfb-5f06-8a6d-602bf1be5062",
              "updateTime": "2024-05-20T23:29:38.428095Z"
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "ruleExplanations": [
              {
                "combinedDeniedPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedDeniedPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedExceptionPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedExceptionPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "deniedPermissions": {
                  "bigquery.googleapis.com/datasets.create": {
                    "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "deniedPrincipals": {
                  "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com": {
                    "membership": "MEMBERSHIP_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            ]
          },
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012",
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      }
    ],
    "permissionDeniable": true,
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  },
  "overallAccessState": "CANNOT_ACCESS",
  "pabPolicyExplanation": {
    "explainedBindingsAndPolicies": [
      {
        "bindingAndPolicyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
        "explainedPolicy": {
          "explainedRules": [
            {
              "combinedResourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED",
              "effect": "ALLOW",
              "explainedResources": [
                {
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL",
                  "resource": "//cloudresourcemanager.googleapis.com/projects/project-2",
                  "resourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED"
                }
              ],
              "relevance": "HEURISTIC_RELEVANCE_NORMAL",
              "ruleAccessState": "PAB_ACCESS_STATE_NOT_ALLOWED"
            }
          ],
          "policy": {
            "createTime": "2024-04-09T17:40:51.627668Z",
            "details": {
              "enforcementVersion": "1",
              "rules": [
                {
                  "effect": "ALLOW",
                  "resources": [
                    "//cloudresourcemanager.googleapis.com/projects/project-2"
                  ]
                }
              ]
            },
            "displayName": "Troubleshooter v3 PAB Policy",
            "etag": "m64s4IgR80eDJDywuVA2DA==",
            "name": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "uid": "puid_11875429267422576641",
            "updateTime": "2024-04-09T17:40:51.627668Z"
          },
          "policyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
          "policyVersion": {
            "enforcementState": "PAB_POLICY_ENFORCEMENT_STATE_NOT_ENFORCED",
            "version": 1
          },
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "explainedPolicyBinding": {
          "conditionExplanation": {
            "evaluationStates": [
              {
                "end": 53,
                "value": true
              },
              {
                "end": 153,
                "start": 58,
                "value": false
              },
              {
                "end": 248,
                "start": 157,
                "value": false
              }
            ],
            "value": false
          },
          "policyBinding": {
            "condition": {
              "expression": "principal.type == 'iam.googleapis.com/ServiceAccount' && (principal.subject=='service-account-1@project-1.iam.gserviceaccount.com' || principal.subject=='service-account-2@project-1.iam.gserviceaccount.com')"
            },
            "createTime": "2024-04-09T17:51:13.504418Z",
            "displayName": "PAB Policy Binding on project-1 project",
            "etag": "W/\"hz9IKzHsIqvopqDRcVYDxQ==\"",
            "name": "projects/123456789012/locations/global/policyBindings/example-policy-binding",
            "policy": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
            "policyUid": "puid_11875429267422576641",
            "target": {
              "principalSet": "//cloudresourcemanager.googleapis.com/projects/project-1"
            },
            "uid": "buid_1012746966204940289", 
            "updateTime": "2024-05-09T23:08:56.846355Z"
          },
          "policyBindingState": "POLICY_BINDING_STATE_NOT_ENFORCED",
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "relevance": "HEURISTIC_RELEVANCE_NORMAL"
      }
    ],
    "principalAccessBoundaryAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  }
}

REST

Per scoprire perché un'entità dispone o meno di un'autorizzazione IAM, utilizza il metodo iam.troubleshoot dell'API Policy Troubleshooter.

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

  • VERSION: la versione dell'API da utilizzare per questa richiesta. Per risolvere i problemi relativi all'accesso basato solo su criteri di autorizzazione e negazione, utilizza v3. Per risolvere i problemi di accesso basati su criteri di autorizzazione, di negazione e di confine di accesso principale, utilizza v3beta.
  • 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 di 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/VERSION/iam:troubleshoot

Corpo JSON della 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:

Informazioni sui 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 cui stai tentando di risolvere il problema, inclusi il principale, la risorsa e l'autorizzazione specificati. Se stai risolvendo i problemi relativi a più coppie di autorizzazioni delle risorse, puoi utilizzare l'elenco Valutazione accesso per passare da una all'altra.

Dettagli delle norme

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

I criteri di Principal Access Boundary pertinenti includono tutti i criteri di Principal Access Boundary associati a un insieme di entità che include l'entità.

I criteri di autorizzazione e di rifiuto pertinenti includono quanto segue:

  • Il criterio di autorizzazione della risorsa
  • Eventuali criteri di rifiuto della risorsa
  • I criteri di autorizzazione del progetto, della cartella e dell'organizzazione di primo livello della risorsa, se presenti
  • I criteri di rifiuto del progetto, della cartella e dell'organizzazione padre della risorsa, se presenti

I criteri di autorizzazione e diniego di progetti, cartelle e organizzazioni principali sono pertinenti a causa dell'eredita dei criteri. Quando colleghi un criterio di autorizzazione o diniego a un progetto, a una cartella o a 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 rifiuto per un'organizzazione indica che un'entità non può utilizzare un'autorizzazione specifica, l'entità non potrà utilizzare l'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 rifiuto più permissivi o criteri di autorizzazione che concedono all'entità l'autorizzazione.

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

La sezione Dettagli delle norme contiene le seguenti sezioni:

Stato dell'accesso

La sezione Stato di accesso riassume i risultati per ciascun tipo di criterio (criteri di Principal Access Boundary, criteri di negazione e criteri di autorizzazione) e indica il risultato complessivo. Il risultato indica se l'entità è in grado di utilizzare l'autorizzazione per accedere alla risorsa, in base ai criteri pertinenti.

Affinché un utente possa utilizzare l'autorizzazione per accedere alla risorsa, tutti i tipi di criteri devono consentire l'accesso. Per ulteriori informazioni, consulta la sezione Valutazione delle norme.

Criterio di confine dell'accesso dell'entità

Nella sezione Criterio di confine di accesso principale, puoi visualizzare tutti i criteri di confine di accesso principale a cui è soggetta l'entità e le associazioni delle policy che le associano all'entità.

Il riquadro Criteri elenca tutti i criteri associati a un insieme di entità che include l'entità. Accanto a ogni criterio è presente un'icona che indica in che modo il criterio influisce sull'accesso dell'entità.

I criteri di confine dell'accesso dell'entità possono influire sull'accesso di un'entità nei seguenti modi:

  • L'entità è idonea ad accedere alla risorsa: il criterio di confine di accesso dell'entità si applica all'entità e una delle sue regole contiene la risorsa sottoposta a query.
  • L'entità non è idonea ad accedere alla risorsa: il criterio di Principal Access Boundary si applica all'entità, ma la risorsa interrogata non è presente nelle regole del criterio.
  • Non applicata: i criteri di Principal Access Boundary non vengono applicati nelle seguenti situazioni:

    • IAM non applica l'autorizzazione specificata nella versione di applicazione del criterio di Principal Access Boundary. Di conseguenza, il criterio di Principal Access Boundary non può bloccare l'accesso.
    • A causa di una condizione nell'associazione dei criteri, il criterio o l'associazione di confine dell'accesso dell'entità non si applica all'entità.
    • Un criterio di Principal Access Boundary non ha regole.

    Se un criterio di Principal Access Boundary non viene applicato, non può influire sulla possibilità per l'entità di accedere alla risorsa.

Per visualizzare le regole e le associazioni associate a un criterio di Principal Access Boundary, fai clic sul nome del criterio. Il riquadro adiacente al riquadro Criteri mostra i dettagli del criterio.

Per visualizzare le regole nel criterio, fai clic sulla scheda Regole di confine. Questa scheda visualizza una tabella delle regole pertinenti dei criteri di Principal Access Boundary.

Una regola di limite di accesso all'entità è pertinente se influisce sul risultato complessivo della query dello strumento per la risoluzione dei problemi dei criteri. Di conseguenza, le regole pertinenti varieranno a seconda dei risultati dello strumento per la risoluzione dei problemi relativi ai criteri. Ad esempio, considera le seguenti situazioni:

  • Lo strumento per la risoluzione dei problemi relativi ai criteri indica che l'entità può accedere alla risorsa. Di conseguenza, le regole pertinenti sono quelle che rendono l'entità idonea ad accedere alla risorsa.
  • Lo strumento per la risoluzione dei problemi relativi ai criteri indica che l'entità non può accedere alla risorsa. Tuttavia, in base ai criteri di Principal Access Boundary pertinenti, l'entità è idonea ad accedere alla risorsa. Di conseguenza, nessuna regola è pertinente, perché i criteri di Principal Access Boundary non sono il motivo per cui l'entità non può accedere alla risorsa.
  • Lo strumento per la risoluzione dei problemi relativi ai criteri indica che l'entità non può accedere alla risorsa. Inoltre, in base ai criteri di Principal Access Boundary pertinenti, l'entità non è idonea ad accedere alla risorsa. Di conseguenza, le regole pertinenti sono quelle che non rendono l'entità idonea ad accedere alla risorsa.

Per visualizzare tutte le regole di confine dell'accesso dell'entità in un criterio, deseleziona la casella di controllo Mostra solo regole e associazioni pertinenti.

La colonna Risultati nella tabella delle regole di confine indica se la regola di confine di accesso principale contiene la risorsa sottoposta a query. Per visualizzare ulteriori dettagli sulla regola, fai clic su Visualizza i dettagli della regola.

Per visualizzare le associazioni di norme per il criterio, fai clic sulla scheda Associazioni. Questa scheda visualizza una tabella delle associazioni di criteri pertinenti per il criterio di confine dell'accesso dell'entità selezionato.

Un'associazione di criteri è pertinente se applica effettivamente il criterio di confine dell'accesso dell'entità all'entità interrogata. Affinché un'associazione di criteri applichi un criterio di confine dell'accesso dell'entità a un'entità, deve essere vero quanto segue:

  • L'entità impostata nell'associazione dei criteri deve includere l'entità sottoposta a query
  • Eventuali condizioni nell'associazione delle norme devono restituire il valore true per il principale sottoposto a query.

Per visualizzare tutte le associazioni di criteri con insiemi di entità che includono l'entità interrogata, indipendentemente dal fatto che l'entità interrogata soddisfi la condizione nell'associazione, deseleziona la casella di controllo Mostra solo regole e associazioni pertinenti.

La colonna Risultati nella tabella delle associazioni indica se l'associazione è applicata per l'entità interrogata. Per visualizzare ulteriori dettagli sull'associazione delle norme, fai clic su Visualizza i dettagli dell'associazione.

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'autorizzazione all'entità.

Il riquadro Risorse con criteri di rifiuto elenca tutti i criteri di rifiuto pertinenti, organizzati in base alle risorse a cui sono associati. Accanto a ogni criterio di rifiuto è presente una valutazione dell'accesso. Questa valutazione si applica solo al criterio di rifiuto 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 rifiuto pertinenti in questi criteri di rifiuto, fai clic su un criterio di rifiuto. Per visualizzare tutte le regole di rifiuto nei criteri di rifiuto 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 rifiuto con l'entità o l'autorizzazione interrogata per la risorsa o il criterio di rifiuto selezionato.

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

Criterio di autorizzazione

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

Il riquadro Risorse elenca la risorsa specificata e le risorse di primo livello. Accanto a ogni risorsa è presente una valutazione dell'accesso. Questa valutazione si applica solo al criterio di autorizzazione della risorsa e non riflette alcun accesso dai criteri ereditati. Se non disponi dell'autorizzazione per visualizzare il criterio di autorizzazione di una risorsa, la risorsa non è inclusa nell'elenco.

Per visualizzare le associazioni di ruoli pertinenti nel criterio di autorizzazione di una risorsa e vedere come concedono o meno l'autorizzazione all'entità, fai clic sulla risorsa. Le associazioni di ruoli del criterio di autorizzazione vengono visualizzate nel riquadro Associazioni di ruoli.

Il riquadro Associazioni di ruoli contiene una tabella delle associazioni di ruoli nel criterio di autorizzazione della risorsa selezionata. Per impostazione predefinita, la tabella contiene solo le 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 le associazioni pertinenti.

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

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 rifiuto e lo stato di accesso complessivo.

  • accessTuple: una descrizione della tupla di accesso nella richiesta, incluso qualsiasi contesto della condizione fornito. Questa sezione contiene anche un riepilogo dei tag applicati alla risorsa.
  • allowPolicyExplanation: un riepilogo che indica se i criteri allow pertinenti concedono all'entità principale l'autorizzazione, seguito da un elenco di criteri allow e dalle relative associazioni dei 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 del ruolo include l'autorizzazione.
    • Indica se l'associazione di ruoli include l'entità.
    • Se le condizioni nell'associazione di ruolo, se presenti, sono soddisfatte.

    La risposta stampa il testo JSON completo del criterio di autorizzazione.

  • denyPolicyExplanation: un riepilogo dell'eventuale rifiuto dell'autorizzazione da parte dei criteri di rifiuto pertinenti, seguito da un elenco di risorse con criteri di rifiuto. Per ogni risorsa, la risposta elenca tutte le norme di negazione associate alla risorsa.

    Per ogni criterio di rifiuto, la risposta stampa i metadati del criterio, elenca le regole di rifiuto al suo interno e valuta ogni regola in base ai seguenti criteri:

    • Indica se la regola di rifiuto include l'autorizzazione.
    • Indica se l'autorizzazione è elencata come eccezione nella regola di rifiuto.
    • Indica se la regola di rifiuto include l'entità.
    • Indica se l'entità è elencata come eccezione nella regola di rifiuto.
    • Se le condizioni nella regola di rifiuto, se presenti, sono soddisfatte.
  • overallAccessState: indica se l'entità è in grado di utilizzare l'autorizzazione specificata per accedere alla risorsa specificata in base ai criteri di autorizzazione, di rifiuto e di confine di accesso dell'entità pertinenti.

    I criteri di Principal Access Boundary pertinenti includono tutti i criteri di Principal Access Boundary associati a un insieme di entità che include l'entità.

    I criteri di autorizzazione e di rifiuto pertinenti includono quanto segue:

    • Il criterio di autorizzazione della risorsa
    • Eventuali criteri di rifiuto della risorsa
    • I criteri di autorizzazione del progetto, della cartella e dell'organizzazione di primo livello della risorsa, se presenti
    • I criteri di rifiuto del progetto, della cartella e dell'organizzazione padre della risorsa, se presenti

    I criteri di autorizzazione e di rifiuto di progetti, cartelle e organizzazioni principali sono pertinenti a causa dell'eredita dei criteri. Quando colleghi un criterio di autorizzazione o diniego a un progetto, a una cartella o a 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 rifiuto per un'organizzazione indica che un'entità non può utilizzare un'autorizzazione specifica, l'entità non potrà utilizzare l'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 rifiuto più permissivi o criteri di autorizzazione che concedono all'entità l'autorizzazione.

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

    Affinché un utente possa utilizzare l'autorizzazione per accedere alla risorsa, tutti i tipi di criteri devono consentire l'accesso. Per ulteriori informazioni, consulta la sezione Valutazione delle norme.

  • pabPolicyExplanation: un riepilogo che indica se le policy di Principal Access Boundary pertinenti consentono all'entità di accedere alla risorsa, seguito dalle associazioni e dalle policy di Principal Access Boundary pertinenti.

    I criteri di Principal Access Boundary possono consentire l'accesso, non consentire l'accesso o non essere applicati. I criteri di Principal Access Boundary non vengono applicati nelle seguenti situazioni:

    • IAM non applica l'autorizzazione specificata nella versione di applicazione del criterio di Principal Access Boundary. Di conseguenza, il criterio di Principal Access Boundary non può bloccare l'accesso.
    • A causa di una condizione nell'associazione del criterio, il criterio o l'associazione di confine dell'accesso dell'entità non si applica all'entità.
    • Un criterio di Principal Access Boundary non ha regole.

    Se un criterio di Principal Access Boundary non viene applicato, non può influire sulla possibilità per l'entità di accedere alla risorsa.

    La risposta elenca anche tutte le associazioni di criteri che includono l'entità e i dettagli della policy di confine di accesso dell'entità in ciascuna di queste associazioni di criteri:

    • Per ogni associazione del criterio di confine dell'accesso dell'entità, la risposta stampa se l'associazione del criterio è applicata per l'entità, quindi stampa il testo dell'associazione del criterio. Un'associazione di criteri viene applicata se l'entità impostata nell'associazione include l'entità sottoposta a query e se la condizione nell'associazione di criteri ha il valore true per l'entità sottoposta a query. Se l'associazione del criterio non viene applicata, il criterio non può influire sul fatto che l'entità possa accedere alla risorsa.
    • Per ogni criterio di Principal Access Boundary, la risposta stampa quanto segue:

      • Indica se il criterio consente l'accesso, non consente l'accesso o non viene applicato.
      • La versione di applicazione del criterio. Questo numero di versione determina se IAM applica questo criterio di limite di accesso all'entità per l'autorizzazione interrogata. Se l'autorizzazione non viene applicata, il criterio non può influire sul fatto che l'entità possa accedere alla risorsa.
      • Le regole nel criterio di Principal Access Boundary e se ciascuna regola consente l'accesso. Per ogni regola, la risposta indica se la risorsa interrogata è inclusa nella regola.

        Una risorsa è inclusa in una regola se una delle seguenti condizioni è vera:

        • La risorsa è elencata nella regola. Solo le risorse Resource Manager (progetti, cartelle e organizzazioni) possono essere elencate direttamente nelle regole del confine di accesso dei principali.
        • Uno degli antenati della risorsa (ovvero un progetto, una cartella o un'organizzazione sopra la risorsa nella gerarchia delle risorse) è elencato nella regola.

Molti oggetti nella risposta hanno anche un campo relevance. Il valore in questo campo indica l'incidenza dell'oggetto sullo stato di accesso complessivo. Il campo relevance può avere i seguenti valori:

  • HEURISTIC_RELEVANCE_HIGH: indica che l'oggetto ha un forte impatto sul risultato. In altre parole, la rimozione dell'oggetto potrebbe cambiare lo stato di accesso complessivo. 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 rifiuto che non contiene l'autorizzazione o il principale 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 della policy di autorizzazione e i risultati della valutazione della policy di rifiuto.

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

    I criteri di Principal Access Boundary pertinenti includono tutti i criteri di Principal Access Boundary associati a un insieme di entità che include l'entità.

    I criteri di autorizzazione e di rifiuto pertinenti includono quanto segue:

    • Il criterio di autorizzazione della risorsa
    • Eventuali criteri di rifiuto della risorsa
    • I criteri di autorizzazione del progetto, della cartella e dell'organizzazione di primo livello della risorsa, se presenti
    • I criteri di rifiuto del progetto, della cartella e dell'organizzazione padre della risorsa, se presenti

    I criteri di autorizzazione e diniego di progetti, cartelle e organizzazioni principali sono pertinenti a causa dell'eredita dei criteri. Quando colleghi un criterio di autorizzazione o diniego a un progetto, a una cartella o a 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 rifiuto per un'organizzazione indica che un'entità non può utilizzare un'autorizzazione specifica, l'entità non potrà utilizzare l'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 rifiuto più permissivi o criteri di autorizzazione che concedono all'entità l'autorizzazione.

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

    Affinché un utente possa utilizzare l'autorizzazione per accedere alla risorsa, tutti i tipi di criteri devono consentire l'accesso. Per ulteriori informazioni, consulta la sezione Valutazione delle norme.

  • accessTuple: una descrizione della tupla di accesso nella richiesta, incluso qualsiasi contesto della condizione fornito. Questa sezione contiene anche un riepilogo dei tag applicati alla risorsa.
  • allowPolicyExplanation: un riepilogo che indica se i criteri allow pertinenti concedono all'entità principale l'autorizzazione, seguito da un elenco di criteri allow e dalle relative associazioni dei 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 del ruolo include l'autorizzazione.
    • Indica se l'associazione di ruoli include l'entità.
    • Se le condizioni nell'associazione di ruolo, se presenti, sono soddisfatte.

    La risposta stampa il testo JSON completo del criterio di autorizzazione.

  • denyPolicyExplanation: un riepilogo dell'eventuale rifiuto dell'autorizzazione da parte dei criteri di rifiuto pertinenti, seguito da un elenco di risorse con criteri di rifiuto. Per ogni risorsa, la risposta elenca tutte le norme di negazione associate alla risorsa.

    Per ogni criterio di rifiuto, la risposta stampa i metadati del criterio, elenca le regole di rifiuto al suo interno e valuta ogni regola in base ai seguenti criteri:

    • Indica se la regola di rifiuto include l'autorizzazione.
    • Indica se l'autorizzazione è elencata come eccezione nella regola di rifiuto.
    • Indica se la regola di rifiuto include l'entità.
    • Indica se l'entità è elencata come eccezione nella regola di rifiuto.
    • Se le condizioni nella regola di rifiuto, se presenti, sono soddisfatte.
  • pabPolicyExplanation: un riepilogo che indica se le policy di Principal Access Boundary pertinenti consentono all'entità di accedere alla risorsa, seguito dalle associazioni e dalle policy di Principal Access Boundary pertinenti.

    I criteri di Principal Access Boundary possono consentire l'accesso, non consentire l'accesso o non essere applicati. I criteri di Principal Access Boundary non vengono applicati nelle seguenti situazioni:

    • IAM non applica l'autorizzazione specificata nella versione di applicazione del criterio di Principal Access Boundary. Di conseguenza, il criterio di Principal Access Boundary non può bloccare l'accesso.
    • A causa di una condizione nell'associazione dei criteri, il criterio o l'associazione di confine dell'accesso dell'entità non si applica all'entità.
    • Un criterio di Principal Access Boundary non ha regole.

    Se un criterio di Principal Access Boundary non viene applicato, non può influire sulla possibilità per l'entità di accedere alla risorsa.

    La risposta elenca anche tutte le associazioni di criteri che includono l'entità e i dettagli della policy di confine di accesso dell'entità in ciascuna di queste associazioni di criteri:

    • Per ogni associazione del criterio di confine dell'accesso dell'entità, la risposta stampa se l'associazione del criterio è applicata per l'entità, quindi stampa il testo dell'associazione del criterio. Un'associazione di criteri viene applicata se l'entità impostata nell'associazione include l'entità sottoposta a query e se la condizione nell'associazione di criteri ha il valore true per l'entità sottoposta a query. Se l'associazione del criterio non viene applicata, il criterio non può influire sul fatto che l'entità possa accedere alla risorsa.
    • Per ogni criterio di Principal Access Boundary, la risposta stampa quanto segue:

      • Indica se il criterio consente l'accesso, non consente l'accesso o non viene applicato.
      • La versione di applicazione del criterio. Questo numero di versione determina se IAM applica questo criterio di limite di accesso all'entità per l'autorizzazione interrogata. Se l'autorizzazione non viene applicata, il criterio non può influire sul fatto che l'entità possa accedere alla risorsa.
      • Le regole nel criterio di Principal Access Boundary e se ciascuna regola consente l'accesso. Per ogni regola, la risposta indica se la risorsa interrogata è inclusa nella regola.

        Una risorsa è inclusa in una regola se una delle seguenti condizioni è vera:

        • La risorsa è elencata nella regola. Solo le risorse Resource Manager (progetti, cartelle e organizzazioni) possono essere elencate direttamente nelle regole del confine di accesso dei principali.
        • Uno degli antenati della risorsa (ovvero un progetto, una cartella o un'organizzazione sopra la risorsa nella gerarchia delle risorse) è elencato nella regola.

Molti oggetti nella risposta hanno anche un campo relevance. Il valore in questo campo indica l'incidenza dell'oggetto sullo stato di accesso complessivo. Il campo relevance può avere i seguenti valori:

  • HEURISTIC_RELEVANCE_HIGH: indica che l'oggetto ha un forte impatto sul risultato. In altre parole, la rimozione dell'oggetto potrebbe cambiare lo stato di accesso complessivo. 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 rifiuto che non contiene l'autorizzazione o il principale avrà questo valore di pertinenza.

Risolvere i problemi relativi alle associazioni di ruoli condizionali

Lo strumento per la risoluzione dei problemi relativi ai criteri risolve automaticamente i problemi relativi alle associazioni di ruoli condizionali e alle regole di rifiuto in base ai tag. Inoltre, consente di risolvere automaticamente i problemi relativi alle associazioni delle policy di confine dell'accesso dell'entità con condizioni basate su principali.

Per risolvere i problemi relativi ad altri tipi di associazioni di ruoli condizionali o regole di negazione condizionali, lo strumento per la risoluzione dei problemi relativi alle norme richiede un contesto aggiuntivo sulla richiesta. Ad esempio, per risolvere i problemi relativi alle condizioni basate su 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, fornisci questo contesto aggiuntivo manualmente.

Nella console Google Cloud, puoi fornire questo contesto aggiuntivo risolvendo i problemi direttamente da qualsiasi audit log Attività di amministrazione o audit log Accesso ai dati. Ogni voce di log di controllo corrisponde a una richiesta a un'API Google Cloud o a un'azione intrapresa da Google Cloud per tuo conto. Quando esegui la risoluzione dei problemi da un log di controllo, lo strumento per la risoluzione dei problemi relativi ai criteri ottiene automaticamente informazioni aggiuntive sulla richiesta, ad esempio la data e l'ora, che consentono allo strumento di analizzare le associazioni di ruoli condizionali e le regole di rifiuto.

Console

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

  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 sul menu a discesa Esegui l'upgrade e seleziona Esegui l'upgrade al nuovo Esplora log.

  3. Per visualizzare solo i log di controllo delle attività di amministrazione e dell'accesso ai dati, inserisci la seguente query nel generatore di query e poi 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 stai elencando i log di controllo. Utilizza projects, folders o organizations.
    • RESOURCE_ID: l'ID della risorsa.
  4. Individua la voce di log di controllo corrispondente alla richiesta per la quale vuoi risolvere il problema. Per scoprire come utilizzare Esplora log per trovare voci di log specifiche, consulta Utilizzo di Esplora log.

  5. Nella colonna Riepilogo della voce di log, fai clic su IAM e poi su Risolvi il problema 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 condizione. Per visualizzare i dettagli del contesto, fai clic su Visualizza il contesto della condizione. Per saperne di più sulla pagina dei risultati dello strumento per la risoluzione dei problemi relativi ai criteri, consulta Informazioni sui risultati dello strumento per la risoluzione dei problemi in questa pagina.

  6. (Facoltativo) Per risolvere i problemi di un'altra richiesta che coinvolge associazioni di ruoli condizionali e regole di rifiuto, 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 rifiuto, utilizza il gcloud policy-troubleshoot iam comando.

Prima di utilizzare i dati dei comandi riportati di seguito, 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 di cui vuoi risolvere i problemi.
  • DESTINATION_IP: facoltativo. L'indirizzo IP di destinazione della richiesta da utilizzare per verificare le associazioni di ruoli condizionali. Ad esempio, 198.1.1.1.
  • DESTINATION_PORT: facoltativo. La porta di destinazione della richiesta da utilizzare per verificare le associazioni di ruoli condizionali. Ad esempio, "8080".
  • REQUEST_TIME: facoltativo. Il timestamp della richiesta da utilizzare durante la verifica 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 per verificare le associazioni di ruoli condizionali. Per un elenco dei formati dei nomi delle risorse accettati, consulta Formato del nome della risorsa.
  • RESOURCE_SERVICE: facoltativo. Il valore del servizio di risorse da utilizzare per verificare le associazioni di ruoli condizionali. Per un elenco dei nomi di servizio accettati, consulta Valori dei servizi di risorsa.
  • RESOURCE_TYPE: facoltativo. Per un elenco dei tipi di risorse accettati, consulta Valori del tipo di risorsa.

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 del principale. Per ogni regola di associazione e di rifiuto dei ruoli con una condizione, la risposta include un campo conditionExplanation che descrive se la condizione è valutata come true o false in base al contesto della condizione che hai fornito.

Ad esempio, di seguito è riportata la valutazione di un'associazione di ruolo con una condizione che specifica il tipo di risorsa e il servizio della risorsa:

Risposta

...
{
  "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 ai binding dei ruoli condizionali e alle regole di rifiuto, utilizza il metodo iam.troubleshoot dell'API Policy Troubleshooter.

Prima di utilizzare i dati della richiesta, 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 di cui vuoi risolvere i problemi.
  • DESTINATION_IP: facoltativo. L'indirizzo IP di destinazione della richiesta da utilizzare per verificare le associazioni di ruoli condizionali. Ad esempio, 198.1.1.1.
  • DESTINATION_PORT: facoltativo. La porta di destinazione della richiesta da utilizzare per verificare le associazioni di ruoli condizionali. Ad esempio, "8080".
  • REQUEST_TIME: facoltativo. Il timestamp della richiesta da utilizzare durante la verifica 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 per verificare le associazioni di ruoli condizionali. Per un elenco dei formati dei nomi delle risorse accettati, consulta Formato del nome della risorsa.
  • RESOURCE_SERVICE: facoltativo. Il valore del servizio di risorse da utilizzare per verificare le associazioni di ruoli condizionali. Per un elenco dei nomi di servizio accettati, consulta Valori dei servizi di risorsa.
  • RESOURCE_TYPE: facoltativo. Per un elenco dei tipi di risorse accettati, consulta Valori del tipo di risorsa.

Metodo HTTP e URL:

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

Corpo JSON della 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 del principale. Per ogni regola di associazione e di rifiuto dei ruoli con una condizione, la risposta include un campo conditionExplanation che descrive se la condizione è valutata come true o false in base al contesto della condizione che hai fornito.

Ad esempio, di seguito è riportata la valutazione di un'associazione di ruolo con una condizione che specifica il tipo di risorsa e il servizio della risorsa:

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