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 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. Esse endereço precisa se referir a uma conta de usuário ou de serviço. Outros tipos de membro não são compatíveis.
  • 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 você digita. Para uma lista completa de permissões, consulte a referência de permissões.

Console

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

Acessar 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ções 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ções 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.

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. O código será semelhante a este:

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

O método iam.troubleshoot informa por que um membro tem ou não uma permissão do IAM.

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

  • email: o endereço de e-mail do membro cujas permissões você quer resolver.
  • resource: o recurso em que a permissão é concedida.
  • permission: a permissão que você quer resolver.

Método HTTP e URL:

POST https://policytroubleshooter.googleapis.com/v1/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:

{
  "access": "GRANTED",
  "explainedPolicies": [
    {
      "access": "GRANTED",
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
      "policy": {
        "version": 1,
        "etag": "BwWBUZjK9YQ=",
        "bindings": [
          {
            "role": "roles/owner",
            "members": [
              "user:foo@example.com"
            ]
          }
        ]
      },
      "bindingExplanations": [
        {
          "access": "GRANTED",
          "role": "roles/owner",
          "rolePermission": "ROLE_PERMISSION_INCLUDED",
          "rolePermissionRelevance": "HIGH",
          "memberships": {
            "key": "user:foo@example.com",
            "value": {
              "membership": "MEMBERSHIP_INCLUDED",
              "relevance": "HIGH",
            }
          },
        "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 Google Workspace geralmente têm acesso para visualizar os membros do grupo. Para permitir que um usuário que não seja administrador resolva problemas de acesso, crie um papel personalizado de administrador do Google Workspace que contenha o privilégio groups.read (localizado em Privilégios da API Admin) e conceda esse papel 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 seja possível ler todas as políticas aplicáveis do IAM.

A seguir

Use a referência de permissões ou a referência de papéis predefinidos para determinar qual papel conceder a um usuário que não tem permissões.