Acesse o solucionador de problemas das políticas usando o console do Google Cloud, a Google Cloud CLI ou a API REST. Para consultas simples, o uso do console do Google Cloud costuma ser o mais rápido. Para cenários mais complexos, use a CLI gcloud ou a API REST.
Antes de começar
-
Ative a API Policy Troubleshooter.
Permissões necessárias
Para resolver problemas de acesso dos principais, você precisa das permissões a seguir.
Permissões para resolver 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, de negação e nos 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 não tiver permissão para visualizar um papel personalizado, talvez não seja possível saber se um principal tem acesso.
Para conseguir as permissões necessárias para resolver problemas de acesso de um principal, peça ao administrador para conceder a você os seguintes papéis do IAM na organização:
-
Avaliador de segurança (
roles/iam.securityReviewer
) -
Solução de problemas de políticas de negação:
Avaliador de negação (
roles/iam.denyReviewer
) -
Use a Google Cloud CLI para resolver problemas:
Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer
)
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Permissões para resolver problemas de acesso de participantes do grupo
Se as políticas de permissão e negação incluírem grupos, você vai precisar da permissão groups.read
da API Admin do Google Workspace para resolver problemas de acesso de membros
individuais do grupo. Os superadministradores e os administradores do grupo têm essa permissão automaticamente. Para
conceder essa permissão a um usuário que não é superadministrador ou de grupo, 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-o ao
usuário.
Se você não tiver essas permissões, as vinculações de papéis e as regras de negação que tiverem grupos ou domínios terão um resultado de acesso Unknown, a menos que a regra de vinculação ou negação de papel também inclua explicitamente o principal.
Permissões para resolver 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 um administrador de domínio para resolver problemas de acesso de membros individuais do domínio.
Se você não tiver essas permissões, as vinculações de papéis e as regras de negação que tiverem grupos ou domínios terão um resultado de acesso Unknown, a menos que a regra de vinculação ou negação de papel também inclua explicitamente o principal.
Resolver problemas no acesso
Para resolver problemas de acesso, você precisa 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 principais, incluindo grupos, domínios, identidades da força de trabalho e das cargas de trabalho, não são compatíveis.
- Recurso: o nome completo do recurso.
Por exemplo, para verificar o 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ê usa o console do Google Cloud, ele apresenta uma lista de sugestões enquanto você digita. Para uma lista completa de permissões, consulte a referência de permissões.
Console
Para resolver problemas de acesso, faça o seguinte:
No console do Google Cloud, acesse a página Solucionador de problemas de políticas.
Digite o e-mail do principal com o acesso que você quer verificar.
Insira o nome completo do recurso a ser verificado.
Se você não souber o nome completo do recurso, siga um destes procedimentos:
- Se você estiver solucionando 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 solucionando 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:
- Na caixa Selecionar escopo, escolha um projeto, uma pasta ou uma organização para pesquisar.
- Na caixa Tipo de recurso, selecione os tipos de recursos que você quer pesquisar.
- Na caixa Pesquisar recursos, insira uma parte do nome do recurso.
- Na seção de resultados, selecione o recurso que você quer verificar.
- Clique em Selecionar para escolher o recurso e fechar a caixa de diálogo.
Digite 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.
Opcional: para verificar vários recursos e permissões, selecione Adicionar outro par e repita a etapa anterior.
Clique em Verificar acesso.
gcloud
Para descobrir por que um principal tem ou não uma permissão do IAM, use o
comando
gcloud policy-troubleshoot iam
.
Antes de usar os dados do comando abaixo, faça estas substituições:
EMAIL
: o endereço de e-mail do participante com permissões que você quer resolver.RESOURCE
: o recurso em que a permissão é concedida.PERMISSION
: a permissão que você quer resolver.
Execute o comando gcloud policy-troubleshoot iam:
Linux, macOS ou Cloud Shell
gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \ --permission=PERMISSION
Windows (PowerShell)
gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ` --permission=PERMISSION
Windows (cmd.exe)
gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^ --permission=PERMISSION
Você receberá uma resposta semelhante a esta
{ "accessTuple": { "conditionContext": { "destination": {}, "effectiveTags": [ { "tagValue": "tagValues/281481941428044", "namespacedTagValue": "803434038361/env/dev", "tagKey": "tagKeys/281475994198094", "namespacedTagKey": "803434038361/env", "tagKeyParentName": "organizations/803434038361" } ], "request": {}, "resource": {} }, "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "compute.instances.get", "permissionFqdn": "compute.googleapis.com/instances.get", "principal": "user1@example.com" }, "allowPolicyExplanation": { "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED", "explainedPolicies": [ { "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED", "bindingExplanations": [ { "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED", "combinedMembership": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_HIGH" }, "memberships": { "user:user1@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" }, { "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED", "combinedMembership": { "membership": "MEMBERSHIP_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "memberships": { "user:user2@example.com": { "membership": "MEMBERSHIP_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "relevance": "HEURISTIC_RELEVANCE_NORMAL", "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": { "user:user1@example.com": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "relevance": "HEURISTIC_RELEVANCE_NORMAL", "role": "roles/resourcemanager.organizationAdmin", "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED", "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL" } ], "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "policy": { "bindings": [ { "members": [ "user:user1@example.com" ], "role": "roles/compute.viewer" }, { "members": [ "user:user2@example.com" ], "role": "roles/owner" }, { "members": [ "user:user1@example.com" ], "role": "roles/resourcemanager.organizationAdmin" }, ], "etag": "BwX5/L9Vbg4=", "version": 3 }, "relevance": "HEURISTIC_RELEVANCE_HIGH" } ], "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "denyPolicyExplanation": { "denyAccessState": "DENY_ACCESS_STATE_DENIED", "explainedResources": [ { "denyAccessState": "DENY_ACCESS_STATE_DENIED", "explainedPolicies": [ { "denyAccessState": "DENY_ACCESS_STATE_DENIED", "policy": { "createTime": "2023-04-18T07:15:47.702191Z", "displayName": "Deny compute instance get", "etag": "MTc3MDA1ODIyNjExNTMzMDg2NzI=", "kind": "DenyPolicy", "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/deny-compute-get", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com" ], "deniedPermissions": [ "compute.googleapis.com/instances.get" ] } } ], "uid": "77e93c80-b383-0027-268e-a52a608aa13d", "updateTime": "2023-04-18T07:15:47.702191Z", }, "relevance": "HEURISTIC_RELEVANCE_HIGH", "ruleExplanations": [ { "combinedDeniedPermission": { "permissionMatchingState": "PERMISSION_PATTERN_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "combinedDeniedPrincipal": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "combinedExceptionPermission": { "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "combinedExceptionPrincipal": { "membership": "MEMBERSHIP_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "deniedPermissions": { "compute.googleapis.com/instances.get": { "permissionMatchingState": "PERMISSION_PATTERN_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "deniedPrincipals": { "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "denyAccessState": "DENY_ACCESS_STATE_DENIED", "relevance": "HEURISTIC_RELEVANCE_HIGH" } ] } ], "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012", "relevance": "HEURISTIC_RELEVANCE_HIGH" } ], "permissionDeniable": true, "relevance": "HEURISTIC_RELEVANCE_HIGH" }, "overallAccessState": "CANNOT_ACCESS" }
REST
Para descobrir por que um principal tem ou não uma permissão do IAM, use o método
iam.troubleshoot
da API Policy Troubleshooter.
Antes de usar os dados da solicitação, faça as substituições a seguir:
EMAIL
: o endereço de e-mail do participante com permissões que você quer resolver.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, comomy-project
.
Método HTTP e URL:
POST https://policytroubleshooter.googleapis.com/v3/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:
{ "overallAccessState": "CANNOT_ACCESS", "accessTuple": { "principal": "user1@example.com", "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "compute.instances.get", "permissionFqdn": "compute.googleapis.com/instances.get", "conditionContext": { "effectiveTags": [ { "tagValue": "tagValues/281481941428044", "namespacedTagValue": "803434038361/env/dev", "tagKey": "tagKeys/281475994198094", "namespacedTagKey": "803434038361/env", "tagKeyParentName": "organizations/803434038361" } ] } }, "allowPolicyExplanation": { "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED", "explainedPolicies": [ { "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED", "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "bindingExplanations": [ { "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:user1@example.com": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_HIGH" } }, "relevance": "HEURISTIC_RELEVANCE_HIGH" }, { "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED", "role": "roles/owner", "rolePermission": "ROLE_PERMISSION_INCLUDED", "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH", "combinedMembership": { "membership": "MEMBERSHIP_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "memberships": { "user:user2@example.com": { "membership": "MEMBERSHIP_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, { "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED", "role": "roles/resourcemanager.organizationAdmin", "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED", "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL", "combinedMembership": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "memberships": { "user:user1@example.com": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "relevance": "HEURISTIC_RELEVANCE_NORMAL" } ], "relevance": "HEURISTIC_RELEVANCE_HIGH", "policy": { "version": 3, "etag": "BwX5/L9Vbg4=", "bindings": [ { "role": "roles/compute.viewer", "members": [ "user:user1@example.com" ] }, { "role": "roles/owner", "members": [ "user:user2@example.com" ] }, { "role": "roles/resourcemanager.organizationAdmin", "members": [ "user:user1@example.com" ] }, ] } } ], "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "denyPolicyExplanation": { "denyAccessState": "DENY_ACCESS_STATE_DENIED", "explainedResources": [ { "denyAccessState": "DENY_ACCESS_STATE_DENIED", "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012", "explainedPolicies": [ { "denyAccessState": "DENY_ACCESS_STATE_DENIED", "policy": { "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/deny-compute-get", "uid": "77e93c80-b383-0027-268e-a52a608aa13d", "kind": "DenyPolicy", "displayName": "Deny compute instance get", "etag": "MTc3MDA1ODIyNjExNTMzMDg2NzI=", "createTime": "2023-04-18T07:15:47.702191Z", "updateTime": "2023-04-18T07:15:47.702191Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com" ], "deniedPermissions": [ "compute.googleapis.com/instances.get" ] } } ] }, "ruleExplanations": [ { "denyAccessState": "DENY_ACCESS_STATE_DENIED", "combinedDeniedPermission": { "permissionMatchingState": "PERMISSION_PATTERN_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "deniedPermissions": { "compute.googleapis.com/instances.get": { "permissionMatchingState": "PERMISSION_PATTERN_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "combinedExceptionPermission": { "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "combinedDeniedPrincipal": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "deniedPrincipals": { "principal://iam.googleapis.com/projects/-/serviceAccounts/user1@example.com": { "membership": "MEMBERSHIP_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" } }, "combinedExceptionPrincipal": { "membership": "MEMBERSHIP_NOT_MATCHED", "relevance": "HEURISTIC_RELEVANCE_NORMAL" }, "relevance": "HEURISTIC_RELEVANCE_HIGH" } ], "relevance": "HEURISTIC_RELEVANCE_HIGH" } ], "relevance": "HEURISTIC_RELEVANCE_HIGH" } ], "relevance": "HEURISTIC_RELEVANCE_HIGH", "permissionDeniable": true } }
Entender os resultados do solucionador de problemas
Console
A página de resultados contém as seguintes informações:
- Detalhes da avaliação
- Detalhes da política, que contém o seguinte:
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 vários pares de permissões de recursos, poderá usar a lista Avaliação de acesso para alternar entre eles.
Detalhes da política
A seção Detalhes da política contém detalhes sobre como as políticas de permissão e negação relevantes afetam o acesso do principal.
As políticas de permissão e negação relevantes incluem:
- 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 pai, pastas e organizações são relevantes devido à herança de políticas. 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 contém um breve resumo do acesso do principal com base nas políticas de permissão e negação relevantes do IAM. Esse resumo inclui o impacto das políticas de negação, o impacto das políticas de permissão e o resultado final do acesso com base nas políticas de negação e permissão relevantes.
Política de negação
Na seção Política de negação, é possível ver todas as políticas de negação relevantes, identificar regras que negam acesso à 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 anexados. Ao lado de cada política de negação há uma avaliação de acesso. Essa avaliação se aplica apenas a essa política de negação. Ela não reflete nenhum acesso de políticas herdadas. Se você não tiver permissão para conferir 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 ver as regras de negação relevantes nessas políticas, clique em uma política de negação. Para ver todas as regras de negação nas políticas de um recurso, clique nele. Elas 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 que você selecionou.
A coluna Acesso indica se a regra de negação nega a permissão ao principal. Para 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. Ela não reflete nenhum acesso de políticas herdadas. Se você não tiver permissão para visualizar a política de permissão de um recurso, a lista de recursos não o incluirá.
Clique no recurso para ver as vinculações de papéis relevantes na política de permissão de um recurso e como elas concedem ou não permissão ao principal. As vinculações 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 papel 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 mostrará vinculações de papéis com papéis personalizados editáveis. Para conferir todas as vinculações de papéis, desmarque a caixa de seleção Mostrar apenas vinculações relevantes.
A coluna Acesso indica se a vinculação do papel concede a permissão ao principal. Para mais detalhes sobre a vinculação de papel, clique em Ver detalhes da vinculação na linha da vinculação.
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 do acesso.
-
accessTuple
: uma descrição da tupla de acesso na solicitação, incluindo qualquer contexto de condição que você forneceu. Esta seção também contém um resumo das tags que se aplicam ao recurso. -
allowPolicyExplanation
: resumo se as políticas de permissão relevantes concedem a permissão ao principal, seguido por uma lista de políticas de permissão e vinculações de papéis delas.Para cada política de permissão, a resposta lista todas as vinculações de papéis na política e as avalia com base nos seguintes critérios:
- Indica se a vinculação inclui a permissão.
- Se a vinculação inclui o principal.
- Define se as condições da vinculação, se houver, são atendidas.
Em seguida, a resposta imprime 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 ao recurso.Para cada política de negação, a resposta imprime os metadados da política, lista as regras de negação e avalia cada regra com base nos critérios a seguir:
- Indica se a regra de negação inclui a permissão.
- Se a permissão é listada como uma exceção na regra de negação.
- Se a regra de negação inclui a principal.
- Se o principal está listado como uma exceção na regra de negação.
- Define se as condições na regra de negação, se houver, são atendidas.
-
overallAccessState
: se o principal pode usar a permissão especificada para acessar o recurso especificado com base nas políticas de permissão e negação relevantes.As políticas de permissão e negação relevantes incluem:
- 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 pai, pastas e organizações são relevantes devido à herança de políticas. 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.
HEURISTIC_RELEVANCE_HIGH
: indica que o objeto tem um forte impacto no resultado. Em outras palavras, a remoção do objeto provavelmente mudará o estado de acesso geral. Por exemplo, uma vinculação de papel que concede ao principal a permissão especificada teria esse valor de relevância.HEURISTIC_RELEVANCE_NORMAL
: indica que o objeto tem um impacto limitado no resultado. Em outras palavras, é improvável que a remoção do objeto altere o estado de acesso geral. Por exemplo, uma regra de negação que não contenha a permissão ou a principal teria esse valor de relevância.
Muitos objetos na resposta também têm um campo relevance
. O valor nesse campo indica quanto esse objeto contribui para o estado de acesso geral.
O campo relevance
pode ter os seguintes valores:
REST
A resposta contém quatro seções principais: o estado de acesso geral, uma descrição da tupla de acesso na solicitação, os resultados da avaliação da política de permissão e os resultados da avaliação da política de negação.
-
overallAccessState
: se o principal pode usar a permissão especificada para acessar o recurso especificado com base nas políticas de permissão e negação relevantes.As políticas de permissão e negação relevantes incluem:
- 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 pai, pastas e organizações são relevantes devido à herança de políticas. 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.
-
accessTuple
: uma descrição da tupla de acesso na solicitação, incluindo qualquer contexto de condição que você forneceu. Esta seção também contém um resumo das tags que se aplicam ao recurso. -
allowPolicyExplanation
: resumo se as políticas de permissão relevantes concedem a permissão ao principal, seguido por uma lista de políticas de permissão e vinculações de papéis delas.Para cada política de permissão, a resposta lista todas as vinculações de papéis na política e as avalia com base nos seguintes critérios:
- Indica se a vinculação inclui a permissão.
- Se a vinculação inclui o principal.
- Define se as condições da vinculação, se houver, são atendidas.
Em seguida, a resposta imprime 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 ao recurso.Para cada política de negação, a resposta imprime os metadados da política, lista as regras de negação e avalia cada regra com base nos critérios a seguir:
- Indica 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 a principal.
- Se o principal está listado como uma exceção na regra de negação.
- Define se as condições na regra de negação, se houver, são atendidas.
HEURISTIC_RELEVANCE_HIGH
: indica que o objeto tem um forte impacto no resultado. Em outras palavras, a remoção do objeto provavelmente mudará o estado de acesso geral. Por exemplo, uma vinculação de papel que concede ao principal a permissão especificada teria esse valor de relevância.HEURISTIC_RELEVANCE_NORMAL
: indica que o objeto tem um impacto limitado no resultado. Em outras palavras, é improvável que a remoção do objeto altere o estado de acesso geral. Por exemplo, uma regra de negação que não contenha a permissão ou a principal teria esse valor de relevância.
Muitos objetos na resposta também têm um campo relevance
. O valor nesse campo indica quanto esse objeto contribui para o estado de acesso geral.
O campo relevance
pode ter os seguintes valores:
Solução de problemas em vinculações de papéis condicionais
O solucionador de problemas de políticas resolve automaticamente vinculações de papéis condicionais e regras de negação com base em tags. No entanto, para resolver outros tipos de vinculações de papéis condicionais ou regras de negação condicionais, o solucionador de problemas de políticas precisa de mais contexto sobre a solicitação. Por exemplo, para solucionar condições com base em atributos de data/hora, o solucionador de problemas de políticas precisa do horário da solicitação.
Na CLI gcloud e na API REST, você fornece esse contexto adicional manualmente.
No Console do Google Cloud, é possível fornecer esse contexto adicional solucionando problemas diretamente em qualquer registro de auditoria da atividade do administrador ou registro de auditoria de acesso a dados. Cada entrada de registro de auditoria corresponde a uma solicitação para uma API do Google Cloud ou uma ação que o Google Cloud realiza em seu nome. Ao resolver problemas em um registro de auditoria, o solucionador de problemas de políticas recebe automaticamente mais informações sobre a solicitação, como data e hora, o que permite que ele analise vinculações de papéis condicionais e regras de negação.
Console
Para solucionar problemas de vinculações de papéis condicionais e regras de negação, faça o seguinte:
No console do Google Cloud, acesse a página do Explorador de registros.
Se o título da página for Visualizador de registros legados, clique na lista suspensa Upgrade e selecione Fazer upgrade para o novo Explorador de registros.
Para visualizar somente os registros de auditoria de Atividade do administrador e Acesso a dados, insira a seguinte consulta no criador de consultas e clique em Executar consulta:
logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
Substitua os seguintes valores:
RESOURCE_TYPE
: o tipo de recurso que está listando os registros de auditoria. Useprojects
,folders
ouorganizations
.RESOURCE_ID
: o ID do recurso.
Localize a entrada de registro de auditoria que corresponde à solicitação que você quer solucionar. Para saber como usar o Explorador de registros para encontrar entradas de registro específicas, consulte Como usar o Explorador de registros.
Na coluna Resumo da entrada de registro, clique em IAM e em Resolver problemas de acesso.
O solucionador de problemas de políticas usa as informações na entrada de registro para resolver problemas de acesso e mostra os resultados. O contexto adicional é listado nos detalhes da avaliação em Contexto da condição. Para consultar os detalhes do contexto, clique em Visualizar contexto da condição. Para saber mais sobre a página de resultados do solucionador de problemas de políticas, consulte Como solucionar problemas de acesso.
Opcional: para resolver outra solicitação que envolve vinculações de papéis condicionais e regras de negação, volte à página do Explorador de registros e repita as etapas anteriores.
gcloud
Para solucionar problemas de vinculações de papéis condicionais e regras de negação, use o
comando
gcloud policy-troubleshoot iam
.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
EMAIL
: o endereço de e-mail do principal com permissões que você quer resolver. -
RESOURCE
: o recurso em que a permissão é concedida. -
PERMISSION
: a permissão que você quer resolver. -
DESTINATION_IP
: opcional. O endereço IP de destino da solicitação a ser usado ao verificar as vinculações de papéis condicionais. Por exemplo,198.1.1.1
. -
DESTINATION_PORT
: opcional. A porta de destino da solicitação a ser usada ao verificar as vinculações de papéis condicionais. Por exemplo, "8080". -
REQUEST_TIME
: opcional. O carimbo de data/hora da solicitação a ser usado ao verificar as vinculações de papéis condicionais. Use um carimbo de data/hora no formato RFC 3339, por exemplo,2099-02-01T00:00:00Z
. -
RESOURCE_NAME
: opcional. O valor do nome do recurso a ser usado na verificação das vinculações de papéis condicionais. Para ver uma lista dos formatos de nomes de recursos aceitos, consulte Formato do nome de recursos. -
RESOURCE_SERVICE
: opcional. O valor do serviço de recursos a ser usado na verificação das vinculações de papéis condicionais. Para conferir uma lista dos nomes de serviço aceitos, consulte Valores do serviço de recursos. -
RESOURCE_TYPE
: opcional. Para conferir uma lista dos tipos de recursos aceitos, consulte Valores de tipo de recurso.
Execute o comando gcloud policy-troubleshoot iam:
Linux, macOS ou 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
A resposta contém uma explicação sobre o acesso do principal. Para cada regra de negação e vinculação de papel com uma condição, a resposta inclui um campo conditionExplanation
que descreve se a condição é avaliada como verdadeira ou falsa com base no contexto fornecido.
Por exemplo, veja a seguir uma avaliação de uma vinculação de papel com uma condição que especifica o tipo e o serviço do recurso:
... { "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
Para solucionar problemas de vinculações de papéis condicionais e regras de negação, use o método
iam.troubleshoot
da API Policy Troubleshooter.
Antes de usar os dados da solicitação, faça as substituições a seguir:
-
EMAIL
: o endereço de e-mail do principal com permissões que você quer resolver. -
RESOURCE
: o recurso em que a permissão é concedida. -
PERMISSION
: a permissão que você quer resolver. -
DESTINATION_IP
: opcional. O endereço IP de destino da solicitação a ser usado ao verificar as vinculações de papéis condicionais. Por exemplo,198.1.1.1
. -
DESTINATION_PORT
: opcional. A porta de destino da solicitação a ser usada ao verificar as vinculações de papéis condicionais. Por exemplo, "8080". -
REQUEST_TIME
: opcional. O carimbo de data/hora da solicitação a ser usado ao verificar as vinculações de papéis condicionais. Use um carimbo de data/hora no formato RFC 3339, por exemplo,2099-02-01T00:00:00Z
. -
RESOURCE_NAME
: opcional. O valor do nome do recurso a ser usado na verificação das vinculações de papéis condicionais. Para ver uma lista dos formatos de nomes de recursos aceitos, consulte Formato do nome de recursos. -
RESOURCE_SERVICE
: opcional. O valor do serviço de recursos a ser usado na verificação das vinculações de papéis condicionais. Para conferir uma lista dos nomes de serviço aceitos, consulte Valores do serviço de recursos. -
RESOURCE_TYPE
: opcional. Para conferir uma lista dos tipos de recursos aceitos, consulte Valores de tipo de recurso.
Método HTTP e URL:
POST https://policytroubleshooter.googleapis.com/v3/iam:troubleshoot
Corpo JSON da solicitação:
{ "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 } } } }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém uma explicação sobre o acesso do principal. Para cada regra de negação e vinculação de papel com uma condição, a resposta inclui um campo conditionExplanation
que descreve se a condição é avaliada como verdadeira ou falsa com base no contexto fornecido.
Por exemplo, veja a seguir uma avaliação de uma vinculação de papel com uma condição que especifica o tipo e o serviço do recurso:
... { "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 }] } } ...
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.
- Leia sobre as outras ferramentas do Policy Intelligence, que ajudam a entender e gerenciar suas políticas para melhorar de maneira proativa sua configuração de segurança.