Aplica restricciones personalizadas para proyectos

Como administrador de la organización, puedes crear restricciones personalizadas para los trabajos y servicios de Cloud Run. Las políticas de la organización aplican estas restricciones personalizadas a nivel del proyecto, la carpeta o la organización.

En esta página, se detalla cómo crear restricciones personalizadas para servicios y trabajos, y aplicarlas a nivel del proyecto. Para obtener información sobre las políticas personalizadas de la organización, consulta Crea y administra políticas personalizadas de la organización.

Cloud Run te permite escribir cualquier cantidad de restricciones personalizadas con la mayoría de los campos configurados por el usuario en la API de Cloud Run Admin. Por ejemplo, puedes crear una restricción personalizada que bloquee los servicios o trabajos para que no establezcan la etapa de lanzamiento en alfa o beta.

Una vez aplicadas, las solicitudes que infrinjan una política que aplique una restricción personalizada muestran un mensaje de error en gcloud CLI y en los registros de Cloud Run. El mensaje de error contiene el ID de la restricción y la descripción de la restricción personalizada que se incumplió.

Antes de comenzar

  • Debes tener el rol de administrador de políticas de la organización roles/orgpolicy.policyAdmin para crear y ver las políticas de la organización del cliente. Consulta los roles requeridos.

Limitaciones

Personaliza restricciones comunes

En los siguientes ejemplos, se muestra cómo especificar restricciones personalizadas para casos de uso comunes con gcloud CLI. Si quieres obtener instrucciones para la consola de Google Cloud, consulta Crea y administra políticas personalizadas de la organización.

Restringe la configuración de entrada

Crea una restricción personalizada que restringa la configuración de entrada de los servicios de Cloud Run nuevos o revisados y, luego, aplica la restricción personalizada a nivel del proyecto.

Para especificar una restricción personalizada que requiera que un servicio se configure como "Interno" con Google Cloud CLI, sigue estos pasos:

  1. Crea un archivo nuevo ingressConstraint.yaml con el siguiente contenido:

      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

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  2. Ejecuta el siguiente comando para agregar la restricción personalizada:

    gcloud org-policies set-custom-constraint /ingressConstraint.yaml
  3. Especifica una política nueva que aplique la restricción personalizada creada en el paso anterior. Para ello, crea un archivo enforceIngressConstraint.yaml nuevo con el siguiente contenido:

      name: projects/PROJECT_ID/policies/ingressInternal
      spec:
        rules:
          - enforce: true

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  4. Ejecuta el siguiente comando para configurar la política nueva:

    gcloud org-policies set-policy /enforceIngressConstraint.yaml

Requiere un límite máximo de memoria

Exige que todos los contenedores de servicios de Cloud Run nuevos o revisados tengan un límite de memoria establecido en menos de un valor determinado.

Para requerir un límite de memoria personalizado para el contenedor del servicio con Google Cloud CLI, sigue estos pasos:

  1. Crea un archivo nuevo memorylimitConstraint.yaml con el siguiente contenido:

      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

    Reemplaza lo siguiente:

    • ORGANIZATION_ID por el ID de tu organización.
    • MEMORY_LIMIT por el límite de memoria que deseas establecer.
  2. Ejecuta el siguiente comando para agregar la restricción personalizada:

    gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
  3. Especifica una política nueva que aplique la restricción personalizada creada en el paso anterior. Para ello, crea un archivo enforceMemorylimitConstraint.yaml nuevo con el siguiente contenido:

      name: projects/PROJECT_ID/policies/custom.memoryLimit
      spec:
        rules:
          - enforce: true

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  4. Ejecuta el siguiente comando para configurar la política nueva:

    gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml

Evita las etapas de lanzamiento que no sean de DG

Evita que la etapa de lanzamiento de Cloud Run cambie de la versión DG predeterminada a alfa o beta.

Para evitar que la etapa de lanzamiento se establezca en una etapa de lanzamiento que no sea de DG, haz lo siguiente:

  1. Crea un archivo nuevo launchstageConstraint.yaml con el siguiente contenido:

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

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  2. Ejecuta el siguiente comando para agregar la restricción personalizada:

    gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
  3. Especifica una política nueva que aplique la restricción personalizada creada en el paso anterior. Para ello, crea un archivo enforceLaunchstageConstraint.yaml nuevo con el siguiente contenido:

      name: projects/PROJECT_ID/policies/launchStage
      spec:
        rules:
          - enforce: true

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  4. Ejecuta el siguiente comando para configurar la política nueva:

    gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml

Exigir Autorización Binaria

Exige que Autorización binaria se configure como default.

Para exigir que la autorización binaria se establezca en default, sigue estos pasos:

  1. Crea un archivo nuevo binaryauthorizationConstraint.yaml con el siguiente contenido:

      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.

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  2. Ejecuta el siguiente comando para agregar la restricción personalizada:

    gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
  3. Para especificar la nueva política que aplica la restricción personalizada creada en el paso anterior, crea un archivo enforceBinaryauthorizationConstraint.yaml nuevo con el siguiente contenido:

      name: projects/PROJECT_ID/policies/binaryAuthorization
      spec:
        rules:
          - enforce: true

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  4. Ejecuta el siguiente comando para configurar la política nueva:

    gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml

Solicita un sondeo en funcionamiento para cada contenedor

Exige que los servicios tengan una prueba en funcionamiento para cada contenedor. Para ello, requiere que el campo livenessProbe.initialDelaySeconds se establezca en un valor.

Para requerir una prueba en funcionamiento para cada contenedor, sigue estos pasos:

  1. Crea un archivo nuevo livenessprobeConstraint.yaml con el siguiente contenido:

      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.

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  2. Ejecuta el siguiente comando para agregar la restricción personalizada:

    gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
  3. Especifica una política nueva que aplique la restricción personalizada creada en el paso anterior. Para ello, crea un archivo enforceLivenessprobeConstraint.yaml nuevo con el siguiente contenido:

      name: projects/PROJECT_ID/policies/livenessProbe
      spec:
        rules:
          - enforce: true

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  4. Ejecuta el siguiente comando para configurar la política nueva:

    gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml

Requiere un sidecar a través de un prefijo y un puerto de imagen de contenedor

Requiere que un servicio tenga al menos un contenedor sidecar que use una imagen que comience con un prefijo especificado y un puerto igual a un número especificado.

Para exigir que un contenedor comience con un prefijo establecido y use PORT = 8081, sigue estos pasos:

  1. Crea un archivo nuevo requireSidecarConstraint.yaml con el siguiente contenido:

      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

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  2. Ejecuta el siguiente comando para agregar la restricción personalizada:

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

  3. Especifica una política nueva que aplique la restricción personalizada creada en el paso anterior. Para ello, crea un archivo enforceRequireSidecarConstraint.yaml nuevo con el siguiente contenido:

      name: projects/PROJECT_ID/policies/requireSidecar
      spec:
        rules:
          - enforce: true

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  4. Ejecuta el siguiente comando para configurar la política nueva:

    gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml