Resolver problemas com permissões do IAM

O solucionador de problemas de políticas ajuda a entender se uma conta principal pode acessar um recurso. Com um principal, um recurso e uma permissão, o Solucionador de problemas de políticas examina as políticas de permissão, negação e políticas de limite de acesso de principal (PAB) que afetam o acesso do principal. Em seguida, ele informa se, com base nessas políticas, o principal pode usar a permissão especificada para acessar o recurso. Ele também lista as políticas relevantes e explica como elas afetam o acesso do principal.

Acesse o solucionador de problemas de políticas usando o console doGoogle Cloud , a Google Cloud CLI ou a API REST. Para consultas básicas, o uso do console do Google Cloud geralmente é mais rápido. Em cenários mais complexos, use a CLI gcloud ou a API REST.

Antes de começar

  • Ative a API Solucionador de problemas de políticas.

    Funções necessárias para ativar APIs

    Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

    Ativar a API

Permissões necessárias

Para resolver problemas de acesso total dos seus principais, você precisa das seguintes permissões.

Permissões para solucionar problemas de acesso de principais individuais

O solucionador de problemas de políticas analisa o acesso de um principal a um recurso com base nas políticas de permissão, negação e limite de acesso de principal, além dos papéis que você tem permissão para visualizar. Se você não tiver permissão para ver uma política que se aplica a um recurso ou se não tiver permissão para visualizar uma função personalizada, talvez não consiga dizer se uma conta principal tem acesso.

Permissões para resolver problemas de políticas de permissão e negação

Para resolver problemas com políticas de permissão e negação, você precisa de permissões na organização que contém o recurso que você quer solucionar. Essas permissões permitem visualizar as políticas de permissão e negação que controlam o acesso ao recurso.

Para receber as permissões necessárias para solucionar problemas de acesso de um principal, peça ao administrador que conceda a você os seguintes papéis do IAM na organização que contém o recurso para o qual você quer solucionar problemas de acesso:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Se você não tiver permissão para consultar as políticas de permissão e negação de um recurso, os resultados de acesso para essas políticas serão Unknown.

Permissões para solucionar problemas de políticas de limite de acesso de principal

Para resolver problemas com políticas de limite de acesso de principal, você precisa de permissões na organização cujo conjunto de principais inclui o principal. A maneira de identificar essa organização depende do tipo de principal:

  • Contas do Google e Grupos do Google: a organização associada ao domínio do Google Workspace que inclui o principal
  • Identidades federadas (identidades em pools de identidade de colaboradores ou de identidade da carga de trabalho): a organização que contém o pool de identidades que inclui o principal
  • Contas de serviço: a organização que contém o projeto em que a conta de serviço foi criada
  • Identidades do agente: a organização que contém o projeto em que o agente foi criado

Com essas permissões, é possível visualizar as políticas de limite de acesso de principal que controlam o que o principal pode acessar.

Para receber as permissões necessárias para solucionar problemas de acesso de um principal, peça ao administrador que conceda a você os seguintes papéis do IAM na organização adequada:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Se você não tiver permissão para visualizar as políticas de limite de acesso de principal que se aplicam a um principal, os resultados de acesso para essas políticas serão Unknown.

Permissões para solucionar problemas de acesso de membros do grupo

Se as políticas de permissão e bloqueio incluírem grupos, você vai precisar da permissão groups.read da API Admin do Google Workspace para solucionar problemas de acesso de membros individuais do grupo. Os superadministradores e administradores de grupos têm essa permissão automaticamente. Para conceder essa permissão a um usuário que não seja um superadministrador ou administrador do grupo, crie um papel de administrador do Google Workspace Workspace que contenha o privilégio groups.read (localizado em Privilégios da API Admin) e conceda ao usuário.

Se você não tiver essas permissões, as vinculações de papéis e as regras de negação que contêm grupos ou domínios terão um resultado de acesso Desconhecido, a menos que a vinculação de papel ou a regra de negação também inclua explicitamente o principal.

Permissões para solucionar problemas de acesso de membros do domínio

Se as políticas de permissão e negação incluírem uma conta do Google Workspace ou um domínio do Cloud Identity, você precisará ser administrador do domínio para solucionar problemas de acesso de membros individuais.

Se você não tiver essas permissões, as vinculações de papéis e as regras de negação que contêm grupos ou domínios terão um resultado de acesso Desconhecido, a menos que a vinculação de papel ou a regra de negação também inclua explicitamente o principal.

Resolver problemas no acesso

Para resolver problemas de acesso, você precisa do principal, do recurso e da permissão que quer verificar. Essas informações podem ser fornecidas por um ID de erro:

  • ID do erro:um identificador exclusivo de uma mensagem de erro de permissão. O ID do erro fornece contexto para o erro, incluindo o principal, o recurso, a permissão e as condições do IAM compatíveis. Um ID de erro relacionado a uma identidade do agente fornece contexto para a identidade do agente e suas declarações, como plataforma e contêiner.

    As condições do IAM compatíveis incluem principal.type e principal.subject.

Se você não tiver um ID de erro, resolva problemas de acesso com as seguintes informações:

  • Principal:a identidade a ser verificada. Você pode inserir uma das seguintes opções:

    • Um endereço de e-mail:precisa se referir a um usuário, uma única conta de serviço ou um conjunto de principais da conta de serviço.

    • Um identificador de identidade do agente:precisa seguir este formato: TRUST_DOMAIN/resources/SERVICE/RESOURCE_PATH.

      Exemplo: agents.global.org-123456789012.system.id.goog/resources/aiplatform/projects/9876543210/locations/us-central1/reasoningEngines/my-test-agent

      O Solucionador de problemas de políticas extrai os atributos da plataforma e do contêiner de recursos da string de assunto do agente usando o padrão resources/{platform}/projects/{project_number}/.... Se um agente usar um formato de assunto não padrão, o Solucionador de problemas de políticas não poderá derivar os atributos dele, e as vinculações de conjunto de principais baseadas em atributos serão avaliadas como Unknown.

      Se um agente não tiver vinculações de permissão de concessão, o solucionador de problemas de políticas vai retornar um estado de acesso UNKNOWN_INFO em vez de NOT_GRANTED.

      Os identificadores usam o seguinte:

      • TRUST_DOMAIN: o domínio de confiança da sua organização (por exemplo, agents.global.org-123456789012.system.id.goog)

      • SERVICE: o nome abreviado do serviço Google Cloud(por exemplo, aiplatform ou discoveryengine)

      • RESOURCE_PATH: o caminho completo para o recurso que hospeda o agente.

    Outros tipos de principais, incluindo grupos, domínios, identidades de força de trabalho e identidades de carga de trabalho, não são compatíveis.

  • Recurso:o nome completo do recurso em que você quer resolver problemas de acesso. Por exemplo, para resolver problemas de acesso ao projeto my-project, digite //cloudresourcemanager.googleapis.com/projects/my-project. Para outros tipos de recursos, consulte os exemplos de nomes completos de recursos.

  • Permissão: a permissão para verificar. Se você usar o consoleGoogle Cloud , ele vai apresentar uma lista de sugestões enquanto você digita.

    Para resolver um problema com uma permissão, ela precisa ser aplicável ao recurso na solicitação. Em outras palavras, é preciso ser possível usar essa permissão para acessar o recurso de alguma forma. Se a permissão não for aplicável ao recurso, a solicitação vai falhar. Por exemplo, se você tentar resolver problemas com a permissão compute.instances.get para um cluster do Google Kubernetes Engine, a solicitação vai falhar porque a permissão compute.instance.get não pode ser usada para acessar clusters do Google Kubernetes Engine.

    Para uma lista completa de permissões, consulte a referência de permissões.

Console

Para resolver problemas de acesso, faça o seguinte:

  1. No console do Google Cloud , acesse a página Solucionador de problemas de políticas.

    Acesse o solucionador de problemas de políticas

  2. Se você tiver um ID de erro, selecione ID do erro e insira-o.

  3. Se você não tiver um ID de erro, selecione Manual.

    1. Digite o endereço de e-mail do principal ou o identificador da identidade do agente cujo acesso você quer verificar.

    2. Insira o nome completo do recurso a ser verificado.

      Se você não souber o nome completo do recurso, faça o seguinte:

      • Se você estiver resolvendo problemas de acesso a um projeto, uma pasta ou uma organização, comece a digitar para ver as opções de preenchimento automático.
      • Se você estiver resolvendo problemas de acesso para outro tipo de recurso, clique em Procurar para abrir a caixa de diálogo de pesquisa de recursos e procure o recurso:

        1. Na caixa Selecionar escopo, escolha um projeto, uma pasta ou uma organização para pesquisar.
        2. Na caixa Tipo de recurso, selecione os tipos de recursos que você quer pesquisar.
        3. Na caixa Pesquisar recursos, insira uma parte do nome do recurso.
        4. Na seção de resultados, selecione o recurso que você quer verificar.
        5. Clique em Selecionar para escolher o recurso e fechar a caixa de diálogo.
    3. Insira a permissão a ser verificada.

      Se você não souber o nome completo da permissão, comece a digitar para ver as opções de preenchimento automático.

    4. Opcional: para verificar vários recursos e permissões, selecione Adicionar outro par e repita a etapa anterior.

  4. Clique em Verificar acesso.

gcloud

Para descobrir por que um principal tem ou não uma permissão do IAM, use o comando gcloud beta policy-troubleshoot iam.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • VERSION: opcional. A versão do comando a ser usada. Para resolver problemas de acesso com base apenas em políticas de permissão e negação, não especifique uma versão. Para resolver problemas de acesso com base em políticas de permissão, negação e limite de acesso do principal, use a versão beta.
  • EMAIL: o endereço de e-mail do participante com permissões que você quer resolver. Para uma identidade do agente, forneça o identificador principal.
  • RESOURCE: o recurso em que a permissão é concedida.
  • PERMISSION: a permissão que você quer resolver.

Execute o comando gcloud beta policy-troubleshoot iam:

Linux, macOS ou 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

Você receberá uma resposta semelhante a esta:

Resposta

{
  "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."
  },
  "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.": {
                "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.": {
                "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.": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "serviceAccount:service-account-4@project-1.": {
                "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.": {
                "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."
              ],
              "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."
              ],
              "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.",
                "serviceAccount:service-account-4@project-1."
              ],
              "role": "roles/resourcemanager.projectIamAdmin"
            },
            {
              "members": [
                "serviceAccount:service-account-4@project-1."
              ],
              "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."
                    ]
                  }
                }
              ],
              "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.": {
                    "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.' || principal.subject=='service-account-2@project-1.')"
            },
            "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

Para descobrir por que um principal tem ou não uma permissão do IAM, use o método iam.troubleshoot da API Solucionador de problemas de políticas.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • VERSION: a versão da API a ser usada para esta solicitação. Para resolver problemas de acesso com base apenas em políticas de permissão e negação, use v3. Para resolver problemas de acesso com base em políticas de permissão, negação e limite de acesso de principal, use v3beta.
  • EMAIL: o endereço de e-mail do participante com permissões que você quer resolver. Para uma identidade do agente, forneça o identificador principal.
  • RESOURCE: o recurso em que a permissão é concedida.
  • PERMISSION: a permissão que você quer resolver.
  • PROJECT_ID: o ID do projeto que você quer usar para fazer a solicitação. Os IDs do projeto são strings alfanuméricas, como my-project.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Entender os resultados do solucionador de problemas

Console

A página de resultados contém as seguintes informações:

Detalhes da avaliação

A seção Detalhes da avaliação contém um resumo do acesso que você está solucionando, incluindo o principal, o recurso e a permissão especificados. Se você estiver solucionando problemas de vários pares de permissões de recursos, use a lista Avaliação de acesso para alternar entre eles.

Detalhes da política

A seção Detalhes da política contém informações sobre como as políticas de permissão, negação e limite de acesso de principal relevantes afetam o acesso do principal.

As políticas de limite de acesso de principal relevantes incluem todas as políticas de limite de acesso de principal vinculadas a um conjunto de principais que inclui o principal.

As políticas de permissão e negação relevantes incluem o seguinte:

  • A política de permissão do recurso
  • As políticas de negação do recurso, se houver
  • As políticas de permissão do projeto pai, pasta e organização do recurso, se houver
  • As políticas de negação do projeto pai, da pasta e da organização do recurso, se houver

As políticas de permissão e negação de projetos, pastas e organizações pai são relevantes devido à herança de política. Quando você anexa uma política de permissão ou negação a um projeto, pasta ou organização, essa política também se aplica a todos os recursos dentro do projeto, da pasta ou da organização.

Por exemplo, se uma política de negação para uma organização disser que um principal não pode usar uma permissão específica, o principal não poderá usar essa permissão para nenhum recurso dentro da organização. Essa regra se aplica mesmo que as pastas e os projetos nessa organização tenham políticas de negação mais permissivas ou permitam políticas que dão ao principal a permissão.

Da mesma forma, se uma política de permissão para um projeto conceder a um principal uma permissão específica, o principal terá essa permissão para qualquer recurso no projeto, desde que essa permissão não seja negada.

A seção Detalhes da política contém as seguintes seções:

Estado de acesso

A seção Estado de acesso resume os resultados de cada tipo de política (políticas de limite de acesso de principal, de negação e de permissão) e informa o resultado geral. O resultado indica se o principal pode usar a permissão para acessar o recurso, de acordo com as políticas relevantes.

Para que um usuário possa usar a permissão de acesso ao recurso, todos os tipos de política precisam permitir o acesso. Para mais informações, consulte a Avaliação de políticas.

Política de limite de acesso principal

Na seção Política de limite de acesso de principal, é possível conferir todas as políticas de limite de acesso de principal a que o principal está sujeito e as vinculações de políticas que vinculam essas políticas ao principal.

O painel Políticas lista todas as políticas vinculadas a um conjunto de principais que inclui o principal. Ao lado de cada política, há um ícone que indica como ela afeta o acesso do principal.

As políticas de limite de acesso principal podem afetar o acesso de um principal das seguintes maneiras:

  • O principal pode acessar o recurso: a política de limite de acesso de principal se aplica ao principal, e uma das regras dele contém o recurso consultado.
  • A principal não pode acessar o recurso: a política de limite de acesso de principal se aplica à principal, mas o recurso consultado não está nas regras dessa política.
  • Não aplicada: as políticas de limite de acesso de principal não são aplicadas nas seguintes situações:

    • O IAM não aplica a permissão especificada na versão de aplicação da política de limite de acesso de principal. Como resultado, a política de limite de acesso de principal não pode bloquear o acesso.
    • Devido a uma condição na vinculação de política, a política ou vinculação de limite de acesso principal não se aplica ao principal.
    • Uma política de limite de acesso principal não tem regras.

    Se uma política de limite de acesso de principal não for aplicada, ela não poderá afetar se o principal pode acessar o recurso.

Para conferir as regras e vinculações associadas a uma política de limite de acesso principal, clique no nome da política. O painel ao lado do Políticas mostra os detalhes da política.

Para conferir as regras na política, clique na guia Regras de limite. Essa guia mostra uma tabela com as regras relevantes da política de limite de acesso de principal.

Uma regra de limite de acesso de principal é relevante se afetar o resultado geral da consulta do solucionador de problemas de políticas. Como resultado, as regras relevantes variam de acordo com os resultados do solucionador de problemas de políticas. Por exemplo, considere as seguintes situações:

  • O solucionador de problemas de políticas indica que o principal pode acessar o recurso. Como resultado, as regras relevantes são aquelas que tornam o principal qualificado para acessar o recurso.
  • O solucionador de problemas de políticas indica que o principal não pode acessar o recurso. No entanto, de acordo com as políticas de limite de acesso de principal relevantes, o principal está qualificado para acessar o recurso. Como resultado, nenhuma regra é relevante, porque as políticas de limite de acesso de principal não são o motivo pelo qual o principal não pode acessar o recurso.
  • O solucionador de problemas de políticas indica que o principal não pode acessar o recurso. Além disso, de acordo com as políticas relevantes de limite de acesso de principal, a principal não pode acessar o recurso. Como resultado, as regras relevantes são aquelas que não tornam a principal qualificada para acessar o recurso.

Para ver todas as regras de limite de acesso de principal em uma política, desmarque a caixa de seleção Mostrar apenas regras e vinculações relevantes.

A coluna Descobertas na tabela de regras de limite indica se a regra de limite de acesso de principal contém o recurso consultado. Para conferir mais detalhes sobre a regra, clique em Ver detalhes da regra.

Para conferir as vinculações da política, clique na guia Vinculações. Essa guia mostra uma tabela das vinculações de políticas relevantes para a política de limite de acesso de principal selecionada.

Uma vinculação de política é relevante se ela aplicar efetivamente a política de limite de acesso de principal ao principal consultado. Para que uma vinculação de política aplique uma política de limite de acesso de principal a um principal, as seguintes condições precisam ser verdadeiras:

  • O conjunto de principais na vinculação de políticas precisa incluir o principal consultado
  • Todas as condições na vinculação de política precisam ser avaliadas como true para o principal consultado.

Para ver todas as vinculações de políticas com conjuntos de principais que incluem o principal consultado, independente de ele atender à condição na vinculação, desmarque a caixa de seleção Mostrar apenas regras e vinculações relevantes.

Para Identidades do agente, o solucionador de problemas de políticas avalia as políticas de limite de acesso do principal associadas à hierarquia de recursos do projeto ou contêiner de hospedagem do agente e as condições que correspondem ao tipo de identidade (principal.type == 'iam.googleapis.com/AgentPoolIdentity') e ao padrão de assunto (principal.subject.startsWith(...)) do agente.

A coluna Descobertas na tabela de vinculações indica se a vinculação é aplicada ao principal consultado. Para mais detalhes sobre a vinculação de política, clique em Ver detalhes da vinculação.

Política de negação

Na seção Política de negação, é possível conferir todas as políticas de negação relevantes, identificar regras que negam o acesso ao principal e entender por que uma regra de negação nega ou não a permissão ao principal.

O painel Recursos com políticas de negação lista todas as políticas de negação relevantes, organizadas pelos recursos a que estão anexadas. Ao lado de cada política de negação, há uma avaliação de acesso. Essa avaliação se aplica apenas à política de negação. Ela não reflete nenhum acesso de políticas herdadas. Se você não tiver permissão para consultar a política de negação de um recurso, a lista de recursos não vai incluir esse recurso nem as políticas de negação dele.

Para conferir as regras de negação relevantes nessas políticas, clique em uma delas. Para ver todas as regras de negação nas políticas de negação de um recurso, clique em um recurso. As regras de negação aparecem no painel Regras de negação. Esse painel contém uma tabela de todas as regras de negação com o principal ou a permissão consultada para o recurso ou a política de negação selecionada.

A coluna Acesso indica se a regra de negação nega a permissão ao principal. Para ver mais detalhes sobre a regra de negação, clique em Ver regra de negação na linha dessa regra.

Política de permissão

Na seção Política de permissão, navegue por todas as políticas de permissão relevantes, identifique as vinculações de papéis que concedem acesso ao principal e entenda por que uma vinculação de papel concede ou não a permissão ao principal.

O painel Recursos lista o recurso especificado e os ancestrais dele. Ao lado de cada recurso, há uma avaliação de acesso. Essa avaliação se aplica apenas à política de permissão desse recurso e não reflete nenhum acesso de políticas herdadas. Se você não tiver permissão para ver a política de permissão de um recurso, ele não vai aparecer na lista.

Para ver as vinculações de papéis relevantes na política de permissão de um recurso e saber como elas concedem ou não a permissão ao principal, clique no recurso. As vinculações de papéis da política de permissão aparecem no painel Vinculações de papéis.

O painel Vinculações de papéis contém uma tabela de vinculações de papéis na política de permissão do recurso selecionado. Por padrão, a tabela contém apenas vinculações de papéis que incluem um papel com a permissão especificada. Se o principal não tiver acesso, a tabela também vai mostrar vinculações de papéis com papéis personalizados editáveis. Para ver todas as vinculações de função, desmarque a caixa de seleção Mostrar somente vinculações relevantes.

A coluna Acesso indica se a vinculação de papel concede a permissão ao principal. Para conferir mais detalhes sobre a vinculação de função, clique em Ver detalhes da vinculação na linha dela.

Ao avaliar as políticas de permissão para identidades de agente, o Solucionador de problemas de políticas verifica se o agente corresponde a algum dos seguintes identificadores principais:

Identificador do principal Exemplo
Identidades de agente direto principal://TRUST_DOMAIN/resources/SERVICE/RESOURCE_PATH
Conjuntos de principais de domínio de confiança principalSet://TRUST_DOMAIN/*
Conjuntos de principais da plataforma principalSet://TRUST_DOMAIN/attribute.platform/SERVICE
Conjuntos principais de contêineres de recursos principalSet://TRUST_DOMAIN/attribute.container/projects/PROJECT_NUMBER
Conjuntos principais de contêineres da plataforma principalSet://TRUST_DOMAIN/attribute.platformContainer/SERVICE/projects/PROJECT_NUMBER

Ao resolver problemas de acesso para um principal que não é um agente, como um usuário ou uma conta de serviço, todas as vinculações de função para identidades de agente são avaliadas como Not matched.

gcloud

A resposta contém quatro seções principais: uma descrição da tupla de acesso na solicitação, os resultados da avaliação da política de permissão, os resultados da avaliação da política de negação e o estado geral de acesso.

  • accessTuple: uma descrição da tupla de acesso na solicitação, incluindo qualquer contexto de condição fornecido. Esta seção também contém um resumo das tags que se aplicam ao recurso.
  • allowPolicyExplanation: um resumo de se as políticas de permissão relevantes concedem a permissão ao principal, seguido de uma lista de políticas de permissão e suas vinculações de papéis.

    Para cada política de permissão, a resposta lista todas as vinculações de função na política e as avalia com base nos seguintes critérios:

    • Se a vinculação de função inclui a permissão.
    • Se a vinculação de função inclui o principal.
    • Se as condições na vinculação de função, se houver, foram atendidas.

    Em seguida, a resposta mostra o texto JSON completo da política de permissão.

  • denyPolicyExplanation: um resumo de se as políticas de negação relevantes negam a permissão ao principal, seguido de uma lista de recursos com políticas de negação. Para cada recurso, a resposta lista todas as políticas de negação anexadas a ele.

    Para cada política de negação, a resposta imprime os metadados da política, lista as regras de negação na política e avalia cada regra com base nos seguintes critérios:

    • Se a regra de negação inclui a permissão.
    • Se a permissão está listada como uma exceção na regra de negação.
    • Se a regra de negação inclui o principal.
    • Se o principal está listado como uma exceção na regra de negação.
    • Se as condições na regra de negação, se houver, forem atendidas.
  • overallAccessState: se o principal pode usar a permissão especificada para acessar o recurso especificado com base nas políticas de permissão, negação e limite de acesso de principal relevantes.

    As políticas de limite de acesso de principal relevantes incluem todas as políticas de limite de acesso de principal vinculadas a um conjunto de principais que inclui o principal.

    As políticas de permissão e negação relevantes incluem o seguinte: