A política da organização do Google Cloud oferece controle centralizado e programático sobre os recursos da sua organização. Como administrador de políticas da organização, é possível definir uma política da organização, que é um conjunto de limites chamado restrições que se aplicam aos recursos do Google Cloud e aos descendentes desses recursos 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 mais controle sobre suas políticas da organização, crie políticas personalizadas.
Esta página descreve como visualizar, criar e gerenciar políticas organizacionais personalizadas. As políticas da organização personalizadas são criadas por administradores para fornecer um controle mais granular e personalizável sobre os campos específicos que são restritos pelas políticas da 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 Introdução ao serviço de políticas 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 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 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 permissões a seguir 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 sujeitos à restrição. Eles são específicos para o serviço em que você está aplicando a política da organização. As condições da restrição personalizada são definidas usando a Common Expression Language (CEL).
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
No console do Google Cloud, acesse a página Políticas da organização.
Selecione o seletor de projetos na parte superior da página.
No Seletor de projetos, selecione o recurso em que você quer definir a política da organização.
Clique em
Restrição personalizada.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.
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.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.
Na caixa Tipo de recurso, selecione o nome 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 máximo de 20 restrições personalizadas por tipo de recurso. Se você tentar criar uma restrição personalizada para um tipo de recurso que já tem 20 restrições personalizadas, a operação falhará.Em Método de aplicação, selecione se quer aplicar a restrição. em um método REST
CREATE
ou em ambos os métodosCREATE
eUPDATE
. Nem todos os serviços do Google Cloud aceitam os dois métodos. Para conferir os métodos compatíveis com cada serviço, encontre o serviço em Serviços compatíveis.Para definir uma condição, clique em
Editar condição.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 nas restrições personalizadas, consulte Serviços compatíveis com restrição personalizada.Clique em Salvar.
Em Ação, selecione se você quer permitir ou negar o método avaliado quando a condição acima é 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.
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, como123456789
.CONSTRAINT_NAME
: o nome da sua nova restrição personalizada. Uma restrição personalizada precisa começar comcustom.
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 máximo de 20 restrições personalizadas por tipo de recurso. Se você tentar criar uma restrição personalizada para um tipo de recurso que já tem 20 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 com suporte a restrição personalizada.METHOD1,METHOD2
: uma lista de métodos "RESTful" para aplicar a restrição. Pode serCREATE
ouCREATE
eUPDATE
. 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 ocondition
for atendido. Pode serALLOW
ouDENY
.A ação de negação significa que, se a condição for avaliada como verdadeira, a operação de criação ou atualização do recurso será bloqueada.
A ação de permissão significa que, se a condição for avaliada como verdadeira, a operação de criação ou atualização do 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 2000 caracteres.
Depois de criar o arquivo YAML para uma nova restrição personalizada, 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
CONSTRAINT_PATH
pelo caminho completo
do arquivo da restrição personalizada. Por exemplo, /home/user/customconstraint.yaml
.
Após a conclusão, as restrições personalizadas vão estar disponíveis como políticas da organização
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
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 o
comando set-custom-constraint
da gcloud CLI novamente. Não há
controle de versões de restrições personalizadas. Dessa forma, isso substitui a
restrição personalizada existente. Se a restrição personalizada já tiver sido aplicada, a restrição personalizada atualizada
entrará em vigor imediatamente.
Console
No console do Google Cloud, acesse a página Políticas da organização.
Selecione o seletor de projetos na parte superior da página.
No Seletor de projetos, selecione o recurso em que você quer atualizar a política da organização.
Selecione a restrição que deseja editar na lista da página Políticas da organização. A página Detalhes da política dessa restrição será exibida.
Clique em
Editar restrição.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 tipo de recurso depois que a restrição for criada.
Clique em Salvar alterações.
gcloud
Para editar uma restrição personalizada usando a Google Cloud CLI, crie um novo arquivo YAML que contenha 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, como123456789
.CONSTRAINT_NAME
: o nome da sua nova restrição personalizada. Uma restrição personalizada precisa começar comcustom.
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 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 serCREATE
ouCREATE
eUPDATE
. 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 ocondition
for atendido. Pode serALLOW
ouDENY
.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 o arquivo YAML para uma nova restrição personalizada, 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
CONSTRAINT_PATH
pelo caminho completo
do arquivo da restrição personalizada. Por exemplo, /home/user/customconstraint.yaml
.
Após a conclusão, as restrições personalizadas vão estar disponíveis como políticas da organização
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
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
No console do Google Cloud, acesse a página Políticas da organização.
Selecione o seletor de projetos na parte superior da página.
No Seletor de projetos, selecione o recurso em que você quer definir a política da organização.
Selecione a restrição que quer excluir da lista na página Políticas da organização. A página Detalhes da política dessa restrição será exibida.
Clique em
Excluir.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-constraint
da gcloud CLI:
gcloud org-policies delete-custom-constraint custom.CONSTRAINT_NAME \
--organization=ORGANIZATION_ID
Substitua:
ORGANIZATION_ID
: o ID da organização, como123456789
.CONSTRAINT_NAME
: o nome da sua restrição personalizada. Por exemplo,
.custom.disableGkeAutoUpgrade
O resultado será assim:
Deleted custom constraint [organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade
]
Depois de excluir uma restrição personalizada, todas as políticas criadas usando a restrição continuam existindo, 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 as mudanças na política da organização
Recomendamos que você teste e faça um teste de todas as mudanças nas políticas da organização para entender melhor o estado do ambiente e como as mudanças o afetam.
Simulador de política para políticas da organização ajuda a entender o efeito de uma restrição e política da organização no seu ambiente atual. Com essa ferramenta, é possível analisar todas as configurações de recursos para saber onde as violações ocorrem antes de serem aplicadas no ambiente de produção. Para instruções detalhadas, consulte Testar alterações na política da organização com o Simulador de política.
Depois de entender o efeito atual, você pode criar uma política da organização no modo de simulação 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 simulação é um tipo de política da organização em que as violações da política são registradas em auditoria, mas as ações de violação não são negadas. É possível criar uma política da organização no modo de simulação com base em uma restrição personalizada usando o console do Google Cloud ou a Google Cloud CLI. Para instruções detalhadas, consulte Criar uma política da organização no modo de simulação.
Aplicar uma política da organização personalizada
Depois que uma restrição personalizada é configurada, ela opera de forma idêntica às restrições booleanas predefinidas. O Google Cloud verifica primeiro as restrições personalizadas ao avaliar se uma solicitação do usuário é permitida. Se alguma das políticas personalizadas da organização negar a solicitação, ela será rejeitada. Em seguida, o Google Cloud verificará 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 depois aplique essa política da organização a um recurso do Google Cloud.Console
- No console do Google Cloud, acesse a página Políticas da organização.
- No seletor de projetos, selecione o projeto em que você quer definir a política da organização.
- Na lista da página Políticas da organização, selecione a restrição para acessar a página Detalhes da política dela.
- Para personalizar a política da organização nesse recurso, clique em Gerenciar política.
- Na página Editar política, selecione Substituir a política do editor principal.
- Clique em Adicionar uma regra.
- Na seção Aplicação, selecione se a aplicação dessa política da organização está ativada ou desativada.
- Opcional: 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 informações, consulte Como configurar uma política da organização com tags.
- 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.
- 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 leva 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ípica tem esta aparência:
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ítica da organização usa a Common Expression Language (CEL) para avaliar condições em restrições personalizadas. A CEL é uma linguagem de código aberto sem completude de Turing que implementa semânticas comuns para a avaliação de expressões.
Cada serviço que oferece suporte a restrições personalizadas disponibiliza um conjunto específico de recursos e os campos desses recursos. Os campos disponíveis são fortemente tipados e podem ser referenciados diretamente por restrições personalizadas.
É possível criar condições de CEL que se referem a campos de recursos de serviço com base no tipo do campo. O serviço de política da organização oferece suporte a um subconjunto de tipos de dados, expressões e macros do CEL. As seções abaixo listam os tipos de dados disponíveis e as expressões e macros comuns que funcionam com eles.
Para saber quais expressões e macros estão disponíveis para cada serviço, consulte Serviços com suporte a restrições personalizadas.
O exemplo de JSON a seguir mostra cada um dos possíveis tipos de campo 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
é avaliada como true
. Você pode combinar expressões com e (&&
) e ou (||
)
para criar uma consulta complexa. Ao criar o arquivo YAML ou JSON para sua restrição
personalizada, inclua a consulta completa entre aspas duplas ("
).
Número inteiro
Campos inteiros, como integerValue
no exemplo acima, permitem
que operadores de comparação sejam usados em 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
referenciados com o caminho completo. Exemplo:
resource.nestedValue.nestedStringValue == "foo"
// nestedValue contains the object nestedStringValue, which has a value of "foo".
Booleano
Campos booleanos, como booleanValue
no exemplo acima, contêm um valor
booleano, true
ou false
.
Lista
Os campos de lista, como listValue
no exemplo acima, podem ser avaliados
pelo tamanho da lista, pelo conteúdo dela e se um elemento
específico 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 de mapa, como mapValue
no exemplo acima, são pares de chave-valor
que podem ser avaliados 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 resolver erros da CEL
Uma condição criada com expressões inválidas ou incompatibilidades de tipo retorna um erro quando você tenta configurar a restrição personalizada. Por exemplo, considere 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 a 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 CEL inválidos são sinalizados com um ícone
Error. Ao destacar esse ícone, uma dica de ferramenta é exibida com mais informações sobre o erro de sintaxe.O serviço de política da organização compila e valida as condições que você cria, retornando um erro se a condição não estiver sintaticamente correta. No entanto, há condições que são compiladas, mas resultam em um erro quando o Google Cloud tenta aplicar as restrições. Por exemplo, se você configurar uma restrição com uma condição que tente acessar um índice de lista ou uma chave de mapa que não existe, a restrição falhará e retornará um erro no momento da aplicação, e bloqueará 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 seja válida em todos
os casos. Por exemplo, verifique list.size()
antes de referenciar um elemento de lista específico
ou use has()
antes de referenciar um elemento de mapa.
Serviços com suporte
Cada serviço define o conjunto de campos de restrição personalizada que podem ser usados para aplicar políticas da organização aos recursos de serviço. Para conferir uma lista de serviços com suporte a restrições personalizadas, consulte Serviços com suporte a restrições personalizadas.
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
- Saiba mais sobre as restrições.
- Leia sobre as outras opções que você pode usar para personalizar suas políticas.
- Saiba como definir políticas da organização com base em tags.
- Saiba como validar e monitorar políticas da organização com o Config Validator.