Solução de problemas de acesso

Com o Solucionador de problemas do Cloud IAM, é mais fácil entender por que um usuário tem acesso a um recurso ou não tem permissão para chamar uma API. Basta fornecer um e-mail, recurso e permissão, para o Solucionador de problemas examinar todas as políticas do Cloud IAM aplicadas ao recurso. Depois, ele revela se o membro recebeu permissão nesse recurso e por quais políticas isso aconteceu.

Para acessar o Troubleshooter, use o Console do GCP, a ferramenta de linha de comando gcloud ou a API REST. Nas consultas simples, a utilização do Console do GCP é fácil e inclui auxílio visual. Nos cenários mais complexos, use o gcloud ou a API REST.

Resolver problemas no acesso

CONSOLE

Primeiro, abra a página Solucionador de problemas no Console do GCP.

Abra a página "Solucionador de problemas"

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

  • Primário é o e-mail de membro a ser verificado. Pode ser um usuário ou uma conta de serviço.
  • Recurso é o nome completo do recurso. Por exemplo, para verificar o projeto my-project, insira //cloudresourcemanager.googleapis.com/projects/my-project. Ao digitar, o Console do GCP apresenta uma lista de sugestões.
  • Permissão é a permissão a ser verificada. Conforme você digita, o Console do GCP apresenta uma lista de sugestões. Consulte a Referência de permissões para uma lista completa de permissões.

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 para o 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 Solucionador de problemas

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 Solucionador de problemas

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

COMANDO GCLOUD

Primeiro, verifique se o ambiente está configurado para usar o Troubleshooter.

Ative a API por meio do Console do GCP 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, use o seguinte comando para consultar se um usuário recebeu permissão para um recurso:

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

Recurso é o nome completo do recurso. Por exemplo, para verificar o projeto my-project, insira //cloudresourcemanager.googleapis.com/projects/my-project. E-mail é o e-mail de membro a ser verificado. Pode ser um usuário ou uma conta de serviço. Permissão é a permissão a ser verificada. Consulte a Referência de permissões para ver a lista completa de permissões. Todos os parâmetros são obrigatórios.

No exemplo a seguir, verificamos se foo@google.com recebeu a permissão resourcemanager.projects.getIamPolicy no projeto my-project.

gcloud beta policy-troubleshoot iam //cloudresourcemanager.googleapis.com/projects/my-project \
    --permission resourcemanager.projects.getIamPolicy --principal-email foo@google.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@google.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@google.com
      role: roles/owner
    etag: BwWAOWEaIEg=
    version: 1
- access: UNKNOWN_INFO_DENIED
policy: {}

API REST

Solicitação:

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

Body:

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

Onde:

  • Recurso é o nome completo do recurso. Por exemplo, para verificar o projeto my-project, insira //cloudresourcemanager.googleapis.com/projects/my-project.
  • E-mail é o e-mail de membro a ser verificado. Pode ser um usuário ou uma conta de serviço.
  • Permissão é a permissão a ser verificada. Consulte a Referência de permissões para ver a lista completa de permissões.

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

No exemplo a seguir, verificamos se foo@google.com recebeu a permissão resourcemanager.projects.getIamPolicy no projeto my-project.

{
  "principal": "foo@google.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@google.com"
                      ]
                  }
              ]
          },
          "binding_explanations": [
              {
                  "access": "GRANTED",
                  "relevance: HIGH",
                  "role": "roles/owner",
                  "role_permission": "ROLE_PERMISSION_INCLUDED",
                  "role_permission_relevance": "HIGH",
                  "memberships": {
                      "key":  "user:foo@google.com",
                      "value": {
                          "membership": "MEMBERSHIP_INCLUDED",
                          "relevance":  "HIGH",
                      }
                  }
              }
          ]
      },
      {
          "access": "UNKNOWN_INFO_DENIED",
          "policy": {}
      }
  ]
}

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

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

Se você não tiver permissão, o grupo será destacado em laranja no Console do GCP e você verá um aviso de que não sabe se o acesso primário é concedido. Se você estiver usando o 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 um superadministrador ou administrador de grupo resolva problemas de acesso, crie um papel personalizado de administrador 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 nem sempre consegue explicar totalmente o acesso a um recurso. Se você não tiver acesso a uma política aplicada a um recurso, ela não será analisada pelo Solucionador de problemas. Por exemplo, se você é o proprietário de um projeto, mas não tem privilégios no nível da organização, o Solucionador de problemas não revelará as políticas no mesmo nível que podem conceder o acesso ao projeto.

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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud IAM