Solução de problemas de acesso

O solucionador de problemas de políticas facilita a compreensão do motivo pelo qual um usuário tem acesso a um recurso ou não tem permissão para chamar uma API. Com um e-mail, um recurso e uma permissão, o solucionador de problemas de políticas examinará todas as políticas do Cloud IAM aplicáveis ao recurso. Em seguida, ele revelará se os papéis do membro incluem a permissão nesse recurso e, em caso afirmativo, quais políticas vinculam o membro a esses papéis.

Acesse o solucionador de problemas de políticas usando o Console do Cloud, a ferramenta de linha de comando gcloud ou a API REST. Para consultas simples, usar o Console do Cloud é fácil e inclui um assistente visual. Para cenários mais complexos, considere a ferramenta gcloud ou a API REST.

Solução de problemas de acesso

Para resolver problemas de acesso, você precisará das seguintes informações:

  • Principal: o endereço de e-mail a ser verificado. O endereço de e-mail pode se referir a um usuário, uma conta de serviço ou outro tipo de membro.
  • Recurso: o nome completo do recurso. Por exemplo, para verificar o projeto my-project, insira //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 Console do Cloud, ele apresentará uma lista de sugestões enquanto digita. Para uma lista completa de permissões, consulte a referência de permissões.

Console

Primeiro, abra a página Solucionador de problemas de políticas no Console do Cloud.

Abrir a página "Solucionador de problemas de políticas"

Depois, insira um e-mail, o nome do recurso e a permissão a ser verificada.

Para verificar vários recursos e permissões, selecione Adicionar outro par e repetindo a etapa anterior.

Por último, selecione Verificar chamada de API.

Na parte superior central da página de resultados, você vê rapidamente se o usuário recebeu a permissão no recurso.

Resultados do solucionador de problemas

Por padrão, os resultados são exibidos em visualização compacta, que contém apenas informações diretamente relevantes para resolver problemas de acesso do usuário. Especificamente, se o acesso for concedido, apenas as vinculações que concedem acesso serão mostradas. Se o acesso for negado, apenas os papéis que contêm a permissão desejada (ou papéis personalizados que podem ser alteradas para incluí-la) serão mostrados.

É possível desativar a visualização compacta usando a chave seletora. Isso exibirá todas as vinculações e membros.

O painel à esquerda contém uma lista de políticas que se aplicam ao recurso em questão. Além disso, há um ícone indicando se cada política contém uma vinculação que concede a permissão ao membro. No exemplo abaixo, somente a vinculação Proprietário permite o acesso.

Lista de vinculação do Troubleshooter

O painel à direita exibe o texto bruto de cada vinculação. Todas as linhas que não concedem a permissão são destacadas em vermelho. Perceba que as linhas 39 a 46, em que o usuário tem acesso, não são destacadas.

Lista de vinculação do Troubleshooter

É possível detalhar uma vinculação específica. Basta selecioná-la no painel à esquerda. Se você inseriu vários pares de recursos e permissões, use o menu suspenso Ver por para alternar entre eles.

gcloud

Primeiro, verifique se seu ambiente está configurado para usar o solucionador de problemas de políticas.

Ative a API usando o Console do Cloud ou execute o seguinte comando:

gcloud services enable policytroubleshooter.googleapis.com --project=[PROJECT-ID]
    

Depois, defina o projeto:

gcloud config set project [PROJECT-ID]
    

Depois de concluir a configuração, consulte se um usuário recebeu permissão em um recurso com o seguinte comando:

gcloud policy-troubleshoot iam [RESOURCE] --principal-email [EMAIL] \
        --permission [PERMISSION]
    

O exemplo a seguir verifica se a permissão resourcemanager.projects.getIamPolicy é concedida a foo@example.com no projeto my-project.

gcloud policy-troubleshoot iam //cloudresourcemanager.googleapis.com/projects/my-project \
        --permission resourcemanager.projects.getIamPolicy --principal-email foo@example.com
    

A saída é YAML, indica se o usuário recebeu a permissão e fornece uma explicação do motivo. Ela será mais ou menos assim:

access: GRANTED
    explainedPolicies:
    - access: GRANTED
      bindingExplanations:
      - access: NOT_GRANTED
        memberships:
          serviceAccount:service-123@compute-system.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
        role: roles/compute.serviceAgent
        rolePermission: ROLE_PERMISSION_NOT_INCLUDED
      - access: GRANTED
        memberships:
          serviceAccount:service@my-project.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
          user:foo@example.com: MEMBERSHIP_INCLUDED
        role: roles/owner
        rolePermission: ROLE_PERMISSION_INCLUDED
      fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
      policy:
        bindings:
        - members:
          - serviceAccount:service-123@compute-system.iam.gserviceaccount.com
          role: roles/compute.serviceAgent
        - members:
          - serviceAccount:foo@my-project.iam.gserviceaccount.com
          - user:foo@example.com
          role: roles/owner
        etag: BwWAOWEaIEg=
        version: 1
    - access: UNKNOWN_INFO_DENIED
    policy: {}
    

API REST

É possível testar a API REST usando o APIs Explorer.

Solicitação:

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

Corpo:

{
      "principal": "[EMAIL]",
      "fullResourceName": "[RESOURCE]",
      "permission": "[PERMISSION]"
    }
    

Todos os parâmetros são obrigatórios.

O corpo de exemplo a seguir verifica se a permissão resourcemanager.projects.getIamPolicy é concedida a foo@example.com no projeto my-project.

{
      "principal": "foo@example.com",
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
      "permission": "resourcemanager.projects.getIamPolicy"
    }
    

A saída é JSON, indica se o usuário recebeu a permissão e fornece uma explicação do motivo. Ela será mais ou menos assim:

{
      "access": "GRANTED",
      "explained_policies": [
          {
              "access": "GRANTED",
              "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
              "policy": {
                  "version": 1,
                  "etag": "BwWBUZjK9YQ=",
                  "bindings": [
                      {
                          "role": "roles/owner",
                          "members": [
                              "user:foo@example.com"
                          ]
                      }
                  ]
              },
              "binding_explanations": [
                  {
                      "access": "GRANTED",
                      "relevance: HIGH",
                      "role": "roles/owner",
                      "role_permission": "ROLE_PERMISSION_INCLUDED",
                      "role_permission_relevance": "HIGH",
                      "memberships": {
                          "key":  "user:foo@example.com",
                          "value": {
                              "membership": "MEMBERSHIP_INCLUDED",
                              "relevance":  "HIGH",
                          }
                      }
                  }
              ]
          },
          {
              "access": "UNKNOWN_INFO_DENIED",
              "policy": {}
          }
      ]
    }
    

Solução de problemas de associação a grupo

Só será possível solucionar problemas de acesso a um recurso concedido por um grupo do Google se você tiver permissão para ver os respectivos membros.

Se você não tiver permissão, o grupo será destacado em laranja no Console do Cloud e você verá um aviso informando que não sabe se o principal recebeu acesso. Se você estiver usando gcloud ou a API REST, a resposta conterá UNKNOWN_INFO_DENIED ou ACCESS_TO_INFO_DENIED.

Solução de problemas de associação a grupo

Os superadministradores e administradores de grupo do G Suite costumam ter acesso para visualizar a associação ao grupo. Para permitir que um usuário que não seja superusuário ou administrador de grupo resolva o problema de acesso, crie um papel de administrador personalizado do G Suite que contenha o privilégio groups.read, localizado em Privilégios da API Admin, e conceda-o ao usuário. Isso permite que eles visualizem a associação de todos os grupos do seu domínio e solucionem problemas de acesso com mais eficiência.

Limitações

O solucionador de problemas de políticas nem sempre pode explicar totalmente o acesso a um recurso. Se você não tiver acesso a uma política que se aplica a um recurso, o solucionador de problemas de políticas não o analisará. Por exemplo, se você for proprietário de um projeto, mas não tiver privilégios no nível da organização, o solucionador de problemas de políticas não revelará políticas no nível da organização que possam estar concedendo acesso ao projeto.

Para maximizar a eficácia do solucionador de problemas de políticas, verifique se recebeu o papel Revisor de segurança (roles/iam.securityReviewer). Isso garante que você possa ler todas as políticas aplicáveis do Cloud IAM.