Aplicar restrições personalizadas a projetos

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

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

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:

  1. 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.

  2. Para adicionar a restrição personalizada, execute o seguinte comando:

    gcloud org-policies set-custom-constraint /ingressConstraint.yaml
  3. 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.

  4. 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:

  1. 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.
  2. Para adicionar a restrição personalizada, execute o seguinte comando:

    gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
  3. 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.

  4. 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:

  1. 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.

  2. Para adicionar a restrição personalizada, execute o seguinte comando:

    gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
  3. 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.

  4. 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:

  1. 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.

  2. Para adicionar a restrição personalizada, execute o seguinte comando:

    gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
  3. 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.

  4. 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:

  1. 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.

  2. Para adicionar a restrição personalizada, execute o seguinte comando:

    gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
  3. 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.

  4. 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:

  1. 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.

  2. Para adicionar a restrição personalizada, execute o seguinte comando:

      gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
      

  3. 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.

  4. Defina a nova política executando o seguinte comando:

    gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml