Esta página detalha como criar restrições personalizadas para serviços e jobs do Cloud Run e aplicá-las no nível do projeto. Para informações sobre políticas personalizadas da organização, consulte Como criar e gerenciar políticas personalizadas da organização.
Se você criou ou implantou funções do Cloud Run usando comandos
gcloud functions
ou as
APIs do Cloud Functions v2, consulte
Gerenciar recursos de função usando restrições personalizadas.
As políticas da organização doGoogle Cloud oferecem 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 restrições chamado restrições que se aplicam aos recursos doGoogle Cloud e aos descendentes desses recursos na hierarquia de recursos doGoogle Cloud . É possível aplicar políticas da organização no nível da organização, de pastas ou de projetos.
A política da organização oferece restrições predefinidas para vários serviços doGoogle Cloud . No entanto, se você quiser um controle mais granular e personalizável sobre os campos específicos restritos nas suas políticas da organização, crie também políticas da organização personalizadas.
Vantagens
- Gerenciamento de custos: use políticas da organização para restringir a instância de VM e os tamanhos e tipos de disco que podem ser usados na sua organização Também é possível restringir a família de máquinas usada para a instância de VM.
- Segurança, conformidade e governança:
- Para aplicar requisitos de segurança, é possível exigir regras de porta de firewall específicas nas VMs.
- Para oferecer suporte ao isolamento de hardware ou à conformidade com o licenciamento, é possível exigir que todas as VMs em um projeto ou pasta específico sejam executadas em nós de locatário individual.
- Para controlar os scripts de automação, use políticas personalizadas da organização para verificar se os rótulos correspondem às expressões necessárias.
O Cloud Run permite gravar qualquer número de restrições personalizadas usando a maioria dos campos configurados pelo usuário na API Cloud Run Admin. Por exemplo, é possível criar uma restrição personalizada que especifique que um serviço seja definido como interno ou que impeça estágios de lançamento que não sejam de lançamento geral.
Depois de aplicadas, as solicitações que violam uma política que impõe uma restrição personalizada mostram uma mensagem de erro na CLI gcloud e nos registros do Cloud Run. A mensagem de erro contém o ID da restrição e a descrição da restrição personalizada violada.
Herança de políticas
Por padrão, as políticas da organização são herdadas pelos descendentes dos recursos em que a política é aplicada. Por exemplo, se você aplicar uma política a uma pasta, o Google Cloud vai aplicá-la a todos os projetos dessa pasta. Para saber mais sobre esse comportamento e como alterá-lo, consulte Regras de avaliação de hierarquia.
Preços
O Organization Policy Service, incluindo políticas predefinidas e personalizadas, é oferecido sem custos financeiros.
Limitações
- As restrições personalizadas do Cloud Run precisam ser especificadas usando as especificações de campo da API Cloud Run Admin v1.
- Rótulos e campos de nível superior não são aceitos.
Antes de começar
- Certifique-se de conhecer o ID 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
)
no recurso da 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.
Criar uma restrição personalizada
Uma restrição personalizada é definida em um arquivo YAML pelos recursos, métodos, condições e ações compatíveis com o serviço em que você está aplicando a política da organização. As condições das restrições personalizadas são definidas usando a Common Expression Language (CEL). Para mais informações sobre como criar condições em restrições personalizadas usando a CEL, consulte a seção CEL de Como criar e gerenciar restrições personalizadas.
Para criar um arquivo YAML para uma restrição personalizada do Cloud Run, consulte o exemplo a seguir:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- run.googleapis.com/Service
methodTypes:
- CREATE
- UPDATE
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.ingressInternal. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo,organizations/123456789/customConstraints/custom
).CONDITION
: uma condição de CEL gravada em uma representação de um recurso de serviço compatível. Esse campo tem um comprimento máximo de 1000 caracteres. Por exemplo, condition: "'run.googleapis.com/ingress' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/ingress'] == 'internal'".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, por exemplo, "Requer que a entrada seja definida como interna". Esse campo tem um comprimento máximo de 2000 caracteres.
Para mais informações sobre como criar uma restrição personalizada, consulte Como definir restrições personalizadas.
Configurar uma restrição personalizada
Depois de criar o arquivo YAML para uma nova restrição personalizada, faça a configuração necessária para disponibilizá-la para as políticas da organização. Para configurar uma restrição personalizada, use o comandogcloud org-policies set-custom-constraint
:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH
pelo caminho completo
para o 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 lista de políticas da organização do Google Cloud .
Para verificar a existência da restrição personalizada, 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.
Aplicar uma restrição personalizada
Para aplicar uma restrição, crie uma política da organização que faça referência a ela e aplique essa política 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 uma restrição para acessar a página Detalhes da política associada.
- Para configurar 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 recurso pai.
- Clique em Adicionar regra.
- Na seção Aplicação, escolha entre ativar ou desativar a aplicação dessa política da organização.
- 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 para que a política seja salva. Para mais informações, consulte Como configurar uma política da organização com tags.
- Clique em Testar mudanças para simular o efeito da política da organização. A simulação da política não está disponível para restrições gerenciadas legadas. Para mais informações, consulte Testar mudanças 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 com regras booleanas, crie um arquivo YAML para a 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 a restrição personalizada. Por exemplo,custom.ingressInternal
.
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 para o arquivo YAML da
política da organização. A política leva até 15 minutos para entrar em vigor.
Testar a restrição personalizada
Para testar o exemplo que restringe as configurações de entrada, tente implantar um
serviço do Cloud Run no projeto com a entrada definida como all
:
gcloud run deploy org-policy-test \
--project=PROJECT_ID \
--region=REGION_ID \
--ingress=all
A saída é esta:
Operation denied by custom org policies: ["customConstraints/custom.ingressConstraint": "Require ingress to be set to internal."]
Exemplos de políticas personalizadas da organização para casos de uso comuns
A tabela a seguir mostra exemplos de restrições personalizadas que podem ser úteis com os serviços e jobs do Cloud Run:
Descrição | Sintaxe de restrição |
---|---|
Exija que um serviço do Cloud Run seja definido como interno. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.ingressInternal resourceTypes: - run.googleapis.com/Service methodTypes: - CREATE - UPDATE condition: "'run.googleapis.com/ingress' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/ingress'] == 'internal'" actionType: ALLOW displayName: IngressInternal description: Require ingress to be set to internal. |
Descrição | Sintaxe de restrição |
Exija um limite de memória personalizado para todos os contêineres de um serviço do Cloud Run. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.memoryLimit resourceTypes: - run.googleapis.com/Service methodTypes: - CREATE - UPDATE condition: "resource.spec.template.spec.containers.all(container, 'memory' in container.resources.limits && container.resources.limits['memory'] <= 'MEMORY_LIMIT')" actionType: ALLOW displayName: memoryLimitCap description: Require the container memory limit to be set to <= MEMORY_LIMIT. |
Descrição | Sintaxe de restrição |
Impedem que o estágio de lançamento do Cloud Run seja alterado do padrão GA para um estágio de lançamento não-GA. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.launchStage resourceTypes: - run.googleapis.com/Service methodTypes: - CREATE - UPDATE condition: "!('run.googleapis.com/launch-stage' in resource.metadata.annotations) || resource.metadata.annotations['run.googleapis.com/launch-stage'] == 'GA'" actionType: ALLOW displayName: launchStage description: Only allow users to create and update Cloud Run services with either an unset launch stage (default is GA) or a launch stage explicitly set to GA. |
Descrição | Sintaxe de restrição |
Exija que a autorização binária seja definida como padrão. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.binaryAuthorization resourceTypes: - run.googleapis.com/Service methodTypes: - CREATE - UPDATE condition: "'run.googleapis.com/binary-authorization' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/binary-authorization'] == 'default'" actionType: ALLOW displayName: binaryAuthorization description: Require binaryAuthorization to be set to default. |
Descrição | Sintaxe de restrição |
Exija que os serviços tenham uma sondagem de atividade para cada contêiner. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.livenessProbe resourceTypes: - run.googleapis.com/Service methodTypes: - CREATE - UPDATE condition: "resource.spec.template.spec.containers.all(container, has(container.livenessProbe.initialDelaySeconds))" actionType: ALLOW displayName: livenessProbe description: Require all containers to have a liveness probe configured with initialDelaySeconds. |
Descrição | Sintaxe de restrição |
Exija que um serviço tenha pelo menos um contêiner secundário que use uma imagem que começa com um prefixo especificado e uma porta igual a um número especificado. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requireSidecar resourceTypes: - run.googleapis.com/Service methodTypes: - CREATE - UPDATE condition: "resource.spec.template.spec.containers.exists(container, container.image.startsWith('us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/') && container.ports.exists(port, port.containerPort == 8081))" actionType: ALLOW displayName: requireSidecar description: Require at least one container with an image that starts with "us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/" and uses port 8081. |
Descrição | Sintaxe da restrição |
Permite apenas a criação e edição de funções. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.allowcrf resource_types: run.googleapis.com/Service method_types: - CREATE - UPDATE condition: "resource.spec.template.spec.containers.exists(container, container.image.startsWith('gcr.io/cloudrun/placeholder')) || (has(resource.metadata.annotations) && 'run.googleapis.com/build-function-target' in resource.metadata.annotations)" action_type: ALLOW display_name: runFunctionsOnly description: Only allow the creation and editing of Cloud Run functions |
Descrição | Sintaxe da restrição |
Exija que o URL run.app padrão seja desativado para serviços do Cloud Run. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.disableRunApp
resourceTypes:
- run.googleapis.com/Service
methodTypes:
- CREATE
- UPDATE
condition: "'run.googleapis.com/default-url-disabled' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/default-url-disabled'] == 'true'"
actionType: ALLOW
displayName: disableRunApp
description: Require services to disable |
A seguir
- Consulte Introdução ao serviço Política da organização para saber mais sobre as políticas da organização.
- Saiba mais sobre como criar e gerenciar políticas da organização.
- Veja a lista completa de restrições da política da organização predefinidas.