A política da organização do Google Cloud oferece controle centralizado e programático sobre os recursos da organização. Como administrador de políticas da organização, é possível definir uma política da organização, que é um conjunto de restrições chamadas restrições, que se aplicam aos recursos do Google Cloud e aos descendentes deles na hierarquia de recursos do Google Cloud. É possível aplicar as políticas da organização no nível da organização, da pasta ou do projeto.
A política da organização fornece restrições predefinidas para vários serviços do Google Cloud. No entanto, para ter mais controle sobre as políticas da organização, crie restrições personalizadas e use-as nas políticas.
Nesta página, descrevemos como visualizar, criar e gerenciar restrições personalizadas de política da organização. As restrições personalizadas são criadas por administradores para fornecer controle mais granular e personalizável sobre os campos específicos que são restritos pelas políticas da sua organização.
Antes de começar
Para mais informações sobre as políticas e restrições da organização e como elas funcionam, consulte a Introdução ao serviço de Política da organização.
Papéis obrigatórios
Para receber as permissões necessárias para gerenciar as políticas da organização,
peça ao administrador para conceder a você o papel do IAM de administrador da política da organização (roles/orgpolicy.policyAdmin
) na organização.
Para mais informações sobre como conceder papéis, consulte
Gerenciar o acesso.
Esse papel predefinido contém as permissões necessárias para gerenciar as políticas da organização. Para ver as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
-
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 papéis personalizados 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 que estão sujeitos à restrição. Elas são específicas do serviço em que a política da organização é aplicada. As condições da restrição personalizada são definidas usando o 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.
Na caixa ID de restrição, insira o nome escolhido para a nova restrição personalizada. Por exemplo,
custom.disableGkeAutoUpgrade
. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo,organizations/123456789/customConstraints/custom.
).Na caixa Descrição, insira uma descrição legível da restrição que será exibida como uma mensagem de erro quando a política for violada. Esse campo tem um comprimento máximo de 2000 caracteres.
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
.Em Método de aplicação, selecione se a restrição será aplicada em um método REST
CREATE
ou nos métodosCREATE
eUPDATE
. Nem todos os serviços do Google Cloud são compatíveis com os dois métodos. Para ver 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 refere a um recurso de serviço compatível, por exemplo,
resource.management.autoUpgrade == false
. Este 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ções personalizadas.Clique em Save.
Em Ação, selecione se quer permitir ou negar o método avaliado se a condição acima for atendida.
Clique em Create constraint.
Quando você insere um valor em cada campo, a configuração YAML equivalente para essa restrição personalizada aparece à direita.
gcloud
Para criar uma restrição personalizada usando a Google Cloud CLI, crie um arquivo YAML para a restrição personalizada:
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. Por exemplo,custom.disableGkeAutoUpgrade
. O comprimento 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 nas restrições personalizadas, consulte Serviços compatíveis com restrições personalizadas.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 são compatíveis com os dois métodos. Para ver os métodos compatíveis com cada serviço, encontre o serviço em Serviços compatíveis.CONDITION
: uma condição de 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 Linguagem de expressão comum.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 2.000 caracteres.
Depois de criar uma nova restrição personalizada usando a Google Cloud CLI, é necessário 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_PATHSubstitua
CONSTRAINT_PATH
pelo caminho completo do
arquivo de restrição personalizado. Por exemplo, /home/user/customconstraint.yaml
.
Depois de concluídas, você verá suas restrições personalizadas como restrições 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_IDSubstitua
ORGANIZATION_ID
pelo ID do recurso da organização.
O resultado será assim:
CONSTRAINT: custom.disableGkeAutoUpgrade
LIST_POLICY: -
BOOLEAN_POLICY: SET
ETAG: COCsm5QGENiXi2E=
Para mais informações, consulte
Como ver as políticas da organização.Atualizar uma restrição personalizada
É possível 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 CLI gcloud novamente. Não há
controle de versão das restrições personalizadas, por isso ela substitui a restrição personalizada
existente. Se a restrição personalizada já tiver sido aplicada, a restrição personalizada
atualizada vai 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 você quer editar na lista da página Políticas da organização. A página Detalhes da política para essa restrição é exibida.
Clique em
Editar restrição.Faça alterações no nome de exibição, na descrição, no método de aplicação, na condição e na ação. Não é possível alterar o ID da restrição ou o tipo de recurso depois que a restrição é criada.
Clique em Salvar alterações.
gcloud
Para editar uma restrição personalizada que já existe usando a Google Cloud CLI, crie um novo arquivo YAML contendo as alterações que você quer fazer:
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. Por exemplo,custom.disableGkeAutoUpgrade
. O comprimento 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 nas restrições personalizadas, consulte Serviços compatíveis com restrições personalizadas.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 são compatíveis com os dois métodos. Para ver os métodos compatíveis com cada serviço, encontre o serviço em Serviços compatíveis.CONDITION
: uma condição de 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 Linguagem de expressão comum.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 2.000 caracteres.
Depois de criar uma nova restrição personalizada usando a Google Cloud CLI, é necessário 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_PATHSubstitua
CONSTRAINT_PATH
pelo caminho completo do
arquivo de restrição personalizado. Por exemplo, /home/user/customconstraint.yaml
.
Depois de concluídas, você verá suas restrições personalizadas como restrições 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_IDSubstitua
ORGANIZATION_ID
pelo ID do recurso da organização.
O resultado será assim:
CONSTRAINT: custom.disableGkeAutoUpgrade
LIST_POLICY: -
BOOLEAN_POLICY: SET
ETAG: COCsm5QGENiXi2E=
Para mais informações, consulte
Como ver 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 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 excluir a política da organização.
Selecione a restrição que você quer excluir na lista da página Políticas da organização. A página Detalhes da política para essa restrição é 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 CLI gcloud:
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
]
Se você excluir uma restrição personalizada, todas as políticas criadas usando essa restrição continuarão a existir, mas serão ignoradas.
Se você criar outra restrição personalizada com o mesmo nome, essas restrições de política da organização ignoradas usarão a nova restrição personalizada e não serão mais ignoradas.
Aplicar uma restrição personalizada
Depois que uma restrição personalizada é configurada, ela opera de maneira idêntica às restrições booleanas predefinidas. O Google Cloud verifica as restrições personalizadas primeiro ao avaliar se uma solicitação do usuário é permitida. Se alguma das restrições personalizadas negar a solicitação, a solicitação será rejeitada. Em seguida, o Google Cloud verifica as restrições predefinidas aplicadas nesse recurso.
Para aplicar uma restrição booleana, crie uma política da organização que faça 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:
-
Abra a página
Políticas da organização no Console do Google Cloud. -
Selecione o
Seletor de projetos na parte superior da página. -
No
Seletor de projeto , selecione o projeto em que você quer definir a política da organização. -
Selecione a restrição na lista da página
Políticas da organização . A páginaDetalhes da política dessa restrição será exibida. -
Para personalizar a política da organização para esse recurso, clique em
Gerenciar política . -
Na página
Editar política , selecionePersonalizar . -
Clique em
Adicionar regra . -
Em
Aplicação , selecione se a aplicação dessa política da organização será ativada ou desativada. -
Opcionalmente, 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, será necessário adicionar pelo menos uma regra incondicional ou a política não poderá ser salva. Para mais detalhes, consulte Como definir uma política da organização com tags. -
Para finalizar e aplicar a política da organização, clique em
Salvar . A política leva até 15 minutos para entrar em vigor.
gcloud
Para criar uma política da organização que aplique uma restrição booleana, crie um arquivo JSON de política que faça 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 sua 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 JSON da política da organização. A política leva até 15 minutos para entrar em vigor.
Restrição de exemplo
Você pode definir restrições personalizadas semelhantes às predefinidas fornecidas pelo Google. Um arquivo YAML de restrição personalizada típico tem a seguinte 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íticas da organização usa a Common Expression Language (CEL) para avaliar as condições de restrições personalizadas. CEL é uma linguagem completa de código aberto que não é original e que implementa semântica comum para avaliação de expressão.
Cada serviço que dá suporte a restrições personalizadas disponibiliza um conjunto específico de recursos e os campos desses recursos. Os campos disponíveis são altamente tipados e podem ser referenciados diretamente por restrições personalizadas.
É possível criar condições de CEL que se referem aos campos de recurso de serviço com base no tipo do campo. O serviço de Políticas da organização é compatível com um subconjunto de tipos de dados, expressões e macros CEL. As seções abaixo listam os tipos de dados disponíveis, expressões comuns e macros que funcionam com elas.
Para detalhes sobre quais expressões e macros estão disponíveis para cada serviço, consulte Serviços compatíveis com restrição personalizada.
O exemplo JSON a seguir mostra cada um dos possíveis tipos de campo que você pode referenciar 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 de CEL, a restrição personalizada é aplicada quando a condição
é avaliada como true
. É possível combinar expressões com e (&&
) e ou (||
)
para criar uma consulta complexa.
Inteiro
Campos de número inteiro, como integerValue
no exemplo acima, permitem que os operadores de comparação sejam usados em condições. Exemplo:
resource.integerValue == 1
resource.integerValue > 5
resource.integerValue < 10
String
Os 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".
Os 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".
Lista
Os campos da lista, como listValue
no exemplo acima, podem ser avaliados
pelo tamanho, o conteúdo e se há algum elemento
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 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".
Solução de problemas de erros de 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, 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á gerado 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
Erro. Destacar esse ícone exibe uma dica com mais informações sobre o erro de sintaxe.O serviço de Políticas da organização compila e valida as condições que você cria, retornando um erro se a condição não for sintaticamente correta. No entanto, algumas condições 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 tenta acessar um índice de lista ou 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, marque list.size()
antes de referenciar um elemento de lista específico ou use has()
antes de referenciar um elemento de mapa.
Serviços compatíveis
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 ver uma lista de serviços compatíveis com 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 vulnerabilidades na 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 mais sobre como validar e monitorar políticas da organização com o Config Validator.