Como administrador da organização, você pode criar restrições personalizadas para serviços e jobs do Cloud Run. As políticas da organização aplicam essas restrições personalizadas no nível do projeto, da pasta ou da organização.
Esta página detalha como criar restrições personalizadas para serviços e jobs 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.
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 impeça que serviços ou jobs definam o estágio de lançamento como Alfa ou Beta.
Depois de aplicadas, as solicitações que violam uma política que impõe uma restrição personalizada mostram uma mensagem de erro na gcloud CLI 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.
Antes de começar
- Você precisa ter a função de administrador da política da organização
roles/orgpolicy.policyAdmin
para criar e acessar as políticas da organização do cliente. Consulte papéis necessários.
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.
Personalizar restrições comuns
Os exemplos a seguir demonstram como especificar restrições personalizadas para casos de uso comuns usando a gcloud CLI. Para instruções do console do Google Cloud, consulte Criar e gerenciar políticas personalizadas da organização.
- Restringir as configurações de entrada
- Exigir um limite máximo de memória
- Evitar estágios de lançamento que não são de disponibilidade geral
- Exigir autorização binária
- Exigir uma sondagem de atividade para cada contêiner
- Exigir um arquivo secundário por um prefixo e porta de imagem do contêiner
Restringir as configurações de entrada
Crie uma restrição personalizada que restringe a configuração de ingress de serviços novos ou revisados do Cloud Run e aplique a restrição personalizada no nível do projeto.
Para especificar uma restrição personalizada que exija que um serviço seja definido como "interno" usando a CLI do Google Cloud, siga estas etapas:
Crie um novo arquivo
ingressConstraint.yaml
com o seguinte conteúdo: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
Substitua ORGANIZATION_ID pelo ID da organização.
Para adicionar a restrição personalizada, execute o seguinte comando:
gcloud org-policies set-custom-constraint /ingressConstraint.yaml
Especifique uma nova política que aplique a restrição personalizada criada na etapa anterior criando um novo arquivo
enforceIngressConstraint.yaml
com o seguinte conteúdo:name: projects/PROJECT_ID/policies/ingressInternal spec: rules: - enforce: true
Substitua PROJECT_ID pelo ID do seu projeto.
Defina a nova política executando o seguinte comando:
gcloud org-policies set-policy /enforceIngressConstraint.yaml
Exigir um limite máximo de memória
Exija que todos os contêineres de serviços novos ou revisados do Cloud Run tenham um limite de memória definido como menor que um valor específico.
Para exigir um limite de memória personalizado para o contêiner do serviço usando a CLI do Google Cloud, siga estas etapas:
Crie um novo arquivo
memorylimitConstraint.yaml
com o seguinte conteúdo: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
Substitua:
- ORGANIZATION_ID pelo ID da organização.
- MEMORY_LIMIT pelo limite de memória que você quer definir.
Para adicionar a restrição personalizada, execute o seguinte comando:
gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
Especifique uma nova política que aplique a restrição personalizada criada na etapa anterior criando um novo arquivo
enforceMemorylimitConstraint.yaml
com o seguinte conteúdo:name: projects/PROJECT_ID/policies/custom.memoryLimit spec: rules: - enforce: true
Substitua PROJECT_ID pelo ID do seu projeto.
Defina a nova política executando o seguinte comando:
gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml
Evitar estágios de lançamento que não são de disponibilidade geral
Impedem que o estágio de lançamento do Cloud Run seja alterado do GA padrão para Alfa ou Beta.
Para evitar que o estágio de lançamento seja definido como um estágio de lançamento que não seja do GA, faça o seguinte:
Crie um novo arquivo
launchstageConstraint.yaml
com o seguinte conteúdo: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)" actionType: ALLOW displayName: launchStage description: Only allow unset launch stage (default is GA).
Substitua ORGANIZATION_ID pelo ID da organização.
Para adicionar a restrição personalizada, execute o seguinte comando:
gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
Especifique uma nova política que aplique a restrição personalizada criada na etapa anterior criando um novo arquivo
enforceLaunchstageConstraint.yaml
com o seguinte conteúdo:name: projects/PROJECT_ID/policies/launchStage spec: rules: - enforce: true
Substitua PROJECT_ID pelo ID do seu projeto.
Defina a nova política executando o seguinte comando:
gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml
Exigir autorização binária
Exija que a autorização binária seja
definida como default
.
Para exigir que a autorização binária seja definida como default
, siga estas etapas:
Crie um novo arquivo
binaryauthorizationConstraint.yaml
com o seguinte conteúdo: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.
Substitua ORGANIZATION_ID pelo ID da organização.
Para adicionar a restrição personalizada, execute o seguinte comando:
gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
Especifique a nova política que aplica a restrição personalizada criada na etapa anterior criando um novo arquivo
enforceBinaryauthorizationConstraint.yaml
com o seguinte conteúdo:name: projects/PROJECT_ID/policies/binaryAuthorization spec: rules: - enforce: true
Substitua PROJECT_ID pelo ID do seu projeto.
Defina a nova política executando o seguinte comando:
gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml
Exigir uma sondagem de atividade para cada contêiner
Exija que os serviços tenham uma sondagem de atividade
para cada contêiner exigindo que o campo livenessProbe.initialDelaySeconds
seja definido como um valor.
Para exigir uma sondagem de atividade para cada contêiner, siga estas etapas:
Crie um novo arquivo
livenessprobeConstraint.yaml
com o seguinte conteúdo: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.
Substitua ORGANIZATION_ID pelo ID da organização.
Para adicionar a restrição personalizada, execute o seguinte comando:
gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
Especifique uma nova política que aplique a restrição personalizada criada na etapa anterior criando um novo arquivo
enforceLivenessprobeConstraint.yaml
com o seguinte conteúdo:name: projects/PROJECT_ID/policies/livenessProbe spec: rules: - enforce: true
Substitua PROJECT_ID pelo ID do seu projeto.
Defina a nova política executando o seguinte comando:
gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml
Exigir um arquivo secundário por um prefixo e porta de imagem do contêiner
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.
Para exigir que um contêiner comece com um prefixo definido e use PORT = 8081
,
siga estas etapas:
Crie um novo arquivo
requireSidecarConstraint.yaml
com o seguinte conteúdo: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
Substitua ORGANIZATION_ID pelo ID da organização.
Para adicionar a restrição personalizada, execute o seguinte comando:
gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
Especifique uma nova política que aplique a restrição personalizada criada na etapa anterior criando um novo arquivo
enforceRequireSidecarConstraint.yaml
com o seguinte conteúdo:name: projects/PROJECT_ID/policies/requireSidecar spec: rules: - enforce: true
Substitua PROJECT_ID pelo ID do seu projeto.
Defina a nova política executando o seguinte comando:
gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml