Applicare vincoli personalizzati per i progetti

In qualità di amministratore dell'organizzazione, puoi creare vincoli personalizzati per Servizi e job di Cloud Run. I criteri dell'organizzazione applicano a livello di progetto, cartella o organizzazione.

Questa pagina descrive in dettaglio come creare vincoli personalizzati per servizi e job e come applicarli a livello di progetto. Per informazioni sui criteri per le organizzazioni personalizzate, vedi Creare e gestire i criteri per le organizzazioni personalizzate.

Cloud Run ti consente di scrivere un numero qualsiasi di vincoli personalizzati utilizzando la maggior parte dei campi configurati dall'utente nell'API Cloud Run Admin. Ad esempio, puoi creare un vincolo personalizzato che impedisca ai servizi o ai job di impostare la fase di lancio su Alpha o Beta.

Una volta applicate, le richieste che violano un criterio che applica un vincolo personalizzato mostrano un messaggio di errore nella CLI gcloud e nei log di Cloud Run. Il messaggio di errore contiene l'ID vincolo e la descrizione del vincolo personalizzato violato.

Prima di iniziare

  • Per creare e visualizzare i criteri dell'organizzazione del cliente, devi disporre del ruolo Amministratore dei criteri dell'organizzazione roles/orgpolicy.policyAdmin. Consulta i ruoli obbligatori.

Limitazioni

Personalizzare i vincoli comuni

Gli esempi riportati di seguito mostrano come specificare vincoli personalizzati per i casi d'uso comuni utilizzando l'interfaccia a riga di comando gcloud. Per la console Google Cloud istruzioni, vedi Creazione e gestione di criteri dell'organizzazione personalizzati.

Limitare le impostazioni di traffico in entrata

Crea un vincolo personalizzato che limita l'impostazione del traffico in entrata dei servizi Cloud Run nuovi o rivisti e applicare a livello di progetto.

Per specificare un vincolo personalizzato che richiede l'impostazione di un servizio su "Interno" utilizzando Google Cloud CLI, segui questi passaggi:

  1. Crea un nuovo file ingressConstraint.yaml con i seguenti contenuti:

      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

    Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

  2. Aggiungi il vincolo personalizzato eseguendo questo comando:

    gcloud org-policies set-custom-constraint /ingressConstraint.yaml
  3. Specifica un nuovo criterio che applichi il vincolo personalizzato creato nella passaggio precedente creando un nuovo file enforceIngressConstraint.yaml con i seguenti contenuti:

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

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  4. Imposta il nuovo criterio eseguendo il seguente comando:

    gcloud org-policies set-policy /enforceIngressConstraint.yaml

Richiedere un limite di memoria massimo

Richiedi che tutti i contenitori dei servizi Cloud Run nuovi o rivisti abbiano un limite di memoria impostato su un valore inferiore a un determinato valore.

Per richiedere un limite di memoria personalizzato per il container del servizio utilizzando Google Cloud CLI, esegui questi passaggi:

  1. Crea un nuovo file memorylimitConstraint.yaml con i seguenti contenuti:

      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

    Sostituisci:

    • ORGANIZATION_ID con l'ID della tua organizzazione.
    • MEMORY_LIMIT con il limite di memoria che vuoi impostare.
  2. Aggiungi il vincolo personalizzato eseguendo il seguente comando:

    gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
  3. Specifica un nuovo criterio che applichi il vincolo personalizzato creato nel passaggio precedente creando un nuovo file enforceMemorylimitConstraint.yaml con i seguenti contenuti:

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

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  4. Imposta il nuovo criterio eseguendo questo comando:

    gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml

Impedisci le fasi di lancio non GA

Impedisci la fase di lancio di Cloud Run da GA predefinita ad Alpha o Beta.

Per evitare che la fase di lancio sia impostata su una fase non GA, procedi nel seguente modo: seguenti:

  1. Crea un nuovo file launchstageConstraint.yaml con quanto segue contenuti:

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

    Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

  2. Aggiungi il vincolo personalizzato eseguendo questo comando:

    gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
  3. Specifica un nuovo criterio che applichi il vincolo personalizzato creato nel passaggio precedente creando un nuovo file enforceLaunchstageConstraint.yaml con i seguenti contenuti:

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

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  4. Imposta il nuovo criterio eseguendo il seguente comando:

    gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml

Richiesta autorizzazione binaria

Richiede Autorizzazione binaria impostato su default.

Per richiedere che Autorizzazione binaria sia impostata su default, segui questi passaggi:

  1. Crea un nuovo file binaryauthorizationConstraint.yaml con quanto segue contenuti:

      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.

    Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

  2. Aggiungi il vincolo personalizzato eseguendo il seguente comando:

    gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
  3. Specifica il nuovo criterio che applica il vincolo personalizzato creato nella passaggio precedente creando un nuovo enforceBinaryauthorizationConstraint.yaml file con i seguenti contenuti:

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

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  4. Imposta il nuovo criterio eseguendo questo comando:

    gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml

Richiedere un probe di attività per ogni contenitore

Richiedi che i servizi abbiano un probe di attività per ogni container, richiedendo che livenessProbe.initialDelaySeconds sia impostato su un valore.

Per richiedere un probe di attività per ogni container, segui questi passaggi:

  1. Crea un nuovo file livenessprobeConstraint.yaml con i seguenti contenuti:

      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.

    Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

  2. Aggiungi il vincolo personalizzato eseguendo questo comando:

    gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
  3. Specifica un nuovo criterio che applichi il vincolo personalizzato creato nel passaggio precedente creando un nuovo file enforceLivenessprobeConstraint.yaml con i seguenti contenuti:

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

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  4. Imposta il nuovo criterio eseguendo il seguente comando:

    gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml

Richiedi un file collaterale tramite un prefisso e una porta dell'immagine container

Richiedi che un servizio abbia almeno un container sidecar che utilizzi un'immagine che inizia con un prefisso specificato e una porta uguale a un numero specificato.

Per richiedere che un contenitore inizi con un prefisso impostato e utilizzi PORT = 8081:

  1. Crea un nuovo file requireSidecarConstraint.yaml con quanto segue contenuti:

      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

    Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

  2. Aggiungi il vincolo personalizzato eseguendo questo comando:

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

  3. Specifica un nuovo criterio che applichi il vincolo personalizzato creato nella passaggio precedente creando un nuovo file enforceRequireSidecarConstraint.yaml con i seguenti contenuti:

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

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  4. Imposta il nuovo criterio eseguendo il seguente comando:

    gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml