Nesta página, descrevemos como simular uma alteração em uma política de permissão usando o Simulador de política para políticas de permissão do Identity and Access Management. Ela também explica como interpretar os resultados da simulação e como aplicar a política de permissão simulada, se você quiser.
Antes de começar
-
Enable the Policy Simulator and Resource Manager APIs.
- Opcional: saiba mais sobre como o Simulador de política funciona.
Permissões necessárias
Antes de simular uma alteração em uma política de permissão, verifique se você tem as permissões apropriadas. Algumas permissões são necessárias para executar uma simulação. Outras não são necessárias, mas ajudam a conseguir resultados mais completos da simulação.
Para saber mais sobre os papéis do Identity and Access Management (IAM), consulte Noções básicas sobre papéis.
Permissões de recurso de destino necessárias
O recurso de destino da simulação é o recurso com as políticas de permissão que você está simulando.
Para conseguir as permissões necessárias para executar uma simulação, peça ao administrador para conceder a você os seguintes papéis do IAM no recurso de destino:
-
Leitor de recursos do Cloud (
roles/cloudasset.viewer
) -
Administrador do simulador (
roles/policysimulator.admin
) -
Revisor de segurança (
roles/iam.securityReviewer
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para executar uma simulação. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para executar uma simulação:
-
cloudasset.assets.searchAllResources
-
policysimulator.replays.run
-
service.resource.getIamPolicy
, em queresource
é o tipo do recurso de destino eservice
é o nome do serviço do Google Cloud proprietário desse recurso.
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Permissões necessárias do recurso host
O recurso host de uma simulação é o projeto, a pasta ou a organização que cria e executa a simulação. O recurso host não precisa estar relacionado ao recurso de destino.
A maneira como você define o recurso host depende da plataforma que você está usando.
Console
O recurso host é o projeto, a pasta ou a organização que aparece no seletor de recursos.
Para alterar o recurso host, escolha um projeto, uma pasta ou uma organização diferente no seletor de recursos.
gcloud
O recurso host é o projeto de cota atual. Para definir o projeto de cota,
use o
comando gcloud auth application-default set-quota-project
.
REST
Você especifica manualmente o recurso host sempre que envia uma solicitação. Consulte Como simular uma alteração de política nesta página para mais detalhes.
Para receber as permissões necessárias para executar uma simulação,
peça ao administrador para conceder a você o
papel do IAM de Administrador do simulador (roles/policysimulator.admin
) no recurso host.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém as permissões necessárias para executar uma simulação. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para executar uma simulação:
-
policysimulator.replayResults.list
-
policysimulator.replays.create
-
policysimulator.replays.get
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Permissões recomendadas
Para ter os resultados mais completos de uma simulação, recomendamos que você tenha determinadas permissões do IAM e do Google Workspace. Se você não tiver algumas ou todas essas permissões, ainda poderá executar uma simulação. No entanto, executar uma simulação sem essas permissões pode resultar em um número maior de alterações de acesso desconhecidas, porque talvez não seja possível recuperar informações que possam afetar os resultados da simulação.
Permissões do IAM recomendadas
Recomendamos que você tenha o papel Revisor de segurança
(roles/iam.securityReviewer
) para a organização ao executar uma simulação.
Como alternativa, se você já tiver o papel Administrador de segurança
(roles/iam.securityAdmin
), não precisará receber outros papéis.
Esses papéis fornecem as seguintes permissões, que ajudam você a conseguir os resultados mais completos da simulação:
iam.roles.get
eiam.roles.list
em todos os projetos, pastas ou organizações relevantes em que os papéis personalizados estão definidos. Um projeto, pasta ou organização é relevante se for um ancestral ou descendente do recurso cuja política de permissão você está simulando.service.resource.getIamPolicy
, em queresource
é o nome de um tipo de recurso que pode ter uma política de permissão eservice
é o nome do serviço do Google Cloud proprietário desse recurso.Ao executar uma simulação, recomendamos que você tenha essa permissão em cada recurso que atenda a estes critérios:
- O Simulador de política é compatível com o recurso.
O recurso tem uma política de permissão que pode afetar o acesso do usuário. Isso é válido se uma das seguintes condições se aplicar:
- O recurso é descendente do recurso cuja política de permissão você está simulando e aparece nos registros de acesso relevantes.
- O recurso é um ancestral do recurso cuja política de permissão você está simulando.
Por exemplo, imagine que você quer simular uma política de permissão para um projeto. Se os registros de acesso incluírem uma tentativa de acesso a um bucket do Cloud Storage no projeto, você precisa da permissão
storage.buckets.getIamPolicy
nesse bucket. Se o projeto tiver uma pasta pai com uma política de permissão, você também precisará da permissãoresourcemanager.folders.getIamPolicy
nessa pasta.
Permissões recomendadas do Google Workspace
Recomendamos que você tenha permissão para recuperar informações de associação ao grupo para cada grupo do Google na política de permissão original e na política de permissão proposta.
Os superadministradores e administradores de grupo do Google Workspace geralmente têm acesso para visualizar
a associação ao grupo. Se você não for um superadministrador ou administrador de grupo, peça ao
administrador do Google Workspace para
criar um papel personalizado de administrador do Google Workspace
que contenha o privilégio groups.read
(localizado em Privilégios
da API Admin) e concedê-lo a você. Isso permite que você veja a associação
de todos os grupos no seu domínio e simule alterações de maneira mais eficaz
em uma política de permissão.
Simular uma alteração de política
Simule uma alteração em uma política de permissão seguindo estas etapas.
Console
Veja no exemplo a seguir como simular uma alteração em uma política de permissão para um projeto. No entanto, você pode simular uma alteração em uma política de permissão para qualquer recurso com essa política.
Edite as permissões de um principal e, em vez de clicar em Salvar, clique em Testar alterações:
No console do Google Cloud, abra a página IAM.
Crie uma alteração proposta na política de permissão editando as permissões de um principal existente:
- Localize o participante com o acesso que você quer editar e clique no botão Editar à direita.
- Para editar o acesso do participante, adicione um novo papel ou revogue ou altere um papel.
Para simular a alteração proposta, clique em Testar alterações.
Após alguns minutos, o console do Google Cloud vai mostrar os resultados da simulação como uma lista de alterações de acesso. Consulte Noções básicas sobre os resultados do Simulador de política nesta página para mais informações.
Se não houver alteração no acesso entre a política de permissão atual e a simulada, o console do Google Cloud não vai mostrar nenhuma mudança de acesso.
gcloud
Para simular uma alteração em uma política de permissão, siga o padrão read-modify-write, mas simule a política de permissão em vez de gravá-la.
Leia a política de permissão atual executando o seguinte comando:
gcloud resource-type get-iam-policy resource-id --format=format > filepath
Substitua os seguintes valores:
resource-type
: o tipo de recurso para o qual você quer simular uma política de permissão. Por exemplo,projects
.resource-id
: o ID do recurso com a política de permissão que você quer simular. Por exemplo,my-project
.format
: o formato da resposta. Use o valorjson
ouyaml
.filepath
: o caminho para um novo arquivo de saída para a política de permissão.
Por exemplo, o comando a seguir recebe a política de permissão do projeto
my-project
no formato JSON e a salva no diretório inicial do usuário:gcloud projects get-iam-policy my-project --format=json > ~/policy.json
Modifique a política de permissão JSON ou YAML retornada pelo comando
get-iam-policy
para refletir as alterações que você quer simular.Há vários tipos de alteração que podem ser feitos na política de permissão. Por exemplo, é possível adicionar ou remover um principal de uma vinculação de papel ou remover uma vinculação de papel da política de permissão.
Execute o seguinte comando para simular a alteração na política de permissão:
gcloud iam simulator replay-recent-access \ full-resource-name \ filepath \ --format=format
Substitua os seguintes valores:
full-resource-name
: o nome completo do recurso cuja política de permissão você quer simular.O nome completo do recurso é um URI que consiste no nome do serviço e no caminho para o recurso. Por exemplo, se você estiver simulando uma política de permissão para um projeto, use
//cloudresourcemanager.googleapis.com/projects/project- id
, em queproject-id
é o ID do projeto cuja política de permissão você está simulando.Para uma lista de formatos de nome de recurso completos, consulte Nomes de recursos completos.
filepath
: o caminho para o arquivo que contém a política de permissão modificada que você quer simular. Por exemplo,~/proposed_policy.json
.format
: o formato da resposta. Por exemplo,json
ouyaml
.
Após alguns minutos, o comando imprime uma lista de resultados de reprodução, explicando como o acesso do principal mudaria se a política de permissão proposta fosse aplicada. Esses resultados também listam todos os erros que ocorreram durante a simulação, incluindo todos os erros devido a tipos de recursos incompatíveis.
Consulte Noções básicas sobre os resultados do Simulador de política nesta página para saber como ler os resultados. Para saber como salvar os resultados da simulação em vez de imprimi-los, consulte Como salvar resultados da simulação.
Veja a seguir um exemplo de resposta para uma simulação de política de permissão que envolve o usuário
my-user@example.com
. Nesse caso, se a alteração proposta fosse aplicada,my-user@example.com
provavelmente não teria mais as permissõesresourcemanager.projects.list
eresourcemanager.projects.get
para o projetomy-project
e certamente não teria mais a permissãoresourcemanager.projects.update
para o projetomy-project
:[ { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.list", "principal": "my-user@example.com" }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ], "message": "Missing permission to get relevant IAM policies." } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } }, "lastSeenDate": { "day": 12, "month": 1, "year": 2021 } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.get", "principal": "my-user@example.com" }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to view group membership.", "resourceName": "group:everyone@example.com", "resourceType": "Google group" } ], "message": "Missing permission to view group membership." }, { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ], "message": "Missing permission to get relevant IAM policies." } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "bindingExplanations": [ { "access": "UNKNOWN_INFO_DENIED", "memberships": { "group:everyone@example.com": { "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED" } }, "role": "roles/owner" } ], "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "policy": { "bindings": [ { "members": [ "group:everyone@example.com" ], "role": "roles/owner" } ], "etag": "BwWgJSIInYA=", "version": 3 } }, { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } }, "lastSeenDate": { "day": 10, "month": 1, "year": 2021 } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "diff": { "accessDiff": { "accessChange": "ACCESS_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" } } }, "lastSeenDate": { "day": 15, "month": 1, "year": 2021 } }, { "accessTuple": {}, "error": { "code": 12, "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.delete" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.update" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "pubsub.topics.publish" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.list" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.getIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ], "message": "Simulator does not yet support all resource types for 8 removed permissions." } } ]
Se não houver alteração no acesso entre a política de permissão existente e a simulada, o comando imprimirá
No access changes found in the replay
.
REST
Para simular uma alteração em uma política de permissão, siga o padrão read-modify-write. Em vez de gravar a política de permissão, crie e execute uma simulação.
Leia a política de permissão para o recurso.
Para receber a política de permissão de um projeto, use o método
projects.getIamPolicy
da API Resource Manager.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "user:fatima@example.com" ] } ] }
Modifique a política de permissão retornada para refletir as alterações que você quer simular.
Há vários tipos de alteração que podem ser feitos na política de permissão. Por exemplo, é possível adicionar ou remover um principal de uma vinculação de papel ou remover uma vinculação de papel da política de permissão.
Crie uma simulação ou Reproduza com a política de permissão modificada.
Para criar uma reprodução de um projeto, pasta ou organização, use o método
replays.create
da API Policy Simulator.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
-
HOST_RESOURCE_TYPE
: o tipo do recurso que hospedará a reprodução. Esse valor precisa serprojects
,folders
ouorganizations
. HOST_RESOURCE_ID
: o ID do recurso host, por exemplo,my-project
.-
TARGET_FULL_RESOURCE_NAME
: o nome completo do recurso cuja política você quer simular. Esse recurso pode ser qualquer recurso que aceite políticas do IAM e não precisa estar relacionado ao recurso host de nenhuma forma.O nome completo do recurso é um URI que consiste no nome do serviço e no caminho para o recurso. Por exemplo, se você estiver simulando uma política para um projeto, use
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID
, em quePROJECT_ID
é o ID do projeto cuja política você está simulando.Para uma lista completa de formatos de nome de recurso, consulte Nomes de recursos completos.
-
POLICY
: a política que você quer simular. Para ver um exemplo de política, consulte a referência da política.Para simular várias políticas, inclua vários pares
"OBJECT_FULL_RESOURCE_NAME" : POLICY
no corpo da solicitação. PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
POST https://policysimulator.googleapis.com/v1/HOST_RESOURCE_TYPE/HOST_RESOURCE_ID/locations/global/replays
Corpo JSON da solicitação:
{ "config": { "policyOverlay": { "TARGET_FULL_RESOURCE_NAME" : POLICY } } }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém o nome de uma operação que representa a reprodução:
{ "name": "operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8", "metadata": { "type_url": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata" } }
-
Pesquise o método
operations.get
até que a reprodução seja concluída.Para pesquisar uma operação, recomendamos que você invoque repetidamente o método
operations.get
até que a resposta inclua os campos"done": true
ename
com o nome da repetição concluída. Use a espera exponencial truncada para introduzir um atraso entre cada solicitação.Para conferir o estado de uma reprodução, use o método
operations.get
da API Policy Simulator.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
OPERATION_NAME
: o nome de uma operação de reprodução, incluindo o prefixooperations
. Copie esse valor do camponame
de uma respostareplays.create
. Por exemplo:operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
GET https://policysimulator.googleapis.com/v1/OPERATION_NAME
Para enviar a solicitação, expanda uma destas opções:
As operações em andamento retornam uma resposta como esta:
{ "name": "operations/42083b6b-3788-41b9-ae39-e97d7615a22d", "metadata": { "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata", "startTime": "2021-01-15T05:34:14.732Z" } }
As operações concluídas retornam uma resposta como esta:
{ "name": "operations/89ab4892-9605-4c84-aedb-4fce4fc5195b", "metadata": { "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata", "startTime": "2021-01-15T05:40:15.922Z" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.policysimulator.v1.Replay", "replay": { "name": "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b", "state": SUCCEEDED, "config": {}, "resultsSummary": { "logCount": 1319, "unchangedCount": 1169, "differenceCount": 149, "errorCount": 1, "oldestDate": { "year": 2020, "month": 10, "day": 15 }, "newestDate": { "year": 2021, "month": 1, "day": 12 } } } } }
Veja os resultados da reprodução.
Para receber os resultados de uma reprodução, use o método
replays.results.list
da API Policy Simulator.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
-
REPLAY_NAME
: o nome da reprodução para a qual você quer recuperar resultados. Copie esse valor no camporesponse.replay.name
de uma respostaoperations.get
. Inclua qualquer tipo de recurso e prefixos de local. Por exemplo,"projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b"
-
PAGE_SIZE
: opcional. O número máximo de resultados a serem retornados a partir dessa solicitação. Se não especificado, o servidor determinará o número de resultados a serem retornados. Se o número de resultados for maior do que o tamanho da página, a resposta conterá um token de paginação que é possível usar para recuperar a próxima página de resultados. PAGE_TOKEN
: opcional. O token de paginação retornado em uma resposta anterior desse método. Se especificada, a lista de resultados começará onde a solicitação anterior foi finalizada.PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
GET https://policysimulator.googleapis.com/v1/REPLAY_NAME/results?pageSize=page-size&pageToken=PAGE_TOKEN
Para enviar a solicitação, expanda uma destas opções:
A resposta contém uma lista de resultados que explicam como o acesso do participante seria alterado se a política proposta fosse aplicada. Esses resultados também listam todos os erros que ocorreram durante a simulação, particularmente os erros devido a tipos de recursos incompatíveis.
Consulte Noções básicas sobre resultados do Simulador de política nesta página para saber como ler os resultados.
Veja a seguir um exemplo de resposta para uma simulação de política que envolve o usuário
my-user@example.com
. Nesse caso, se a alteração proposta fosse aplicada,my-user@example.com
provavelmente não teria mais as permissõesresourcemanager.projects.list
eresourcemanager.projects.get
para o projetomy-project
e certamente não teria mais a permissãoresourcemanager.projects.update
para o projetomy-project
:{ "replayResults": [ { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.list", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 27, "month": 3, "year": 2020 }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "message": "Missing permission to get relevant IAM policies.", "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ] } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.get", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 27, "month": 3, "year": 2020 }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "message": "Missing permission to view group membership.", "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to view group membership.", "resourceName": "group:everyone@example.com", "resourceType": "Google group" } ] }, { "code": 7, "message": "Missing permission to get relevant IAM policies.", "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ] } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "bindingExplanations": [ { "access": "UNKNOWN_INFO_DENIED", "memberships": { "group:everyone@example.com": { "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED" } }, "role": "roles/owner" } ], "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "policy": { "bindings": [ { "members": [ "group:everyone@example.com" ], "role": "roles/owner" } ], "etag": "BwWgJSIInYA=", "version": 3 } }, { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 27, "month": 3, "year": 2020 }, "diff": { "accessDiff": { "accessChange": "ACCESS_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" } } } }, { "accessTuple": {}, "error": { "code": 12, "message": "Simulator does not yet support all resource types for 8 removed permissions.", "details": [ { "@type": "type.googleapis.com/google.rpc.Status", "code": 12, "message": "Simulator does not yet support all resource types for 8 removed permissions.", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.delete" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.update" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "pubsub.topics.publish" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.list" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.getIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ] } ] } } ], "nextPageToken": "AWukk3zjv80La+chWx6WNt7X8czGPLtP792gRpkNVEV/URZ/VdWzxmuJKr" }
Se não houve alteração no acesso entre a política de permissão existente e a política simulada, a solicitação retornará uma lista vazia (
{}
).-
Entender os resultados do Simulador de políticas
O Simulador de política informa o impacto de uma alteração proposta a uma política de permissão como uma lista de alterações de acesso. Cada alteração de acesso representa uma tentativa de acesso nos últimos 90 dias que teria um resultado diferente na política de permissão proposta em relação à política de permissão atual.
O simulador de política também lista todos os erros que ocorreram durante a simulação, o que ajuda a identificar possíveis lacunas na simulação.
A apresentação dessas alterações e erros depende da plataforma que você está usando.
Console
A página de resultados do Simulador de política exibe os resultados da simulação em várias seções diferentes:
Alterações na política: nessa seção, há uma lista dos recursos com a política de permissão para a qual você está sugerindo alterações, os papéis que você quer remover e os papéis que você quer adicionar.
Esta seção também contém um botão Ver diferença de política. Se você clicar nesse botão, poderá ver a aparência da política de permissão do recurso antes e depois das alterações propostas.
Alterações de permissão: essa seção contém contagens de permissões removidas e adicionadas, que descrevem como as permissões do principal mudariam se você aplicasse as alterações propostas. Essas contagens de permissões são calculadas pela comparação das permissões nos papéis atuais do principal com as permissões nos papéis propostos dele, ignorando os papéis herdados.
Esta seção também contém um botão Visualizar diferença de permissões. Se você clicar nesse botão, será possível ver uma comparação lado a lado das permissões nos papéis atuais e propostos pelo principal.
Alterações de acesso nos últimos 90 dias: esta seção mostra quais tentativas de acesso dos últimos 90 dias têm resultados diferentes de acordo com a política de permissão proposta e a atual. Esta seção inclui um resumo das alterações de acesso e uma tabela com resultados mais detalhados.
O resumo das alterações de acesso lista o número de cada tipo de alteração, o número de erros e de resultados desconhecidos e o número de tentativas de acesso que têm o mesmo resultado de acordo com a política de permissão proposta e a atual. O resumo também mostra quantas permissões não puderam ser simuladas. Para mais informações, consulte a seção Erros nesta página.
Esta seção também contém uma tabela de alterações de acesso. Esta tabela lista cada tentativa de acesso dos últimos 90 dias que teve um resultado diferente de acordo com a política de permissão proposta e a atual. Cada entrada inclui o recurso que o principal estava tentando acessar, a data da solicitação, o principal que fez a solicitação, a permissão na solicitação e o status de acesso de acordo com a política de permissão proposta em comparação com o status de acesso de acordo com a política de permissão atual.
Existem vários tipos diferentes de acesso:
Mudança de acesso Detalhes Acesso revogado O principal tinha acesso à política de permissão atual, mas não terá mais acesso após a alteração proposta. Acesso potencialmente revogado Este problema pode ocorrer pelos seguintes motivos:
- O principal tinha acesso à política de permissão atual, mas o acesso à política de permissão proposta é desconhecido.
- O acesso do principal à política de permissão atual é desconhecido, mas ele não terá acesso após a alteração proposta.
Acesso recebido O principal não tinha acesso à política de permissão atual, mas terá acesso após a alteração proposta. Acesso potencialmente recebido Este problema pode ocorrer pelos seguintes motivos:
- O principal não tinha acesso à política de permissão atual, mas seu acesso após a alteração proposta é desconhecido.
- O acesso do principal à política de permissão atual é desconhecido, mas terá acesso após a alteração proposta.
Acesso desconhecido O acesso do principal à política de permissão atual e à política de permissão proposta é desconhecido, e as alterações propostas podem afetar o acesso do principal. Erro Ocorreu um erro durante a simulação. Para mais detalhes sobre uma alteração de acesso, clique nela. Isso abrirá o painel Detalhes da alteração de acesso, que exibe mais informações sobre a alteração, incluindo o acesso atual do participante, o acesso proposto do participante e detalhes adicionais sobre o resultado da alteração de acesso.
gcloud
Ao usar o comando replay-recent-access
, a
resposta da CLI gcloud contém uma lista de replayResults
.
Cada resultado de reprodução descreve uma tentativa de acesso que teria tido um resultado
diferente se a política de permissão proposta tivesse sido aplicada no momento da
tentativa. Por exemplo, o resultado de reprodução a seguir mostra que my-user@example.com
usou
a permissão resourcemanager.projects.update
no passado para executar uma
ação no projeto my-project
. No entanto, se a
política de permissão proposta estivesse em vigor, o acesso a ela teria sido negado.
{ "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 15, "month": 1, "year": 2021 }, "diff": { "accessDiff": { "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" }, "accessChange": "ACCESS_REVOKED" } } }
Cada resultado de reprodução tem os seguintes campos:
accessTuple
: a tentativa de acesso relacionada ao resultado. Esse campo inclui o recurso, a permissão e o participante envolvidos na tentativa de acesso.lastSeenDate
: a data em que a tentativa de acesso foi feita pela última vez.diff.accessDiff
ouerror
: se a reprodução de uma tentativa de acesso for bem-sucedida, o resultado conterá um campodiff.accessDiff
que informa a diferença entre os resultados da tentativa de acesso à política de permissão atual e à política de permissão proposta. Se a tentativa de reprodução não for bem-sucedida, o resultado da reprodução conterá um campoerror
com uma descrição do erro. Para saber mais sobre erros de simulação, consulte Erros nesta página.
Cada diferença de acesso tem os seguintes componentes:
baseline
: o resultado do acesso ao usar a política de permissão atual. Isso é informado como um dos seguintes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
. Se o resultado forUNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
, a resposta também listará todos os erros associados às informações desconhecidas, bem como as políticas de permissão associadas a esse erro. Para mais informações sobre valoresUNKNOWN
, consulte Resultados desconhecidos nesta página.simulated
: o resultado do acesso ao usar a política de permissão proposta. Isso é informado como um dos seguintes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
. Se o resultado forUNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
, a resposta também listará todos os erros associados às informações desconhecidas, bem como as políticas de permissão associadas a esse erro. Para mais informações sobre valoresUNKNOWN
, consulte Resultados desconhecidos nesta página.accessChange
: a alteração entre o estado de acesso de referência e o estado de acesso simulado. Consulte a tabela a seguir para ver uma lista de possíveis valores:Mudança de acesso Detalhes ACCESS_REVOKED
O principal tinha acesso à política de permissão atual, mas não terá mais acesso após a alteração proposta. ACCESS_MAYBE_REVOKED
Este problema pode ocorrer pelos seguintes motivos:
- O principal tinha acesso à política de permissão atual, mas o acesso à política de permissão proposta é desconhecido.
- O acesso do principal à política de permissão atual é desconhecido, mas ele não terá acesso após a alteração proposta.
ACCESS_GAINED
O principal não tinha acesso à política de permissão atual, mas terá acesso após a alteração proposta. ACCESS_MAYBE_GAINED
Este problema pode ocorrer pelos seguintes motivos:
- O principal não tinha acesso à política de permissão atual, mas seu acesso após a alteração proposta é desconhecido.
- O acesso do principal à política de permissão atual é desconhecido, mas terá acesso após a alteração proposta.
UNKNOWN_CHANGE
O acesso do principal à política de permissão atual e à política de permissão proposta é desconhecido, e as alterações propostas podem afetar o acesso do principal.
REST
Quando você chama o método replays.results.list
, a resposta contém uma lista de
replayResults
.
Cada resultado de reprodução descreve uma tentativa de acesso que teria tido um resultado
diferente se a política de permissão proposta tivesse sido aplicada no momento da
tentativa. Por exemplo, o resultado de reprodução a seguir mostra que my-user@example.com
usou
a permissão resourcemanager.projects.update
no passado para executar uma
ação no projeto my-project
. No entanto, se a
política de permissão proposta estivesse em vigor, o acesso a ela teria sido negado.
{ "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 15, "month": 1, "year": 2021 }, "diff": { "accessDiff": { "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" }, "accessChange": "ACCESS_REVOKED" } } }
Cada resultado de reprodução tem os seguintes campos:
accessTuple
: a tentativa de acesso relacionada ao resultado. Esse campo inclui o recurso, a permissão e o participante envolvidos na tentativa de acesso.lastSeenDate
: a data em que a tentativa de acesso foi feita pela última vez.diff.accessDiff
ouerror
: se a reprodução de uma tentativa de acesso for bem-sucedida, o resultado conterá um campodiff.accessDiff
que informa a diferença entre os resultados da tentativa de acesso à política de permissão atual e à política de permissão proposta. Se a tentativa de reprodução não for bem-sucedida, o resultado da reprodução conterá um campoerror
com uma descrição do erro. Para saber mais sobre erros de simulação, consulte Erros nesta página.
Cada diferença de acesso tem os seguintes componentes:
baseline
: o resultado do acesso ao usar a política de permissão atual. Isso é informado como um dos seguintes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
. Se o resultado forUNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
, a resposta também listará todos os erros associados às informações desconhecidas, bem como as políticas de permissão associadas a esse erro. Para mais informações sobre valoresUNKNOWN
, consulte Resultados desconhecidos nesta página.simulated
: o resultado do acesso ao usar a política de permissão proposta. Isso é informado como um dos seguintes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
. Se o resultado forUNKNOWN_CONDITIONAL
ouUNKNOWN_INFO_DENIED
, a resposta também listará todos os erros associados às informações desconhecidas, bem como as políticas de permissão associadas a esse erro. Para mais informações sobre valoresUNKNOWN
, consulte Resultados desconhecidos nesta página.accessChange
: a alteração entre o estado de acesso de referência e o estado de acesso simulado. Consulte a tabela a seguir para ver uma lista de possíveis valores:Mudança de acesso Detalhes ACCESS_REVOKED
O principal tinha acesso à política de permissão atual, mas não terá mais acesso após a alteração proposta. ACCESS_MAYBE_REVOKED
Este problema pode ocorrer pelos seguintes motivos:
- O principal tinha acesso à política de permissão atual, mas o acesso à política de permissão proposta é desconhecido.
- O acesso do principal à política de permissão atual é desconhecido, mas ele não terá acesso após a alteração proposta.
ACCESS_GAINED
O principal não tinha acesso à política de permissão atual, mas terá acesso após a alteração proposta. ACCESS_MAYBE_GAINED
Este problema pode ocorrer pelos seguintes motivos:
- O principal não tinha acesso à política de permissão atual, mas seu acesso após a alteração proposta é desconhecido.
- O acesso do principal à política de permissão atual é desconhecido, mas terá acesso após a alteração proposta.
UNKNOWN_CHANGE
O acesso do principal à política de permissão atual e à política de permissão proposta é desconhecido, e as alterações propostas podem afetar o acesso do principal.
Resultados desconhecidos
Se um resultado de acesso for desconhecido, isso significa que o simulador de políticas não tinha informações suficientes para avaliar completamente a tentativa de acesso.
Console
Se um resultado de acesso for desconhecido, o painel de detalhes da alteração de acesso informará o motivo do desconhecimento, além dos papéis, políticas de permissão, associações a grupos e condições específicos pelos quais não foi possível acessar ou avaliar.
Um resultado pode ser desconhecido por vários motivos:
- Informações do papel negadas: o principal que executa a simulação não tinha permissão para ver os detalhes de um ou mais papéis sendo simulados.
- Não foi possível acessar a política: o principal que executa a simulação não tinha permissão para acessar a política de permissão de um ou mais dos recursos envolvidos na simulação.
- Informações de associação negadas: o principal que executa a simulação não tinha permissão para visualizar os membros de um ou mais grupos incluídos na política de permissão proposta.
- Condição não compatível: há uma vinculação de papel condicional na política de permissão que está sendo testada. O Simulador de política não é compatível com condições, por isso a vinculação não foi avaliada.
gcloud
Na CLI gcloud, os resultados da simulação informarão o motivo pelo qual o resultado é desconhecido na diferença de acesso.
O motivo pelo qual o resultado de acesso é desconhecido será um dos seguintes:
UNKNOWN_INFO_DENIED
: o usuário não tem permissão para acessar as informações necessárias para avaliar o estado de acesso. Isso pode acontecer por um dos seguintes motivos:- O usuário não tem permissão para recuperar a política de permissão que está sendo simulada ou não tem permissão para recuperar políticas de permissão para recursos nos registros de acesso.
- O usuário não tem permissão para ver em uma associação ao grupo.
- O usuário não pode recuperar as informações necessárias do papel.
Para saber quais informações estavam faltando, consulte as informações de erro após o estado de acesso relatado.
UNKNOWN_CONDITIONAL
: há uma vinculação de papel condicional na política de permissão que está sendo testada. O Simulador de política não é compatível com condições, por isso a vinculação não foi avaliada.
Se o resultado for desconhecido, o campo da política de permissão (baseline
ou simulated
)
conterá um campo errors
que descreve por que as informações eram desconhecidas, e um campo policies
que lista as políticas de permissão associadas aos
erros. Para mais informações sobre erros, consulte Erros nesta página.
REST
Na API REST, os resultados da simulação informarão o motivo pelo qual o resultado é desconhecido na diferença de acesso.
O motivo pelo qual o resultado de acesso é desconhecido será um dos seguintes:
UNKNOWN_INFO_DENIED
: o usuário não tem permissão para acessar as informações necessárias para avaliar o estado de acesso. Isso pode acontecer por um dos seguintes motivos:- O usuário não tem permissão para recuperar a política de permissão que está sendo simulada ou não tem permissão para recuperar políticas de permissão para recursos nos registros de acesso.
- O usuário não tem permissão para ver em uma associação ao grupo.
- O usuário não pode recuperar as informações necessárias do papel.
Para saber quais informações estavam faltando, consulte as informações de erro após o estado de acesso relatado.
UNKNOWN_CONDITIONAL
: há uma vinculação de papel condicional na política de permissão que está sendo testada. O Simulador de política não é compatível com condições, por isso a vinculação não foi avaliada.
Se o resultado for desconhecido, o campo da política de permissão (baseline
ou simulated
)
conterá um campo errors
que descreve por que as informações eram desconhecidas, e um campo policies
que lista as políticas de permissão associadas aos
erros. Para mais informações sobre erros, consulte Erros nesta página.
Erros
O Simulador de políticas também informa todos os erros que ocorreram durante a simulação. É importante analisar esses erros para entender as possíveis lacunas na simulação.
Console
Há vários tipos de erros que o simulador de políticas pode informar:
Erros de operação: não foi possível executar a simulação. O Simulador de política informa erros de operação na parte superior da página de resultados.
Se a mensagem de erro informar que a simulação não foi executada porque há muitos registros no projeto ou na organização, não será possível executar uma simulação no recurso.
Se você vir esse erro por outro motivo, tente executar a simulação novamente. Se você ainda não conseguir executar a simulação, entre em contato com policy-simulator-feedback@google.com.
Erros de repetição: a repetição de uma única tentativa de acesso não foi bem-sucedida. Por isso, o Simulador de política não conseguiu determinar se o resultado da tentativa de acesso seria alterado na política de permissão proposta.
O console do Google Cloud lista os erros de reprodução na tabela Alterações de acesso nos últimos 90 dias. O painel Detalhes da alteração de acesso de cada erro inclui uma mensagem de erro para ajudar você a entender o problema, além do recurso e da permissão que estavam sendo simulados quando o erro ocorreu.
Erros de tipo de recurso incompatível: a política de permissão proposta afeta as permissões associadas a um tipo de recurso incompatível, que o Simulador de política não pode simular.
O simulador de políticas lista essas permissões nos resultados da simulação para que você saiba quais permissões não foi possível simular.
gcloud
Nos resultados da simulação da CLI gcloud, os erros podem aparecer em dois locais:
- No campo
replayResult.error
: se a tentativa de reprodução não for bem-sucedida, o Simulador de política informará o erro no camporeplayResult.error
. Se um resultado de reprodução contiver esse campo, ele não conterá um campodiff
. - No campo
replayResult.diff.accessDiff.policy-type.errors
, em que policy-type ébaseline
ousimulated
. Se a tentativa de reprodução foi bem-sucedida, mas o resultado foiUNKNOWN_INFO_DENIED
ouUNKNOWN_CONDITIONAL
, o Simulador de política informará o motivo pelo qual o resultado foi desconhecido nesse campo.
O Simulador de política gera estes tipos de erros:
Erro | Código do erro | Detalhes |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | Ocorreu uma falha na simulação devido a um erro interno. Para resolver isso, tente executar a simulação novamente. Se mesmo assim a simulação falhar, entre em contato com policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | O Simulador de política não conseguiu reproduzir a tentativa de acesso porque continha uma permissão, um nome de recurso ou um principal inválidos. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | O Simulador de política não
conseguiu avaliar a associação do principal ao grupo porque ele tem
muitos subgrupos. Esse erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | O Simulador de política
não conseguiu avaliar o acesso do usuário porque o autor da chamada não tem permissão
para visualizar a associação ao grupo. Esse erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | O Simulador de política
não conseguiu avaliar o acesso de um usuário porque o autor da chamada não tem permissão
para recuperar uma política de permissão. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | O Simulador de política
não conseguiu avaliar o acesso de um usuário porque o autor da chamada não tem permissão
para recuperar as permissões em um papel do IAM. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | O Simulador de política
não conseguiu avaliar o acesso de um usuário porque o autor da chamada não tem permissão
para recuperar a política de permissão de um recurso ancestral. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
UNIMPLEMENTED_MEMBER_TYPE |
12 | A tupla de acesso contém um tipo de participante que não é compatível com o Simulador de política. |
UNIMPLEMENTED_MEMBER |
12 | A tupla de acesso contém um participante que não é compatível com o Simulador de política. |
UNIMPLEMENTED_CONDITION |
12 | A tupla de acesso contém uma condição, que não é compatível com o
Simulador de política. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_CONDITIONAL . |
LOG_SIZE_TOO_LARGE |
8 | O recurso está associado a muitos registros de acesso, por isso o Simulador de política não conseguiu executar a simulação. Consulte Tamanho máximo da reprodução de registro na página de conceitos do Simulador de política para mais detalhes. |
UNSUPPORTED_RESOURCE |
12 |
A política de permissão proposta altera as permissões associadas a
tipos de recursos incompatíveis. Esse erro aparece no
campo "error": { "code": 12, "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ], "message": "unsupported-permissions-error-message" } Para mais informações sobre tipos de recursos não compatíveis, consulte Níveis de compatibilidade para tipos de recursos na página de conceitos do Simulador de política. |
REST
Nos resultados da simulação da API REST, os erros podem aparecer em dois lugares:
- No campo
replayResult.error
: se a tentativa de reprodução não for bem-sucedida, o Simulador de política informará o erro no camporeplayResult.error
. Se um resultado de reprodução contiver esse campo, ele não conterá um campodiff
. - No campo
replayResult.diff.accessDiff.policy-type.errors
, em que policy-type ébaseline
ousimulated
. Se a tentativa de reprodução foi bem-sucedida, mas o resultado foiUNKNOWN_INFO_DENIED
ouUNKNOWN_CONDITIONAL
, o Simulador de política informará o motivo pelo qual o resultado foi desconhecido nesse campo.
O Simulador de política gera estes tipos de erros:
Erro | Código do erro | Detalhes |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | Ocorreu uma falha na simulação devido a um erro interno. Para resolver isso, tente executar a simulação novamente. Se mesmo assim a simulação falhar, entre em contato com policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | O Simulador de política não conseguiu reproduzir a tentativa de acesso porque continha uma permissão, um nome de recurso ou um principal inválidos. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | O Simulador de política não
conseguiu avaliar a associação do principal ao grupo porque ele tem
muitos subgrupos. Esse erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | O Simulador de política
não conseguiu avaliar o acesso do usuário porque o autor da chamada não tem permissão
para visualizar a associação ao grupo. Esse erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | O Simulador de política
não conseguiu avaliar o acesso de um usuário porque o autor da chamada não tem permissão
para recuperar uma política de permissão. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | O Simulador de política
não conseguiu avaliar o acesso de um usuário porque o autor da chamada não tem permissão
para recuperar as permissões em um papel do IAM. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | O Simulador de política
não conseguiu avaliar o acesso de um usuário porque o autor da chamada não tem permissão
para recuperar a política de permissão de um recurso ancestral. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_INFO_DENIED . |
UNIMPLEMENTED_MEMBER_TYPE |
12 | A tupla de acesso contém um tipo de participante que não é compatível com o Simulador de política. |
UNIMPLEMENTED_MEMBER |
12 | A tupla de acesso contém um participante que não é compatível com o Simulador de política. |
UNIMPLEMENTED_CONDITION |
12 | A tupla de acesso contém uma condição, que não é compatível com o
Simulador de política. Esse tipo de erro está associado a
alterações de acesso UNKNOWN_CONDITIONAL . |
LOG_SIZE_TOO_LARGE |
8 | O recurso está associado a muitos registros de acesso, por isso o Simulador de política não conseguiu executar a simulação. Consulte Tamanho máximo da reprodução de registro na página de conceitos do Simulador de política para mais detalhes. |
UNSUPPORTED_RESOURCE |
12 |
A política de permissão proposta altera as permissões associadas a
tipos de recursos incompatíveis. Esse erro aparece no
campo "error": { "code": 12, "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ], "message": "unsupported-permissions-error-message" } Para mais informações sobre tipos de recursos não compatíveis, consulte Níveis de compatibilidade para tipos de recursos na página de conceitos do Simulador de política. |
Aplicar uma alteração de política simulada
Para aplicar uma alteração simulada a uma política de permissão, siga estas etapas:
Console
Clique em Aplicar alterações propostas.
Na caixa de diálogo de confirmação, clique em Aplicar para confirmar a alteração.
gcloud
Use o comando
set-iam-policy
e forneça um caminho para o arquivo JSON que contém a política de permissão simulada
que você quer aplicar:
gcloud resource-type set-iam-policy resource-id filepath
Forneça os valores a seguir:
resource-type
: o tipo de recurso cuja política de permissão você quer atualizar. Por exemplo,projects
.resource-id
: o ID do recurso cuja política de permissão você quer atualizar. Por exemplo,my-project
.filepath
: o caminho para um arquivo que contém a política de permissão atualizada.
A resposta contém a política de permissão atualizada. Se você tratar as políticas de permissão do IAM como código e armazená-las em um sistema de controle de versões, armazene a política de permissão que a CLI gcloud retorna, não o arquivo JSON que contém a política de permissão simulada.
REST
Defina a política de permissão proposta como a nova política de permissão do recurso.
Para definir a política de permissão na solicitação como a nova política do projeto, use o método
projects.setIamPolicy
da API Resource Manager.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Corpo JSON da solicitação:
{ "policy": { POLICY } }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Salvar resultados da simulação
Se você estiver usando a CLI gcloud, poderá salvar os resultados do Simulador de política como arquivos JSON, YAML ou CSV.
Salvar como JSON ou YAML
Para salvar os resultados de uma simulação como arquivo JSON ou YAML, adicione a seguinte sinalização
ao comando replay-recent-access
ao executar a simulação:
--output=output-format > filename
Substitua os seguintes valores:
output-format
: o idioma do arquivo exportado,json
ouyaml
.filename
: um nome para o arquivo exportado.
Salvar como CSV
Para salvar como um arquivo CSV, adicione a seguinte sinalização ao comando
replay-recent-access
ao executar a simulação:
--flatten="diffs[]" --format=csv(output-fields) > filename
Substitua os seguintes valores:
output-fields
: uma lista separada por vírgulas dos campos que você quer incluir nos resultados exportados. Por exemplo,diffs.accessTuple.principal, diffs.accessTuple.permission
.filename
: um nome para o arquivo exportado.
Opcionalmente, é possível adicionar outros campos, como errors[]
, à
sinalização --flatten
. Adicionar campos à sinalização --flatten
permite que os
elementos nesses campos sejam listados em linhas separadas no arquivo CSV.
Veja a seguir um exemplo de um comando replay-recent-access
que salva
os campos mais importantes dos resultados da simulação como o arquivo CSV
simulation-results.csv
:
gcloud iam simulator replay-recent-access --flatten="diffs[]" \ --format="csv(diffs.accessTuple.principal, diffs.accessTuple.permission, \ diffs.accessTuple.fullResourceName, diffs.diff.accessDiff.accessChange, \ diffs.diff.accessDiff.baseline.accessState, \ diffs.diff.accessDiff.simulated.accessState)" \ //cloudresourcemanager.googleapis.com/projects/my-project \ proposed-policy.json > simulation-results.csv
Este exemplo simula proposed-policy.json
para o projeto my-project
e
salva os resultados como simulation-results.csv
. Esse arquivo CSV contém os
seguintes campos: principal, permissão, recurso, alteração de acesso, estado de acesso de
referência e estado de acesso simulado.
Para mais informações sobre como formatar com a CLI gcloud consulte formatos.
A seguir
- Saiba como solucionar problemas de acesso para participantes atuais.
- Saiba mais sobre como aplicar o menor privilégio às recomendações de papel.