Esta página descreve como simular uma alteração a uma política de autorização do IAM através do Simulador de políticas. Também explica como interpretar os resultados da simulação e como aplicar a política de permissão simulada, se optar por fazê-lo.
Esta funcionalidade apenas avalia o acesso com base nas políticas de autorização.
Para saber como simular alterações a outros tipos de políticas, consulte o seguinte:
- Teste alterações à política de recusa com o Simulador de políticas
- Teste as alterações à política da organização com o simulador de políticas
- Teste as alterações à política de limite de acesso do principal com o Simulador de políticas
Antes de começar
-
Enable the Policy Simulator and Resource Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Opcional: saiba como funciona o simulador de políticas para políticas de autorização.
Autorizações necessárias
Antes de simular uma alteração a uma política de autorização, tem de se certificar de que tem as autorizações adequadas. São necessárias determinadas autorizações para executar uma simulação. Outras não são necessárias, mas ajudam a obter os resultados mais completos da simulação.
Para saber mais sobre as funções do Identity and Access Management (IAM), consulte o artigo Compreender as funções.
Autorizações de recursos de destino necessárias
O recurso de destino da simulação é o recurso cujas políticas de permissão está a simular.
Para receber as autorizações de que precisa para executar uma simulação, peça ao seu administrador que lhe conceda as seguintes funções de IAM no recurso de destino:
-
Cloud Asset Viewer (
roles/cloudasset.viewer
) -
Administrador do simulador (
roles/policysimulator.admin
) -
Revisor de segurança (
roles/iam.securityReviewer
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Estas funções predefinidas contêm as autorizações necessárias para executar uma simulação. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para executar uma simulação:
-
cloudasset.assets.searchAllResources
-
policysimulator.replays.run
-
service.resource.getIamPolicy
, onderesource
é o tipo de recurso do recurso de destino eservice
é o nome do serviço Google Cloud que detém esse recurso.
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Autorizações de recursos de anfitrião necessárias
O recurso anfitrião de uma simulação é o projeto, a pasta ou a organização que cria e executa a simulação. O recurso anfitrião não tem de estar relacionado com o recurso de destino de forma alguma.
A forma como define o recurso anfitrião depende da plataforma que está a usar.
Consola
O recurso anfitrião é o projeto, a pasta ou a organização que aparece no seletor de recursos.
Para alterar o recurso anfitrião, escolha um projeto, uma pasta ou uma organização diferente no seletor de recursos.
gcloud
O recurso anfitrião é o projeto de quota atual. Para definir o projeto de quota,
use o comando
gcloud auth application-default set-quota-project
.
REST
Especifica manualmente o recurso de anfitrião sempre que envia um pedido. Consulte a secção Simular uma alteração de política nesta página para ver detalhes.
Para receber as autorizações de que
precisa para executar uma simulação,
peça ao seu administrador para lhe conceder a
função de IAM administrador do simulador (roles/policysimulator.admin
)
no recurso anfitrião.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém as autorizações necessárias para executar uma simulação. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para executar uma simulação:
-
policysimulator.replayResults.list
-
policysimulator.replays.create
-
policysimulator.replays.get
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Autorizações recomendadas
Para obter os resultados mais completos de uma simulação, recomendamos que tenha determinadas autorizações da IAM e do Google Workspace. Se não tiver algumas ou todas estas autorizações, ainda pode executar uma simulação. No entanto, a execução de uma simulação sem estas autorizações pode resultar num aumento do número de alterações de acesso desconhecidas, porque pode não conseguir obter informações que possam afetar os resultados da simulação.
Autorizações de IAM recomendadas
Recomendamos que tenha a função de revisor de segurança (roles/iam.securityReviewer
) para a sua organização quando executar uma simulação.
Em alternativa, se já tiver a função de administrador de segurança (roles/iam.securityAdmin
), não lhe têm de ser concedidas funções adicionais.
Estas funções concedem-lhe as seguintes autorizações, que ajudam a obter os resultados mais completos da simulação:
iam.roles.get
eiam.roles.list
em quaisquer projetos, pastas ou organizações relevantes onde as funções personalizadas estejam definidas. Um projeto, uma pasta ou uma organização é relevante se for um antepassado ou um descendente do recurso cuja política de autorização está a simular.service.resource.getIamPolicy
, onderesource
é o nome de um tipo de recurso que pode ter uma política de permissão eservice
é o nome do serviçoGoogle Cloud que detém esse recurso.Quando executa uma simulação, recomendamos que tenha esta autorização em cada recurso que se enquadre nestes critérios:
- O simulador de políticas suporta o recurso.
O recurso tem uma política de permissão que pode afetar o acesso do utilizador. Isto é verdade se uma das seguintes situações se aplicar:
- O recurso é um descendente do recurso cuja política de autorização está a simular e aparece nos registos de acesso relevantes.
- O recurso é um antepassado do recurso cuja política de autorização está a simular.
Por exemplo, imagine que quer simular uma política de permissão para um projeto. Se os registos de acesso incluírem uma tentativa de acesso a um contentor do Cloud Storage no projeto, precisa da autorização
storage.buckets.getIamPolicy
nesse contentor. Se o projeto tiver uma pasta principal com uma política de permissão, também precisa da autorizaçãoresourcemanager.folders.getIamPolicy
nessa pasta.
Autorizações recomendadas do Google Workspace
Recomendamos que tenha autorização para obter informações de associação a grupos para cada grupo Google na política de permissão original e na política de permissão proposta.
Normalmente, os superadministradores e os administradores de grupos do Google Workspace têm acesso para ver a associação a grupos. Se não for um superadministrador ou um administrador de grupo, peça ao seu administrador do Google Workspace para criar uma função de administrador do Google Workspace personalizada que contenha o privilégio groups.read
(localizado em Privilégios da API Admin) e conceda-o a si. Isto permite-lhe ver a associação de todos os grupos no seu domínio e simular de forma mais eficaz as alterações a uma política de permissão.
Simule uma alteração de política
Simule uma alteração a uma política de permissão seguindo estes passos.
Consola
O exemplo seguinte demonstra como simular uma alteração a uma política de autorização para um projeto. No entanto, pode simular uma alteração a uma política de autorização para qualquer recurso que tenha uma política de autorização.
Edite as autorizações de um principal e, em vez de clicar em Guardar, clique em Testar alterações:
Na Google Cloud consola, aceda à página IAM.
Crie uma alteração proposta à política de autorização editando as autorizações de um principal existente:
- Localize o principal cujo acesso quer editar e clique no botão Editar à direita.
- Edite o acesso do principal adicionando uma nova função ou revogando ou alterando uma função existente.
Para simular a alteração proposta, clique em Testar alterações.
Após alguns minutos, a Google Cloud consola apresenta os resultados da simulação como uma lista de alterações de acesso. Consulte a secção Compreender os resultados do Simulador de políticas nesta página para mais informações.
Se não tiver havido alterações no acesso entre a política de autorização existente e a política de autorização simulada, a consola não apresenta alterações de acesso. Google Cloud
gcloud
Para simular uma alteração a uma política de permissão, siga o padrão ler-modificar-escrever, mas simule a política de permissão em vez de a escrever.
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 quer simular uma política de permissão. Por exemplo,projects
.resource-id
: o ID do recurso cuja política de autorização quer simular. Por exemplo,my-project
.format
: o formato da resposta. Use o valorjson
ouyaml
.filepath
: o caminho para um novo ficheiro de saída para a política de permissão.
Por exemplo, o comando seguinte obtém a política de permissão para o projeto
my-project
no formato JSON e guarda-a no diretório principal do utilizador:gcloud projects get-iam-policy my-project --format=json > ~/policy.json
Modifique a política de autorização JSON ou YAML devolvida pelo comando
get-iam-policy
para refletir as alterações que quer simular.Existem vários tipos de alterações que pode fazer à política de autorização. Por exemplo, pode adicionar ou remover um principal de uma associação de funções ou remover uma associação de funções da política de autorização.
Execute o seguinte comando para simular a alteração à 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 autorização quer simular.O nome de recurso completo é um URI que consiste no nome do serviço e no caminho para o recurso. Por exemplo, se estiver a simular uma política de autorização para um projeto, usaria
//cloudresourcemanager.googleapis.com/projects/project- id
, em queproject-id
é o ID do projeto cuja política de autorização está a simular.Para ver uma lista de formatos de nomes de recursos completos, consulte o artigo Nomes de recursos completos.
filepath
: o caminho para o ficheiro que contém a política de permissão modificada que quer simular. Por exemplo,~/proposed_policy.json
.format
: o formato da resposta. Por exemplo,json
ouyaml
.
Após vários minutos, o comando imprime uma lista de resultados da repetição que explica como o acesso do principal mudaria se a política de autorização proposta fosse aplicada. Estes resultados também indicam os erros que ocorreram durante a simulação, incluindo erros devido a tipos de recursos não suportados.
Consulte o artigo Compreender os resultados do simulador de políticas nesta página para saber como ler os resultados. Para saber como guardar os resultados da simulação em vez de os imprimir, consulte o artigo Guardar resultados da simulação.
Segue-se uma resposta de exemplo para uma simulação de política de permissão que envolve o utilizador
my-user@example.com
. Neste caso, se a alteração proposta fosse aplicada,my-user@example.com
deixaria potencialmente de ter as autorizaçõesresourcemanager.projects.list
eresourcemanager.projects.get
para o projetomy-project
e deixaria certamente de ter a autorizaçã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 houve alterações no acesso entre a política de permissão existente e a política de permissão simulada, o comando imprime
No access changes found in the replay
.
REST
Para simular uma alteração a uma política de permissão, siga o padrão ler-modificar-escrever, mas, em vez de escrever a política de permissão, crie e execute uma simulação.
Leia a política de permissão para o recurso.
Para obter a política de autorização de um projeto, use o método
projects.getIamPolicy
da API Resource Manager.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: O ID do Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, comomy-project
.POLICY_VERSION
: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Corpo JSON do pedido:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "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 devolvida para refletir as alterações que quer simular.
Existem vários tipos de alterações que pode fazer à política de autorização. Por exemplo, pode adicionar ou remover um principal de uma associação de funções ou remover uma associação de funções da política de autorização.
Crie uma simulação ou repita com a política de autorização modificada.
Para criar uma repetição para um projeto, uma pasta ou uma organização, use o método
replays.create
da API Policy Simulator.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
-
HOST_RESOURCE_TYPE
: o tipo de recurso que vai alojar a repetição. Este valor tem de serprojects
,folders
ouorganizations
. HOST_RESOURCE_ID
: o ID do recurso anfitrião, por exemplo,my-project
.-
TARGET_FULL_RESOURCE_NAME
: o nome completo do recurso cuja política quer simular. Este recurso pode ser qualquer recurso que aceite políticas IAM e não tem de estar relacionado com o recurso anfitrião de forma alguma.O nome de recurso completo é um URI que consiste no nome do serviço e no caminho para o recurso. Por exemplo, se estiver a simular uma política para um projeto, usaria
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID
, em quePROJECT_ID
é o ID do projeto cuja política está a simular.Para ver uma lista completa dos formatos de nomes de recursos, consulte a secção Nomes de recursos completos.
-
POLICY
: a política que quer simular. Para ver um exemplo de uma 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 do pedido. PROJECT_ID
: O ID do Google Cloud projeto. Os IDs dos projetos 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 do pedido:
{ "config": { "policyOverlay": { "TARGET_FULL_RESOURCE_NAME" : POLICY } } }
Para enviar o seu pedido, expanda uma destas opções:
A resposta contém o nome de uma operação que representa a sua repetição:
{ "name": "operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8", "metadata": { "type_url": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata" } }
-
Consultar o método
operations.get
até a repetição estar concluída.Para sondar uma operação, recomendamos que invoque repetidamente o método
operations.get
até que a resposta inclua o campo"done": true
e um camponame
com o nome da repetição concluída. Use a retirada exponencial truncada para introduzir um atraso entre cada pedido.Para obter o estado de uma repetição, use o método
operations.get
da API Policy Simulator.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
OPERATION_NAME
: o nome de uma operação de repetição, incluindo o prefixooperations
. Copie este valor do camponame
de uma respostareplays.create
. Por exemplo:operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8
PROJECT_ID
: O ID do Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
GET https://policysimulator.googleapis.com/v1/OPERATION_NAME
Para enviar o seu pedido, expanda uma destas opções:
As operações em curso devolvem uma resposta semelhante à seguinte:
{ "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 devolvem uma resposta semelhante à seguinte:
{ "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 } } } } }
Obtenha os resultados da repetição.
Para obter os resultados de uma repetição, use o método
replays.results.list
da API Policy Simulator.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
-
REPLAY_NAME
: o nome do Replay para o qual quer obter resultados. Copie este valor do camporesponse.replay.name
de uma respostaoperations.get
. Inclua todos os tipos de recursos e prefixos de localização. Por exemplo,"projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b"
-
PAGE_SIZE
: opcional. O número máximo de resultados a devolver deste pedido. Se não for especificado, o servidor determina o número de resultados a devolver. Se o número de resultados for superior ao tamanho da página, a resposta contém um token de paginação que pode usar para obter a página seguinte de resultados. PAGE_TOKEN
: opcional. O token de paginação devolvido numa resposta anterior deste método. Se especificado, a lista de resultados começa onde o pedido anterior terminou.PROJECT_ID
: O ID do Google Cloud projeto. Os IDs dos projetos 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 o seu pedido, expanda uma destas opções:
A resposta contém uma lista de resultados que explicam como o acesso do principal mudaria se a política proposta fosse aplicada. Estes resultados também indicam os erros ocorridos durante a simulação, nomeadamente, os erros devido a tipos de recursos não suportados
Consulte o artigo Compreender os resultados do simulador de políticas nesta página para saber como ler os resultados.
Segue-se uma resposta de exemplo para uma simulação de políticas que envolve o utilizador
my-user@example.com
. Neste caso, se a alteração proposta fosse aplicada,my-user@example.com
potencialmente, deixaria de ter as autorizaçõesresourcemanager.projects.list
eresourcemanager.projects.get
para o projetomy-project
e, certamente, deixaria de ter a autorizaçã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ções no acesso entre a política de autorização existente e a política de autorização simulada, o pedido devolve uma lista vazia (
{}
).-
Compreenda os resultados do Simulador de políticas
O simulador de políticas comunica o impacto de uma alteração proposta a uma política de autorização como uma lista de alterações de acesso. Cada alteração de acesso representa uma tentativa de acesso dos últimos 90 dias que teria um resultado diferente ao abrigo da política de autorização proposta do que ao abrigo da política de autorização atual.
O simulador de políticas também apresenta todos os erros ocorridos durante a simulação, o que ajuda a identificar potenciais lacunas na simulação.
A apresentação destas alterações e erros depende da plataforma que está a usar.
Consola
A página de resultados do Simulador de políticas apresenta os resultados da simulação em várias secções diferentes:
Alterações à política: esta secção apresenta o recurso para o qual está a propor alterações à política de autorização, as funções que está a propor remover e as funções que está a propor adicionar.
Esta secção também contém um botão Ver diferença entre políticas. Se clicar neste botão, pode ver o aspeto da política de autorização do recurso antes e depois das alterações propostas.
Alterações de autorizações: esta secção contém a quantidade de autorizações removidas e adicionadas, que descrevem como as autorizações do principal seriam alteradas se aplicasse as alterações propostas. Estas contagens de autorizações são calculadas comparando as autorizações nas funções atuais do principal com as autorizações nas funções propostas do principal, ignorando as funções herdadas.
Esta secção também contém um botão Ver diferença de autorizações. Se clicar neste botão, pode ver uma comparação lado a lado das autorizações nas funções atuais e propostas do principal.
Alterações de acesso nos últimos 90 dias: esta secção mostra que tentativas de acesso dos últimos 90 dias têm resultados diferentes ao abrigo da política de autorização proposta e da política de autorização atual. Esta secção inclui um resumo das alterações de acesso e uma tabela com resultados mais detalhados.
O resumo das alterações de acesso indica o número de cada tipo de alteração de acesso, o número de erros e resultados desconhecidos, e o número de tentativas de acesso que têm o mesmo resultado ao abrigo da política de autorização proposta e da política de autorização atual. O resumo também mostra quantas autorizações não foi possível simular. Para mais informações, consulte a secção Erros nesta página.
Esta secção também contém uma tabela de alterações de acesso. Esta tabela apresenta cada tentativa de acesso dos últimos 90 dias que tem um resultado diferente ao abrigo da política de autorização proposta e ao abrigo da política de autorização atual. Cada entrada inclui o recurso ao qual o principal estava a tentar aceder, a data do pedido, o principal que fez o pedido, a autorização no pedido e o estado de acesso ao abrigo da política de autorização proposta em comparação com o estado de acesso ao abrigo da política de autorização atual.
Existem vários tipos de alterações de acesso diferentes:
Alteração de acesso Detalhes Acesso revogado O principal tinha acesso ao abrigo da política de permissão atual, mas deixa de ter acesso após a alteração proposta. Acesso potencialmente revogado Este resultado pode ocorrer pelos seguintes motivos:
- O principal tinha acesso ao abrigo da política de permissão atual, mas o respetivo acesso ao abrigo da política de permissão proposta é desconhecido.
- O acesso do principal ao abrigo da política de permissão atual é desconhecido, mas não terá acesso após a alteração proposta.
Acesso concedido O principal não tinha acesso ao abrigo da política de autorização atual, mas vai ter acesso após a alteração proposta. Acesso potencialmente obtido Este resultado pode ocorrer pelos seguintes motivos:
- O diretor não tinha acesso ao abrigo da política de permissão atual, mas o respetivo acesso após a alteração proposta é desconhecido.
- O acesso do principal ao abrigo da política de permissão atual é desconhecido, mas o principal terá acesso após a alteração proposta.
Acesso desconhecido O acesso do principal ao abrigo da política de autorização atual e da política de autorização proposta é desconhecido, e as alterações propostas podem afetar o acesso do principal. Erro Ocorreu um erro durante a simulação. Para ver detalhes adicionais sobre uma alteração de acesso, clique na alteração de acesso. Esta ação abre o painel Detalhes da alteração de acesso, que apresenta informações adicionais sobre a alteração de acesso, incluindo o acesso existente do principal, o acesso proposto do principal e detalhes adicionais sobre o resultado da alteração de acesso.
gcloud
Quando usa o comando replay-recent-access
, a resposta da CLI gcloud contém uma lista de replayResults
.
Cada resultado de repetição descreve uma tentativa de acesso cujo resultado teria sido diferente se a política de autorização proposta estivesse em vigor no momento da tentativa. Por exemplo, o seguinte resultado da repetição mostra que o utilizador
my-user@example.com
usou a autorização resourcemanager.projects.update
no passado para realizar uma ação no projeto my-project
. No entanto, se a política de permissão proposta estivesse em vigor, o acesso teria sido recusado.
{ "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 repetição tem os seguintes campos:
accessTuple
: a tentativa de acesso à qual o resultado se refere. Este campo inclui o recurso, a autorização e o principal envolvidos na tentativa de acesso.lastSeenDate
: a data em que a tentativa de acesso foi feita pela última vez.diff.accessDiff
ouerror
: se a repetição de uma tentativa de acesso for bem-sucedida, o resultado contém um campodiff.accessDiff
que comunica a diferença entre os resultados da tentativa de acesso ao abrigo da política de autorização atual e ao abrigo da política de autorização proposta. Se a tentativa de repetição não for bem-sucedida, o resultado da repetição contém um campoerror
com uma descrição do erro. Para saber mais sobre os erros de simulação, consulte a secção Erros nesta página.
Cada diferença de acesso tem os seguintes componentes:
baseline
: o resultado do acesso quando usa a política de autorização atual. Isto é comunicado 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 apresenta 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 osUNKNOWN
valores, consulte Resultados desconhecidos nesta página.simulated
: o resultado do acesso quando usa a política de autorização proposta. Isto é comunicado 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 apresenta 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 osUNKNOWN
valores, consulte Resultados desconhecidos nesta página.accessChange
: a alteração entre o estado de acesso de base e o estado de acesso simulado. Consulte a tabela seguinte para ver uma lista de valores potenciais:Alteração de acesso Detalhes ACCESS_REVOKED
O principal tinha acesso ao abrigo da política de permissão atual, mas deixa de ter acesso após a alteração proposta. ACCESS_MAYBE_REVOKED
Este resultado pode ocorrer pelos seguintes motivos:
- O principal tinha acesso ao abrigo da política de permissão atual, mas o respetivo acesso ao abrigo da política de permissão proposta é desconhecido.
- O acesso do principal ao abrigo da política de permissão atual é desconhecido, mas não terá acesso após a alteração proposta.
ACCESS_GAINED
O principal não tinha acesso ao abrigo da política de autorização atual, mas vai ter acesso após a alteração proposta. ACCESS_MAYBE_GAINED
Este resultado pode ocorrer pelos seguintes motivos:
- O diretor não tinha acesso ao abrigo da política de permissão atual, mas o respetivo acesso após a alteração proposta é desconhecido.
- O acesso do principal ao abrigo da política de permissão atual é desconhecido, mas o principal terá acesso após a alteração proposta.
UNKNOWN_CHANGE
O acesso do principal ao abrigo da política de autorização atual e da política de autorização proposta é desconhecido, e as alterações propostas podem afetar o acesso do principal.
REST
Quando chama o método replays.results.list
, a resposta contém uma lista de
replayResults
.
Cada resultado de repetição descreve uma tentativa de acesso cujo resultado teria sido diferente se a política de autorização proposta estivesse em vigor no momento da tentativa. Por exemplo, o seguinte resultado da repetição mostra que o utilizador
my-user@example.com
usou a autorização resourcemanager.projects.update
no passado para realizar uma ação no projeto my-project
. No entanto, se a política de permissão proposta estivesse em vigor, o acesso teria sido recusado.
{ "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 repetição tem os seguintes campos:
accessTuple
: a tentativa de acesso à qual o resultado se refere. Este campo inclui o recurso, a autorização e o principal envolvidos na tentativa de acesso.lastSeenDate
: a data em que a tentativa de acesso foi feita pela última vez.diff.accessDiff
ouerror
: se a repetição de uma tentativa de acesso for bem-sucedida, o resultado contém um campodiff.accessDiff
que comunica a diferença entre os resultados da tentativa de acesso ao abrigo da política de autorização atual e ao abrigo da política de autorização proposta. Se a tentativa de repetição não for bem-sucedida, o resultado da repetição contém um campoerror
com uma descrição do erro. Para saber mais sobre os erros de simulação, consulte a secção Erros nesta página.
Cada diferença de acesso tem os seguintes componentes:
baseline
: o resultado do acesso quando usa a política de autorização atual. Isto é comunicado 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 apresenta 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 osUNKNOWN
valores, consulte Resultados desconhecidos nesta página.simulated
: o resultado do acesso quando usa a política de autorização proposta. Isto é comunicado 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 apresenta 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 osUNKNOWN
valores, consulte Resultados desconhecidos nesta página.accessChange
: a alteração entre o estado de acesso de base e o estado de acesso simulado. Consulte a tabela seguinte para ver uma lista de valores potenciais:Alteração de acesso Detalhes ACCESS_REVOKED
O principal tinha acesso ao abrigo da política de permissão atual, mas deixa de ter acesso após a alteração proposta. ACCESS_MAYBE_REVOKED
Este resultado pode ocorrer pelos seguintes motivos:
- O principal tinha acesso ao abrigo da política de permissão atual, mas o respetivo acesso ao abrigo da política de permissão proposta é desconhecido.
- O acesso do principal ao abrigo da política de permissão atual é desconhecido, mas não terá acesso após a alteração proposta.
ACCESS_GAINED
O principal não tinha acesso ao abrigo da política de autorização atual, mas vai ter acesso após a alteração proposta. ACCESS_MAYBE_GAINED
Este resultado pode ocorrer pelos seguintes motivos:
- O diretor não tinha acesso ao abrigo da política de permissão atual, mas o respetivo acesso após a alteração proposta é desconhecido.
- O acesso do principal ao abrigo da política de permissão atual é desconhecido, mas o principal terá acesso após a alteração proposta.
UNKNOWN_CHANGE
O acesso do principal ao abrigo da política de autorização atual e da política de autorização proposta é desconhecido, e as alterações propostas podem afetar o acesso do principal.
Resultados desconhecidos
Se um resultado de acesso for desconhecido, significa que o Simulador de políticas não tinha informações suficientes para avaliar totalmente a tentativa de acesso.
Consola
Se um resultado de acesso for desconhecido, o painel de detalhes da alteração de acesso comunica o motivo pelo qual era desconhecido, além das funções específicas, das políticas de autorização, das associações a grupos e das condições às quais não conseguiu aceder nem avaliar.
Existem vários motivos pelos quais um resultado pode ser desconhecido:
- Informações de funções recusadas: o principal que executa a simulação não tinha autorização para ver os detalhes das funções de uma ou mais das funções que estão a ser simuladas.
- Não é possível aceder à política: o principal que executa a simulação não tem autorização para obter a política de autorização para um ou mais dos recursos envolvidos na simulação.
- Membership info denied: o principal que executa a simulação não tinha permissão para ver os membros de um ou mais dos grupos incluídos na política de autorização proposta.
- Condição não suportada: existe uma associação de função condicional na política de permissão que está a ser testada. O simulador de políticas não suporta condições, pelo que não foi possível avaliar a associação.
gcloud
Na CLI gcloud, os resultados da simulação indicam o motivo pelo qual o resultado é desconhecido na diferença de acesso.
O motivo pelo qual o resultado do acesso é desconhecido é um dos seguintes:
UNKNOWN_INFO_DENIED
: o utilizador não tem autorização para aceder às informações necessárias para avaliar o estado de acesso. Isto pode acontecer por qualquer um dos seguintes motivos:- O utilizador não tem autorização para obter a política de permissão que está a ser simulada ou não tem autorização para obter políticas de permissão para recursos nos registos de acesso.
- O utilizador não tem autorização para ver a associação a um grupo.
- O utilizador não consegue aceder às informações de função necessárias.
Para saber que informações estavam em falta, consulte as informações de erro após o estado de acesso comunicado.
UNKNOWN_CONDITIONAL
: existe uma associação de funções condicional na política de autorização que está a ser testada. O simulador de políticas não suporta condições, pelo que não foi possível avaliar a associação.
Se o resultado for desconhecido, o campo da política de autorização (baseline
ou simulated
) contém um campo errors
que descreve o motivo pelo qual as informações eram desconhecidas e um campo policies
que indica as políticas de autorização associadas aos erros. Para mais informações sobre erros, consulte a secção Erros nesta página.
REST
Na API REST, os resultados da simulação indicam o motivo pelo qual o resultado é desconhecido na diferença de acesso.
O motivo pelo qual o resultado do acesso é desconhecido é um dos seguintes:
UNKNOWN_INFO_DENIED
: o utilizador não tem autorização para aceder às informações necessárias para avaliar o estado de acesso. Isto pode acontecer por qualquer um dos seguintes motivos:- O utilizador não tem autorização para obter a política de permissão que está a ser simulada ou não tem autorização para obter políticas de permissão para recursos nos registos de acesso.
- O utilizador não tem autorização para ver a associação a um grupo.
- O utilizador não consegue aceder às informações de função necessárias.
Para saber que informações estavam em falta, consulte as informações de erro após o estado de acesso comunicado.
UNKNOWN_CONDITIONAL
: existe uma associação de funções condicional na política de autorização que está a ser testada. O simulador de políticas não suporta condições, pelo que não foi possível avaliar a associação.
Se o resultado for desconhecido, o campo da política de autorização (baseline
ou simulated
) contém um campo errors
que descreve o motivo pelo qual as informações eram desconhecidas e um campo policies
que indica as políticas de autorização associadas aos erros. Para mais informações sobre erros, consulte a secção Erros nesta página.
Erros
O Simulador de políticas também comunica quaisquer erros que tenham ocorrido durante a simulação. É importante rever estes erros para compreender as potenciais lacunas na simulação.
Consola
Existem vários tipos de erros que o Simulador de políticas pode comunicar:
Erros de operação: não foi possível executar a simulação. O Simulador de políticas comunica erros de operação na parte superior da página de resultados.
Se a mensagem de erro indicar que não foi possível executar a simulação porque existem demasiados registos no seu projeto ou organização, não pode executar uma simulação no recurso.
Se receber este erro por outro motivo, experimente executar a simulação novamente. Se continuar a não conseguir executar a simulação, contacte policy-simulator-feedback@google.com.
Erros de repetição: uma repetição de uma única tentativa de acesso não foi bem-sucedida, pelo que o simulador de políticas não conseguiu determinar se o resultado da tentativa de acesso mudaria ao abrigo da política de autorização proposta.
A Google Cloud consola apresenta os erros de repetição na tabela Alterações de acesso nos últimos 90 dias. O painel Detalhes da alteração de acesso para cada erro inclui uma mensagem de erro para ajudar a compreender o problema, bem como o recurso e a autorização que estavam a ser simulados quando o erro ocorreu.
Erros de tipo de recurso não suportado: a política de autorização proposta afeta as autorizações associadas a um tipo de recurso não suportado, que o Simulador de políticas não consegue simular.
O Simulador de políticas apresenta estas autorizações nos resultados da simulação para que saiba que autorizações não foi possível simular.
gcloud
Nos resultados da simulação da CLI gcloud, os erros podem aparecer em dois locais:
- O campo
replayResult.error
: se a tentativa de repetição não tiver sido bem-sucedida, o Simulador de políticas comunica o erro no camporeplayResult.error
. Se um resultado de repetição contiver este campo, não contém um campodiff
. - O campo
replayResult.diff.accessDiff.policy-type.errors
, em que policy-type ébaseline
ousimulated
. Se a tentativa de repetição tiver sido bem-sucedida, mas o resultado tiver sidoUNKNOWN_INFO_DENIED
ouUNKNOWN_CONDITIONAL
, o simulador de políticas comunica o motivo pelo qual o resultado foi desconhecido neste campo.
O Simulador de políticas gera os seguintes tipos de erros:
Erro | Código de erro | Detalhes |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | A simulação falhou devido a um erro interno. Para resolver o problema, experimente executar a simulação novamente. Se a simulação continuar a falhar, contacte policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | O Simulador de políticas não conseguiu repetir a tentativa de acesso porque continha uma autorização, um nome de recurso ou um principal inválido. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | O simulador de políticas não conseguiu avaliar a associação do principal ao grupo porque o grupo tem demasiados subgrupos. Este erro está associado a alterações de acesso ao
UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para ver a associação ao grupo. Este erro está associado a alterações de acesso ao
UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para obter uma política de permissão. Este tipo de erro está associado a alterações de acesso.UNKNOWN_INFO_DENIED |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para obter as autorizações numa função do IAM. Este tipo de erro está associado a alterações de acesso.UNKNOWN_INFO_DENIED |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para obter a política de autorização de um recurso principal. Este tipo de erro está
associado a UNKNOWN_INFO_DENIED alterações de acesso. |
UNIMPLEMENTED_MEMBER_TYPE |
12 | A tupla de acesso contém um tipo de principal que o Simulador de políticas não suporta. |
UNIMPLEMENTED_MEMBER |
12 | A tupla de acesso contém um principal que o Simulador de políticas não suporta. |
UNIMPLEMENTED_CONDITION |
12 | A tupla de acesso contém uma condição que o simulador de políticas não suporta. Este tipo de erro está associado a alterações de acesso.UNKNOWN_CONDITIONAL |
LOG_SIZE_TOO_LARGE |
8 | O recurso está associado a demasiados registos de acesso, pelo que o simulador de políticas não pôde executar a simulação. Consulte a secção Tamanho máximo da repetição de registos na página de conceitos do Simulador de políticas para ver detalhes. |
UNSUPPORTED_RESOURCE |
12 |
As alterações à política de permissão propostas alteram as autorizações associadas a tipos de recursos não suportados. Este 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 os tipos de recursos não suportados, consulte os Níveis de apoio técnico para tipos de recursos na página de conceitos do Simulador de políticas. |
REST
Nos resultados da simulação da API REST, os erros podem aparecer em dois locais:
- O campo
replayResult.error
: se a tentativa de repetição não tiver sido bem-sucedida, o Simulador de políticas comunica o erro no camporeplayResult.error
. Se um resultado de repetição contiver este campo, não contém um campodiff
. - O campo
replayResult.diff.accessDiff.policy-type.errors
, em que policy-type ébaseline
ousimulated
. Se a tentativa de repetição tiver sido bem-sucedida, mas o resultado tiver sidoUNKNOWN_INFO_DENIED
ouUNKNOWN_CONDITIONAL
, o simulador de políticas comunica o motivo pelo qual o resultado foi desconhecido neste campo.
O Simulador de políticas gera os seguintes tipos de erros:
Erro | Código de erro | Detalhes |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | A simulação falhou devido a um erro interno. Para resolver o problema, experimente executar a simulação novamente. Se a simulação continuar a falhar, contacte policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | O Simulador de políticas não conseguiu repetir a tentativa de acesso porque continha uma autorização, um nome de recurso ou um principal inválido. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | O simulador de políticas não conseguiu avaliar a associação do principal ao grupo porque o grupo tem demasiados subgrupos. Este erro está associado a alterações de acesso ao
UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para ver a associação ao grupo. Este erro está associado a alterações de acesso ao
UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para obter uma política de permissão. Este tipo de erro está associado a alterações de acesso.UNKNOWN_INFO_DENIED |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para obter as autorizações numa função do IAM. Este tipo de erro está associado a alterações de acesso.UNKNOWN_INFO_DENIED |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | O Simulador de políticas não conseguiu avaliar o acesso de um utilizador porque o autor da chamada não tem autorização para obter a política de autorização de um recurso principal. Este tipo de erro está
associado a UNKNOWN_INFO_DENIED alterações de acesso. |
UNIMPLEMENTED_MEMBER_TYPE |
12 | A tupla de acesso contém um tipo de principal que o Simulador de políticas não suporta. |
UNIMPLEMENTED_MEMBER |
12 | A tupla de acesso contém um principal que o Simulador de políticas não suporta. |
UNIMPLEMENTED_CONDITION |
12 | A tupla de acesso contém uma condição que o simulador de políticas não suporta. Este tipo de erro está associado a alterações de acesso.UNKNOWN_CONDITIONAL |
LOG_SIZE_TOO_LARGE |
8 | O recurso está associado a demasiados registos de acesso, pelo que o simulador de políticas não pôde executar a simulação. Consulte a secção Tamanho máximo da repetição de registos na página de conceitos do Simulador de políticas para ver detalhes. |
UNSUPPORTED_RESOURCE |
12 |
As alterações à política de permissão propostas alteram as autorizações associadas a tipos de recursos não suportados. Este 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 os tipos de recursos não suportados, consulte os Níveis de apoio técnico para tipos de recursos na página de conceitos do Simulador de políticas. |
Aplique uma alteração de política simulada
Para aplicar uma alteração simulada a uma política de autorização, siga estes passos:
Consola
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 indique um caminho para o ficheiro JSON que contém a política de autorização simulada que quer aplicar:
gcloud resource-type set-iam-policy resource-id filepath
Indique os seguintes valores:
resource-type
: o tipo de recurso cuja política de autorização quer atualizar. Por exemplo,projects
.resource-id
: o ID do recurso cuja política de autorização quer atualizar. Por exemplo,my-project
.filepath
: o caminho para um ficheiro que contém a política de permissão atualizada.
A resposta contém a política de permissão atualizada. Se tratar as políticas de autorização do IAM como código e as armazenar num sistema de controlo de versões, deve armazenar a política de autorização devolvida pela CLI gcloud e não o ficheiro JSON que contém a política de autorizaçã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 no pedido como a nova política de permissão do projeto, use o método
projects.setIamPolicy
da API Resource Manager.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: O ID do Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, comomy-project
.POLICY
: uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Corpo JSON do pedido:
{ "policy": { POLICY } }
Para enviar o seu pedido, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Guarde os resultados da simulação
Se estiver a usar a CLI gcloud, pode guardar os resultados do Simulador de políticas como ficheiros JSON, YAML ou CSV.
Guarde como JSON ou YAML
Para guardar os resultados de uma simulação como um ficheiro JSON ou YAML, adicione a seguinte flag ao comando replay-recent-access
quando executar a simulação:
--output=output-format > filename
Substitua os seguintes valores:
output-format
: o idioma do ficheiro exportado,json
ouyaml
.filename
: um nome para o ficheiro exportado.
Guardar como CSV
Para guardar um ficheiro CSV, adicione a seguinte flag ao comando replay-recent-access
quando 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 quer incluir nos resultados exportados. Por exemplo,diffs.accessTuple.principal, diffs.accessTuple.permission
.filename
: um nome para o ficheiro exportado.
Opcionalmente, pode adicionar campos adicionais, como errors[]
à flag --flatten
. A adição de campos à flag --flatten
permite que os elementos nesses campos sejam apresentados em linhas separadas no ficheiro CSV.
Segue-se um exemplo de um comando replay-recent-access
que guarda os campos mais importantes dos resultados da simulação como o ficheiro 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
guarda os resultados como simulation-results.csv
. Este ficheiro CSV contém os seguintes campos: principal, autorização, recurso, alteração de acesso, estado de acesso de base e estado de acesso simulado.
Para mais informações sobre a formatação com a CLI gcloud, consulte os formatos.
O que se segue?
- Saiba como resolver problemas de acesso para responsáveis existentes.
- Saiba como aplicar o princípio do menor privilégio com recomendações de funções.