Testar mudanças na política da organização com o Simulador de política

Simulador de política para políticas da organização permite visualizar o impacto de uma nova restrição personalizada ou política da organização que aplica uma restrição personalizada 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, permitindo que você reconfigure esses recursos, solicite exceções ou mude o escopo da política da organização, tudo sem interromper os desenvolvedores ou derrubar seu ambiente.

Esta página descreve como testar uma alteração em uma política da organização usando o Simulador de política. Ele 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

  • Na Google Cloud CLI, defina o projeto que você quer usar para fazer chamadas de API:

    gcloud config set project PROJECT_ID

    Substitua PROJECT_ID pelo nome ou ID do projeto.

  • Ative as APIs Policy Simulator and Resource Manager.

    Ative as APIs

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

Funções exigidas

Para ter 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 da OrgPolicy (roles/policysimulator.orgPolicyAdmin) na organização. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

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

Também é possível conseguir essas permissões com papéis personalizados ou outros papéis predefinidos.

Testar uma mudança de política

Você pode testar uma alteração em uma restrição personalizada, uma política da organização que imponha uma restrição personalizada ou ambas ao mesmo tempo.

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

    Por exemplo, uma restrição personalizada que restringe a criação de recursos de cluster do Google Kubernetes Engine em que a autorização binária não está ativada precisa ser semelhante a esta:

    name: "organizations/ORGANIZATION_ID/customConstraints/custom.EnforceGKEBinaryAuthz"
    resource_types: "container.googleapis.com/Cluster"
    method_types: CREATE
    condition: "resource.binaryAuthorization.enabled == true"
    action_type: ALLOW
    

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

    Para mais informações sobre como criar restrições personalizadas, consulte Como criar e gerenciar restrições personalizadas.

  2. Para testar 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 que você quer testar.

    Por exemplo, uma política da organização que restrinja a criação de recursos de cluster do Google Kubernetes Engine em que a autorização binária não está ativada precisa ser semelhante a esta:

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
        - enforce: true
    

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

  3. Para testar uma política da organização que aplique condicionalmente 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 que você quer testar.

    Por exemplo, a política da organização a seguir restringe a criação de recursos de cluster do Google Kubernetes Engine em que a autorização binária não está ativada, exceto nos recursos com a tag env=dev anexada.

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
        - condition:
            expression: resource.matchTag('env', 'dev')
          enforce: false
        - enforce: true
    

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

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

  1. Execute o comando a seguir para simular a mudança na restrição personalizada, na política da organização ou em ambas:

    gcloud beta 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 alterações 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 sinalização --policies, não será necessário definir a sinalização --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 sinalização --custom-constraints, não será necessário definir a sinalização --policies.

    Depois de alguns minutos, o comando imprime uma lista de recursos que violam as alterações na restrição personalizada, na política da organização ou em ambas.

    Veja a seguir um exemplo de resposta para uma simulação de política da organização. Esta simulação envolve uma restrição personalizada que restringe 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
    

Aplicar uma alteração de política testada

Depois de testar a restrição personalizada, a política da organização ou ambas, configure a restrição personalizada e aplique a política da organização usando os processos normais.

  1. Para aplicar uma restrição personalizada, é preciso configurá-la para disponibilizá-la para as 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 que isso for concluído, a restrição personalizada estará disponível na sua lista de políticas da organização do Google Cloud.

  2. Para aplicar uma política da organização que contém uma restrição personalizada, use o comando gcloud org-policies set-policy:

    gcloud org-policies set-policy POLICY_PATH
    

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

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

Salvar resultados da simulação

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 o resultado de um teste como um arquivo JSON, adicione a seguinte sinalização 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