Criar e gerenciar políticas personalizadas da organização

A política da organização do Google Cloud oferece controle centralizado e programático sobre os recursos da sua organização. Conforme o administrador de política da organização, você pode definir uma política, que é um conjunto de restrições chamadas restrições que se aplicam a os recursos do Google Cloud e os descendentes deles na Hierarquia de recursos do Google Cloud. É possível aplicar políticas da organização no nível da organização, da pasta ou para envolvidos no projeto.

A política da organização fornece restrições predefinidas para vários serviços do Google Cloud. No entanto, se você quiser ter mais controle políticas da organização, é possível criar políticas personalizadas da organização.

Esta página descreve como visualizar, criar e gerenciar organizações políticas. Políticas personalizadas da organização são criadas pelos administradores para fornecer um controle mais granular e personalizável sobre os campos específicos que são restritas pelas políticas da sua organização.

Antes de começar

Para mais informações sobre o que são políticas e restrições da organização e como elas funcionam, consulte a Introdução ao serviço Política da organização.

Funções exigidas

Para receber as permissões necessárias a fim de gerenciar as políticas da organização, peça ao administrador para conceder a você o papel do IAM de Administrador de políticas da organização (roles/orgpolicy.policyAdmin) 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 gerenciar as políticas da organização. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para gerenciar as políticas da organização:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

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

Restrições personalizadas

Uma restrição personalizada é criada em um arquivo YAML que especifica os recursos, métodos, condições e ações sujeitas à restrição. São específicas para o serviço no qual você está aplicando a política da organização. O as condições da restrição personalizada são definidas com a expressão comum linguagem de programação (CEL, na sigla em inglês).

Configurar uma restrição personalizada

É possível criar uma restrição personalizada e configurá-la para uso nas políticas da organização usando o console do Google Cloud ou a Google Cloud CLI.

Console

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

    Acessar as políticas da organização

  2. Selecione o seletor de projetos na parte superior da página.

  3. No seletor de projeto, escolha o recurso para o qual você quer para definir a política da organização.

  4. Clique em Restrição personalizada.

  5. 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 isso pode podem ser expostos em mensagens de erro.

  6. 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 isso podem ser expostos em mensagens de erro.

  7. 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 isso podem ser expostos em mensagens de erro.

  8. Na caixa Tipo de recurso, selecione o nome do Google Cloud Recurso REST que contém o objeto e o campo que você quer restringir, para exemplo: container.googleapis.com/NodePool. Há um máximo de 20 restrições personalizadas por tipo de recurso. Se você tentar criar um restrição para um tipo de recurso que já tem 20 restrições personalizadas, se a operação falhar.

  9. Em Método de aplicação, selecione se quer aplicar a restrição. em um método REST CREATE ou em ambos os métodos CREATE e UPDATE. Nem todos os serviços do Google Cloud são compatíveis com os dois métodos. Para conferir os recursos métodos para cada serviço, encontre o serviço em Serviços compatíveis.

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

    1. 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 suas restrições, consulte Serviços compatíveis com restrição personalizada.

    2. Clique em Salvar.

  11. Em Ação, selecione se você quer permitir ou negar o método avaliado quando a condição acima é atendida.

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

    A ação permitir significa que a operação cria ou atualiza recurso só é permitido se a condição é avaliada como verdadeira. Todas outro caso, exceto os listados explicitamente na condição, está bloqueado.

  12. Clique em Criar restrição.

Quando você insere um valor em cada campo, a configuração YAML equivalente para essa restrição personalizada é exibida à direita.

gcloud

Para criar uma restrição personalizada usando a Google Cloud CLI, crie um arquivo YAML para essa restrição:

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 REST do Google Cloud que contém o objeto e o campo que você quer restringir. Por exemplo, container.googleapis.com/NodePool. Há um limite máximo de 20 restrições personalizadas por tipo de recurso. Se você tentar criar um para um tipo de recurso que já tem 20 restrições personalizadas, a falha na operação. 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 são compatíveis com os dois métodos. Para ver os métodos suportados para cada serviço, encontrar o serviço em Serviços compatíveis.

  • CONDITION: uma condição CEL que se refere a uma recurso de serviço com suporte, 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 negar significa que, se a condição for avaliada como verdadeira, para criar ou atualizar o recurso está bloqueada.

    A ação permitir significa que, se a condição for avaliada como verdadeira, a operação para criar ou atualizar o recurso é permitida. Isso também significa que todos os outros casos, exceto o listado explicitamente no está bloqueada.

  • 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 2000 caracteres.

Depois de criar uma nova restrição personalizada usando a Google Cloud CLI, configure-a 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 para sua restrição personalizada. Por exemplo, /home/user/customconstraint.yaml. Após a conclusão, as restrições personalizadas vão estar disponíveis na sua lista de políticas da organização do Google Cloud. Para verificar se a restrição personalizada existe, use o comando gcloud org-policies list-custom-constraints:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Substitua ORGANIZATION_ID pelo ID do recurso da organização. Para mais informações, consulte Como visualizar as políticas da organização.

Atualizar uma restrição personalizada

Você pode atualizar uma restrição personalizada editando a restrição no console do Google Cloud ou criando um novo arquivo YAML e usando Comando set-custom-constraint da CLI gcloud novamente. Não há o controle de versões de restrições personalizadas. Dessa forma, ele substitui o restrição. Se a restrição personalizada já tiver sido aplicada, a versão atualizada a restrição entra em vigor imediatamente.

Console

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

    Acessar as políticas da organização

  2. Selecione o seletor de projetos na parte superior da página.

  3. No seletor de projeto, escolha o recurso para o qual você quer para atualizar a política da organização.

  4. Selecione a restrição que deseja editar na lista da Políticas da organização. A página Detalhes da política para isso deve aparecer.

  5. Clique em Editar restrição.

  6. Mude o nome de exibição, a descrição, o método de aplicação condição e ação. Não é possível alterar o ID da restrição ou o recurso depois que a restrição for criada.

  7. Clique em Salvar alterações.

gcloud

Para editar uma restrição personalizada atual usando a Google Cloud CLI, crie um YAML que contém as alterações a serem feitas:

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 REST do Google Cloud que contém o objeto e o campo que você quer restringir. Por exemplo, container.googleapis.com/NodePool. Para mais informações sobre os recursos de serviço que você pode usar em suas restrições, 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 são compatíveis com os dois métodos. Para ver os métodos suportados para cada serviço, encontrar o serviço em Serviços compatíveis.

  • CONDITION: uma condição CEL que se refere a uma recurso de serviço com suporte, 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.

  • 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 2000 caracteres.

Depois de criar uma nova restrição personalizada usando a Google Cloud CLI, configure-a 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 para sua restrição personalizada. Por exemplo, /home/user/customconstraint.yaml. Após a conclusão, as restrições personalizadas vão estar disponíveis na sua lista de políticas da organização do Google Cloud. Para verificar se a restrição personalizada existe, use o comando gcloud org-policies list-custom-constraints:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Substitua ORGANIZATION_ID pelo ID do recurso da organização. Para mais informações, consulte Como visualizar as políticas da organização.

Excluir uma restrição personalizada

É possível excluir uma restrição personalizada usando o console do Google Cloud ou a CLI do Google Cloud.

Console

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

    Acessar as políticas da organização

  2. Selecione o seletor de projetos na parte superior da página.

  3. No seletor de projeto, escolha o recurso para o qual você quer para excluir a política da organização.

  4. Selecione a restrição que deseja excluir da lista no Políticas da organização. A página Detalhes da política para isso deve aparecer.

  5. Clique em Excluir.

  6. Para confirmar que você quer excluir a restrição, clique em Excluir.

gcloud

Para excluir uma restrição personalizada, use o comando org-policies delete-custom-constraintda gcloud CLI:

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_NAME \
  --organization=ORGANIZATION_ID

Substitua:

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

  • CONSTRAINT_NAME: o nome do personalizado. restrição. Por exemplo, custom.disableGkeAutoUpgrade.

O resultado será assim:

Deleted custom constraint [organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade]

Se você excluir uma restrição personalizada, todas as políticas criadas essa restrição continua a existir, mas são ignoradas. Não é possível criar outra restrição personalizada com o mesmo nome de uma restrição personalizada excluída.

Testar e analisar alterações na política da organização

Recomendamos que você teste e faça uma simulação de todas as alterações políticas da organização, para entender melhor o estado do seu ambiente e como as mudanças o afetam.

O Simulador de política para políticas da organização ajuda a entender o efeito de uma e a política da organização no seu ambiente atual. Com essa ferramenta, é possível revisar todas as configurações de recursos para saber onde ocorrem as violações, antes ele é aplicado no ambiente de produção. Para instruções detalhadas, consulte Teste as alterações na política da organização com o Simulador de política.

Ao entender o efeito atual, você pode criar uma política da organização em modo de teste para entender o impacto e as possíveis violações de uma política nos próximos 30 dias. Uma política da organização no modo de teste é um tipo de política da organização em que as violações são registradas em auditoria, ações em violação não sejam negadas. É possível criar uma política da organização teste de uma restrição personalizada usando o console do Google Cloud ou Google Cloud CLI. Para instruções detalhadas, consulte Crie uma política da organização no modo de teste.

Aplicar uma política da organização personalizada

Depois que uma restrição personalizada é configurada, ela opera de forma idêntica à boolean constraints. O Google Cloud verifica primeiro as restrições personalizadas para avaliar se uma solicitação do usuário é permitida. Se alguma das configurações personalizadas políticas negarem a solicitação, ela será rejeitada. Em seguida, o Google Cloud verifica se há políticas da organização predefinidas aplicadas a esse recurso.

Para aplicar uma restrição booleana, crie uma política da organização com referência a ela e aplique essa política da organização a um recurso do Google Cloud.

Console

Para aplicar uma restrição booleana:

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

    Acessar as políticas da organização

  2. Selecione o seletor de projetos na parte superior da página.
  3. No seletor de projetos, selecione o projeto em que você quer definir a política da organização.
  4. Selecione a restrição na lista da página Políticas da organização. A página Detalhes da política dessa restrição será exibida.
  5. Para personalizar a política da organização nesse recurso, clique em Gerenciar política.
  6. Na página Editar política, selecione Substituir a política do editor principal.
  7. Clique em Adicionar uma regra.
  8. Em Aplicação, selecione se a aplicação dessa política da organização precisa ser ativada ou desativada.
  9. 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.
  10. Se essa for uma restrição personalizada, clique em Testar alterações para simular o efeito da política da organização. Para mais informações, consulte Testar alterações na política da organização com o Simulador de política.
  11. Para concluir e aplicar a política da organização, clique em Definir política. A política levará até 15 minutos para entrar em vigor.

gcloud

Para criar uma política da organização que aplica uma restrição booleana, crie um arquivo YAML da política com referência à restrição:

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

Substitua:

  • PROJECT_ID: o projeto em que você quer aplicar a restrição.
  • CONSTRAINT_NAME: o nome definido para a restrição personalizada. Por exemplo, custom.disableGkeAutoUpgrade.

Para aplicar a política da organização que contém a restrição, execute o seguinte comando:

    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 levará até 15 minutos para entrar em vigor.

Restrição de exemplo

É possível definir restrições personalizadas semelhantes às predefinidas fornecidas pelo Google. Um arquivo YAML de restrição personalizada típico é semelhante ao seguinte:

name: organizations/1234567890123/customConstraints/custom.disableGkeAutoUpgrade
resourceTypes:
- container.googleapis.com/NodePool
methodTypes:
- CREATE
- UPDATE
condition: "resource.management.autoUpgrade == false"
actionType: ALLOW
displayName: Disable GKE auto upgrade
description: Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.

Common Expression Language

O serviço de políticas da organização usa a Common Expression Language (CEL) para e avaliar condições em restrições personalizadas. A CEL é uma plataforma não Turing linguagem completa que implementa semântica comum para avaliação de expressões.

Cada serviço com suporte a restrições personalizadas faz um conjunto específico de seus recursos e os campos desses recursos disponíveis. Campos disponíveis são fortemente tipados e podem ser diretamente referenciados por restrições personalizadas.

É possível criar condições CEL que se referem a campos de recursos de serviço com base o tipo do campo. O serviço de políticas da organização dá suporte a um subconjunto de tipos de dados CEL, expressões e macros. As seções abaixo listam os tipos de dados disponíveis e e as macros comuns que funcionam com elas.

Para detalhes sobre quais expressões e macros estão disponíveis para cada serviço, ver Serviços compatíveis com restrição personalizada.

O exemplo de JSON a seguir mostra cada um dos possíveis que podem ser referenciados usando restrições personalizadas:

{
  integerValue: 1
  stringValue: "A text string"
  booleanValue: true
  nestedValue: {
    nestedStringValue: "Another text string"
  }
  listValue: [foo, bar]
  mapValue["costCenter"] == "123"
}

Para cada expressão CEL, a restrição personalizada é aplicada quando a condição avalia como true. Você pode combinar expressões com e (&&) e or (||) para criar uma consulta complexa. Ao criar o arquivo YAML ou JSON para seus coloque a consulta completa entre aspas duplas (").

Número inteiro

Campos inteiros, como integerValue no exemplo acima, permitem operadores de comparação para serem usados nas condições. Exemplo:

resource.integerValue == 1
resource.integerValue > 5
resource.integerValue < 10

String

Campos de string, como stringValue no exemplo acima, podem ser avaliados usando um literal de string, uma expressão regular ou uma expressão CEL. Exemplo:

resource.stringValue == "abc"
// stringValue is exactly "abc".

resource.stringValue.matches("dev$")
// stringValue matches a regular expression, which specifies the string ends
// with the word "dev".

resource.stringValue.startsWith("startValue")
// stringValue starts with "startValue".

resource.stringValue.endsWith("endValue")
// stringValue ends with "endValue".

resource.stringValue.contains("fooBar")
// stringValue contains "fooBar".

Campos aninhados, como nestedStringValue no exemplo acima, precisam ser referenciada com o caminho completo. Exemplo:

resource.nestedValue.nestedStringValue == "foo"
// nestedValue contains the object nestedStringValue, which has a value of "foo".

Booleano

Os campos booleanos, como booleanValue no exemplo acima, contêm um valor booleano valor, true ou false.

Lista

Campos de lista, como listValue no exemplo acima, podem ser avaliados pelo tamanho da lista, pelo conteúdo da lista e por um determinado existe em qualquer lugar da lista.

Exemplo:

resource.listValue.size() >= 1 && resource.listValue[0] == "bar"
// listValue has size greater than or equal to one, and the first element is "bar".

resource.listValue.exists(value, value == "foo")
// listValue has at least one element that is exactly "foo".

resource.listValue.all(value, value.contains("foo"))
// listValue is a list of values that are all exactly "foo".

Mapa

Os campos do mapa, como mapValue no exemplo acima, são pares de chave-valor. que podem ser avaliadas com base na existência e no valor de elementos específicos.

Exemplo:

has(resource.mapValue.foo) && resource.mapValue.foo == "bar"
// mapValue contains the key "foo", and that key has the value "bar".

Como solucionar erros de CEL

Uma condição criada com expressões inválidas ou incompatibilidades de tipo retorna. um erro ao tentar configurar a restrição personalizada. Por exemplo, considerando a seguinte restrição personalizada inválida, que compara uma string com um Número inteiro:

name: organizations/1234567890123/customConstraints/custom.badConfig
resourceTypes:
- dataproc.googleapis.com/Cluster
methodTypes:
- CREATE
- UPDATE
condition: "resource.config.masterConfig.numInstances == 'mismatch'"
actionType: ALLOW
displayName: Number of instances is a string
description: Demonstrate that type mismatches cause an error.

Um erro será produzido se você tentar configurar essa restrição usando o Google Cloud CLI:

ERROR: (gcloud.org-policies.set-custom-constraint) INVALID_ARGUMENT: Custom constraint condition [resource.config.masterConfig.numInstances == "mismatch"] is invalid. Error: ERROR: <input>:1:15: found no matching overload for '_==_' applied to '(int, string)' (candidates: (%A0, %A0))
 | resource.config.masterConfig.numInstances == "mismatch"
 | ..........................................^.

No console do Google Cloud, os erros de sintaxe de CEL inválidos são sinalizados com Ícone Erro. Destacar o ícone exibe uma dica com mais informações sobre o erro de sintaxe.

O Organization Policy Service compila e valida as condições que você cria, retornando um se a condição não estiver sintaticamente correta. No entanto, existem algumas condições que são compiladas, mas resultam em erro quando o Google Cloud tenta para aplicar as restrições. Por exemplo, se você configurar uma restrição condição que tenta acessar um índice de lista ou chave de mapa que não existe, o restrição falha, retorna um erro no momento da aplicação e bloqueia qualquer tentativa de criar o recurso.

Ao criar condições que dependem de elementos de lista ou mapa, recomendamos iniciar a condição com uma verificação que garanta que ela é válida em todos casos de uso diferentes. Por exemplo, verifique list.size() antes de referenciar uma lista específica ou use has() antes de referenciar um elemento do mapa.

Serviços com suporte

Cada serviço define o conjunto de campos de restrição personalizados que podem ser usados para aplicar políticas da organização aos recursos de serviço. Para uma lista de serviços que oferecem suporte a restrições personalizadas, consulte Serviços compatíveis com restrição personalizada.

Para mais informações sobre como configurar um verificador de políticas da organização, consulte Descobertas de vulnerabilidade da política da organização.

A seguir