Testar alterações na política da organização com o Simulador de política

Com o Simulador de política da organização, é possível visualizar o impacto de uma nova restrição personalizada ou política da organização que aplica uma restrição personalizada ou gerenciada antes que ela seja aplicada no ambiente de produção. O simulador de política fornece uma lista de recursos que violam a política proposta antes da aplicação dela. Assim, você pode reconfigurar esses recursos, solicitar exceções ou mudar o escopo da política da organização sem interromper os desenvolvedores ou derrubar o ambiente.

Nesta página, descrevemos como testar uma mudança em uma política da organização usando o Simulador de política. Ela também explica como interpretar os resultados da simulação e como aplicar a política da organização testada, se você quiser.

Antes de começar

  • Se você estiver usando a Google Cloud CLI, defina o projeto que quer usar para fazer chamadas de API:

    gcloud config set project PROJECT_ID

    Substitua PROJECT_ID pelo nome ou ID do projeto.

  • Enable the Policy Simulator and Resource Manager APIs.

    Enable the APIs

  • Opcional: confira uma introdução ao serviço de políticas da organização.

Funções exigidas

Para receber as permissões necessárias para executar e acessar simulações, peça ao administrador para conceder a você o papel do IAM de Administrador do simulador de políticas da organização (roles/policysimulator.orgPolicyAdmin) na organização. 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 e acessar simulações. 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 e acessar simulações:

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.get
  • orgpolicy.policies.list
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.listResource
  • cloudasset.assets.listOrgPolicy
  • policysimulator.orgPolicyViolationsPreviews.list
  • policysimulator.orgPolicyViolationsPreviews.get
  • policysimulator.orgPolicyViolationsPreviews.create
  • policysimulator.orgPolicyViolations.list

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Testar uma mudança na política

É possível testar uma mudança em uma restrição personalizada, uma política da organização que aplica uma restrição personalizada ou gerenciada, ou ambas ao mesmo tempo.

Testar uma mudança em uma restrição personalizada

Console

  1. No console Google Cloud , acesse a página Políticas da organização.

    Acessar as políticas da organização

  2. No seletor de organização, selecione o recurso da sua organização.

  3. Escolha uma destas opções:

    • Para testar uma nova restrição personalizada, clique em Restrição personalizada.

    • Para fazer mudanças em uma restrição personalizada, selecione-a na lista da página Políticas da organização e clique em Editar restrição.

  4. Crie ou atualize a restrição personalizada que você quer testar.

    1. Na caixa Nome de exibição, insira um nome legível para a restrição. Esse campo tem um comprimento máximo de 200 caracteres. Não use PII ou dados sensíveis em nomes de exibição, porque eles podem ser expostos em mensagens de erro.

    2. Na caixa ID da restrição, insira o nome que você quer para a nova restrição personalizada. Uma restrição personalizada precisa começar com custom. e só pode incluir letras maiúsculas, minúsculas ou números, por exemplo, custom.disableGkeAutoUpgrade. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo, organizations/123456789/customConstraints/custom.). Não inclua PII ou dados sensíveis no ID da restrição, porque eles podem ser expostos em mensagens de erro.

      O ID da restrição não pode ser alterado depois que uma restrição personalizada é criada.

    3. Na caixa Descrição, insira uma descrição legível a ser exibida como uma mensagem de erro quando a política for violada. Esse campo tem um comprimento máximo de 2000 caracteres. Não inclua PII ou dados sensíveis na descrição, porque eles podem ser expostos em mensagens de erro.

    4. Na caixa Tipo de recurso, selecione o nome do recurso REST Google Cloudque contém o objeto e o campo que você quer restringir. Por exemplo, container.googleapis.com/NodePool. A maioria dos tipos de recursos pode ter um máximo de 20 restrições personalizadas por recurso. Se você tentar criar uma restrição personalizada para um recurso que já tem o número máximo de restrições personalizadas, a operação vai falhar.

    5. Na seção Método de aplicação, selecione se quer aplicar a restrição em um método REST CREATE ou nos métodos CREATE e UPDATE. Nem todos os serviços do Google Cloud aceitam os dois métodos. Para ver os métodos compatíveis para cada serviço, encontre o serviço em Serviços compatíveis.

    6. Para definir uma condição, clique em Editar condição.

    7. No painel Adicionar condição, crie uma condição de CEL que se refira a um recurso de serviço compatível, por exemplo, resource.management.autoUpgrade == false. Esse campo tem um comprimento máximo de 1.000 caracteres. Para detalhes sobre o uso da CEL, consulte Common Expression Language. Para mais informações sobre os recursos de serviço que você pode usar em restrições personalizadas, consulte Serviços compatíveis com restrição personalizada.

    8. Clique em Salvar.

    9. Na seção Ação, selecione se você quer permitir ou negar o método avaliado quando a condição escrita é atendida.

      A ação de negação significa que a operação para criar ou atualizar o recurso será bloqueada se a condição for avaliada como verdadeira.

      A ação de permissão significa que a operação para criar ou atualizar o recurso só é permitida se a condição for avaliada como verdadeira. Todos os outros casos, exceto os listados explicitamente na condição, estão bloqueados.

  5. Clique em Testar restrição.

  6. Se for uma restrição nova, o painel Configurar política da organização vai aparecer. Para definir uma política da organização que aplique a restrição personalizada, faça o seguinte:

    1. Na caixa Selecionar escopo, escolha o recurso em que você quer testar a restrição personalizada.

    2. Clique em Substituir a política dos recursos principais.

    3. Clique em Adicionar uma regra.

    4. Na seção Aplicação, selecione Ativada.

    5. Para tornar a política da organização condicional em uma tag, clique em Adicionar condição. Se você adicionar uma regra condicional a uma política da organização, inclua pelo menos uma regra não condicional. Caso contrário, não será possível salvar a política. Para mais detalhes, consulte Como definir uma política da organização com tags.

    6. Clique em Concluído e em Continuar.

A página Histórico de simulações aparece com uma lista das simulações realizadas por você nos últimos 14 dias. Consulte Resultados do Simulador de política nesta página para mais informações.

gcloud

  1. Para testar a aplicação de uma restrição personalizada nova ou atualizada, crie um arquivo JSON ou YAML que defina a restrição personalizada que você quer testar.

    Se quiser testar mudanças em uma restrição personalizada, use o comando organizations.customConstraints.get da CLI gcloud para recuperar a representação JSON ou YAML atual da restrição personalizada e fazer edições nesse arquivo.

    Um arquivo YAML que define uma restrição personalizada é semelhante a este:

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - RESOURCE_NAME
    methodTypes:
    - METHOD1
    - METHOD2
    condition: "CONDITION"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION
    

    Substitua:

    • ORGANIZATION_ID: o ID da organização, como 123456789.

    • CONSTRAINT_NAME: o nome da sua nova restrição personalizada. Uma restrição personalizada precisa começar com custom. e só pode incluir letras maiúsculas, minúsculas ou números, por exemplo, custom.disableGkeAutoUpgrade. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo, organizations/123456789/customConstraints/custom.).

    • RESOURCE_NAME: o nome totalmente qualificado do recurso RESTGoogle Cloud que contém o objeto e o campo que você quer restringir. Por exemplo, container.googleapis.com/NodePool. A maioria dos tipos de recursos pode ter no máximo 20 restrições personalizadas por recurso. Se você tentar criar uma restrição personalizada para um recurso que já tem o número máximo de restrições personalizadas, a operação vai falhar. Para mais informações sobre os recursos de serviço que você pode usar nas restrições personalizadas, consulte Serviços compatíveis com restrição personalizada.

    • METHOD1,METHOD2: uma lista de métodos "RESTful" para aplicar a restrição. Pode ser CREATE ou CREATE e UPDATE. Nem todos os serviços do Google Cloud aceitam os dois métodos. Para ver os métodos compatíveis para cada serviço, encontre o serviço em Serviços compatíveis.

    • CONDITION: uma condição CEL que se refere a um recurso de serviço compatível, por exemplo, "resource.management.autoUpgrade == false". Esse campo tem um comprimento máximo de 1.000 caracteres. Para detalhes sobre o uso da CEL, consulte Common Expression Language.

    • ACTION: a ação a ser realizada se o condition for atendido. Pode ser ALLOW ou DENY.

      • A ação de negação significa que, se a condição for avaliada como verdadeira, a operação para criar ou atualizar o recurso será bloqueada.

      • A ação de permissão significa que, se a condição for avaliada como verdadeira, a operação para criar ou atualizar o recurso será permitida. Isso também significa que todos os outros casos, exceto o listado explicitamente na condição, estão bloqueados.

    • DISPLAY_NAME: um nome legível para a restrição. Esse campo tem um comprimento máximo de 200 caracteres.

    • DESCRIPTION: uma descrição legível da restrição a ser exibida como uma mensagem de erro quando a política for violada. Esse campo tem um comprimento máximo de 2.000 caracteres. Para mais informações sobre como criar restrições personalizadas, consulte Como criar e gerenciar restrições personalizadas.

  2. Crie ou modifique uma política da organização que aplique a restrição personalizada.

    • Para testar a aplicação de uma restrição personalizada nova ou atualizada, crie um arquivo JSON ou YAML que defina a política da organização que você quer testar:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
      

      Substitua:

      • ORGANIZATION_ID pelo ID da organização, como 1234567890123.

      • CONSTRAINT_NAME com o nome da restrição personalizada que você quer testar. Por exemplo, custom.EnforceGKEBinaryAuthz.

    • Para testar a aplicação condicional de uma restrição personalizada com base na existência de uma tag específica, crie um arquivo JSON ou YAML que defina a política da organização:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - condition:
            expression: CONDITION
          enforce: false
        - enforce: true
      

      Substitua:

      • ORGANIZATION_ID pelo ID da organização, como 1234567890123.

      • CONSTRAINT_NAME com o nome da restrição personalizada que você quer testar. Por exemplo, custom.EnforceGKEBinaryAuthz.

      • CONDITION com uma condição CEL que se refere a um recurso de serviço compatível, por exemplo, "resource.matchTag('env', 'dev')".

      Para mais informações sobre políticas condicionais da organização, consulte Como definir uma política da organização com tags.

    • Para testar a exclusão de uma política da organização que aplica uma restrição personalizada, crie um arquivo JSON ou YAML que defina a política da organização sem regras definidas, exceto a herança da política do recurso pai:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        inheritFromParent: true
      

      Substitua:

      • ORGANIZATION_ID pelo ID da organização, como 1234567890123.

      • CONSTRAINT_NAME com o nome da restrição personalizada que você quer testar. Por exemplo, custom.EnforceGKEBinaryAuthz.

  3. Para simular a mudança em uma restrição personalizada, uma política da organização ou ambas, execute o comando policy-intelligence simulate orgpolicy:

    gcloud policy-intelligence simulate orgpolicy \
      --organization=ORGANIZATION_ID \
      --custom-constraints=CONSTRAINT_PATH \
      --policies=POLICY_PATH
    

    Substitua:

    • ORGANIZATION_ID: o ID da organização, como 1234567890123. Não é possível simular mudanças em várias organizações.

    • CONSTRAINT_PATH: o caminho completo para a restrição personalizada que você criou ou atualizou. Por exemplo, tmp/constraint.yaml. Se você definir a flag --policies, não precisará definir a flag --custom-constraints.

    • POLICY_PATH: o caminho completo para a política da organização que você criou ou atualizou. Por exemplo, tmp/policy.yaml. Se você definir a flag --custom-constraints, não será necessário definir a flag --policies.

Após alguns minutos, o comando imprime uma lista de recursos que violariam as mudanças na restrição personalizada, na política da organização ou em ambas.

Os resultados também podem ser visualizados na página Histórico de simulações do console do Google Cloud . Consulte Resultados do Simulador de política nesta página para saber como ler os resultados.

Confira a seguir um exemplo de resposta para uma simulação de política da organização. Essa simulação envolve uma restrição personalizada que limita a criação de recursos de cluster do Google Kubernetes Engine em que a autorização binária não está ativada. Nesse caso, se a mudança proposta fosse aplicada, dois recursos de cluster violariam a política: orgpolicy-test-cluster no projeto simulator-test-project e autopilot-cluster-1 no projeto orgpolicy-test-0.

Waiting for operation [organizations/012345678901/locations/global/orgPolic
yViolationsPreviews/85be9a2d-8c49-470d-a65a-d0cb9ffa8f83/operations/1883a83
c-c448-42e5-a7c5-10a850928f06] to complete...done.
---
customConstraint:
  actionType: ALLOW
  condition: resource.binaryAuthorization.enabled == true
  methodTypes:
  - CREATE
  name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
  resourceTypes:
  - container.googleapis.com/Cluster
name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/b9fd23a5-7163-46de-9fec-7b9aa6af1113
resource:
  ancestors:
  - organizations/012345678901
  - projects/456789012345
  assetType: container.googleapis.com/Cluster
  resource: //container.googleapis.com/projects/simulator-test-project/locations/us-central1/clusters/orgpolicy-test-cluster
---
customConstraint:
  actionType: ALLOW
  condition: resource.binaryAuthorization.enabled == true
  methodTypes:
  - CREATE
  name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
  resourceTypes:
  - container.googleapis.com/Cluster
name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/e73896e6-7613-4a8d-8436-5df7a6455121
resource:
  ancestors:
  - organizations/012345678901
  - folders/789012345678
  - projects/456789012345
  assetType: container.googleapis.com/Cluster
  resource: //container.googleapis.com/projects/orgpolicy-test-0/locations/us-central1/clusters/autopilot-cluster-1

Testar uma mudança em uma restrição gerenciada

Console

  1. No console Google Cloud , acesse a página Políticas da organização.

    Acessar as políticas da organização

  2. Clique em **Selecionar projeto e escolha a organização, a pasta ou o recurso de projeto em que você quer editar a política da organização.

  3. Na lista, selecione a restrição gerenciada para a qual você quer atualizar a política da organização. Na página Detalhes da política, você pode conferir a origem dessa política da organização, a avaliação da política efetiva no recurso e mais detalhes sobre a restrição gerenciada.

  4. Para atualizar a política da organização nesse recurso, clique em Gerenciar política.

  5. Na página Editar política, selecione Substituir a política do editor principal.

  6. Clique em Adicionar uma regra.

  7. Na seção Aplicação, selecione se a aplicação dessa política da organização precisa ser ativada ou desativada.

  8. Para tornar a política da organização condicional em uma tag, clique em Adicionar condição. Se você adicionar uma regra condicional a uma política da organização, inclua pelo menos uma regra não condicional. Caso contrário, não será possível salvar a política. Para mais detalhes, consulte Como definir uma política da organização com tags.

  9. Clique em Testar alterações.

A página Histórico de simulações aparece com uma lista das simulações realizadas por você nos últimos 14 dias. Consulte Resultados do Simulador de política nesta página para mais informações.

gcloud

  1. Crie ou modifique uma política da organização que aplique uma restrição gerenciada.

    • Para testar a criação ou atualização de uma política da organização que aplique uma restrição gerenciada, crie um arquivo JSON ou YAML que defina a política da organização.

      name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: ENFORCEMENT_STATE
      

      Substitua:

      • RESOURCE_TYPE por organizations, folders ou projects.

      • RESOURCE_ID com o ID da organização, da pasta, do ID do projeto ou o número do projeto, dependendo do tipo de recurso especificado em RESOURCE_TYPE.

      • CONSTRAINT_NAME com o nome da restrição gerenciada que você quer testar. Por exemplo, iam.managed.disableServiceAccountKeyCreation.

      • ENFORCEMENT_STATE com true para aplicar essa política da organização quando definida ou false para desativá-la quando definida.

      Para tornar a política da organização condicional em uma tag, adicione um bloco condition ao rules. Se você adicionar uma regra condicional a uma política da organização, precisará incluir pelo menos uma regra não condicional. Caso contrário, a não será possível salvar a política. Para mais detalhes, consulte Como definir uma política da organização com tags.

    • Para testar a exclusão de uma política da organização que aplica uma restrição gerenciada, crie um arquivo JSON ou YAML que defina a política da organização sem regras definidas, exceto para herdar a política do recurso pai:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        inheritFromParent: true
      

    Substitua:

    • ORGANIZATION_ID pelo ID da organização.

    • CONSTRAINT_NAME com o nome da restrição gerenciada que você quer excluir. Por exemplo, iam.managed.disableServiceAccountKeyCreation.

  2. Execute o comando policy-intelligence simulate orgpolicy:

    gcloud policy-intelligence simulate orgpolicy \
      --organization=ORGANIZATION_ID \
      --policies=POLICY_PATH
    

    Substitua:

    • ORGANIZATION_ID pelo ID da organização, como 1234567890123. Não é possível simular mudanças em várias organizações.

    • POLICY_PATH com o caminho completo do arquivo YAML da política da organização.

    Após alguns minutos, o comando imprime uma lista de recursos que violariam as mudanças na restrição personalizada, na política da organização ou em ambas.

    Os resultados também podem ser visualizados na página Histórico de simulações do console do Google Cloud . Consulte Resultados do Simulador de política nesta página para saber como ler os resultados.

Resultados do Simulador de política

O Simulador de política informa os resultados de uma mudança em uma restrição personalizada ou política da organização como uma lista de violações da política simulada. O consoleGoogle Cloud armazena os resultados das simulações geradas por você nos últimos 14 dias.

Para conferir os resultados da simulação, acesse a página Histórico de simulações.

Acessar o histórico de simulação

Selecione uma simulação para ver os detalhes. Na página Relatório de simulação, é possível ver a prévia das violações, que lista o número total de violações causadas pela nova restrição personalizada ou política da organização, o número de recursos verificados no escopo da simulação e o horário em que a simulação foi concluída.

Se você simulou uma restrição personalizada, clique em Detalhes da restrição para ver a configuração específica que foi simulada. Se você simulou uma política da organização, a guia Detalhes da política mostra a configuração simulada.

Todas as violações são listadas na tabela de recursos. Cada recurso que viola a nova restrição personalizada ou política da organização é listado com um link para a entrada de recurso no Inventário de recursos do Cloud. Os recursos de projeto, pasta e organização são mostrados com o total de recursos abaixo deles na hierarquia que violam a nova restrição personalizada ou política da organização.

Aplicar uma mudança de política testada

Depois de testar a restrição personalizada, a política da organização ou ambas, você pode configurar a restrição personalizada e aplicar a política da organização. É possível conferir todos os resultados do Simulador de política no console Google Cloud , independente de como eles foram gerados. Se o relatório de simulação incluir mudanças em não mais do que uma política da organização, você poderá aplicar a política diretamente pelos resultados da simulação. Para aplicar mudanças de teste em várias políticas da organização, use a Google Cloud CLI.

Console

  1. Para aplicar uma restrição personalizada aos resultados do Simulador de política, acesse a página Histórico de simulações.

    Acessar o histórico de simulação

  2. Selecione o relatório de simulação para a restrição personalizada ou a política da organização que você quer aplicar.

  3. Se esse relatório de simulação incluir uma restrição personalizada, clique em Salvar restrição.

  4. Se esse relatório de simulação incluir mudanças em apenas uma política da organização, você poderá aplicar essa política como uma política de teste para monitorar o comportamento na produção sem gerar riscos. Para isso, clique em Definir política de teste. A página Detalhes da política da nova página de política da organização é exibida.

    Para aplicar a política da organização imediatamente, clique em e em Definir política.

gcloud

  1. Para aplicar uma restrição personalizada, configure-a para disponibilizá-la às políticas da organização. Para configurar uma restrição personalizada, use o comando gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    

    Substitua CONSTRAINT_PATH pelo caminho completo do arquivo da restrição personalizada. Por exemplo, /home/user/customconstraint.yaml.

    Depois disso, a restrição personalizada vai estar disponível na sua lista de Google Cloud políticas da organização.

  2. Para definir a política da organização, use o comando gcloud org-policies set-policy:

    gcloud org-policies set-policy POLICY_PATH
    

    Substitua POLICY_PATH pelo caminho completo do arquivo YAML da política da organização.

    A política leva até 15 minutos para entrar em vigor.

Salvar resultados da simulação

Console

Se você estiver usando o console Google Cloud , poderá salvar os resultados do Simulador de política como um arquivo CSV.

  1. Para salvar os resultados do Simulador de política, acesse a página Histórico de simulações.

    Acessar o histórico de simulação

  2. Selecione o relatório de simulação que você quer salvar.

  3. Clique em Exportar resultados completos.

gcloud

Se você estiver usando a CLI gcloud, poderá salvar os resultados do Simulador de política como arquivos JSON ou YAML.

Por padrão, os resultados dos testes na Google Cloud CLI são gerados no formato YAML. Para salvar um resultado de teste como um arquivo YAML, redirecione a saída do comando simulate orgpolicy ao executar a simulação:

> FILENAME

Substitua FILENAME por um nome para o arquivo de saída.

Para salvar um resultado de teste como um arquivo JSON, adicione a seguinte flag ao comando simulate orgpolicy ao executar a simulação:

--format=json > FILENAME

Substitua FILENAME por um nome para o arquivo de saída.

A seguir