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
- I vincoli personalizzati di Cloud Run devono essere specificati utilizzando le specifiche dei campi dell'API Cloud Run Admin v1.
- Le etichette e i campi di primo livello non sono supportati.
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 importazione
- Richiedi un limite massimo di memoria
- Impedire le fasi di lancio non GA
- Richiedi Autorizzazione binaria
- Richiedi un probe di attività per ogni container
- Richiedi un file collaterale tramite un prefisso e una porta dell'immagine container
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:
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.
Aggiungi il vincolo personalizzato eseguendo questo comando:
gcloud org-policies set-custom-constraint /ingressConstraint.yaml
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.
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:
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.
Aggiungi il vincolo personalizzato eseguendo il seguente comando:
gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
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.
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:
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.
Aggiungi il vincolo personalizzato eseguendo questo comando:
gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
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.
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:
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.
Aggiungi il vincolo personalizzato eseguendo il seguente comando:
gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
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.
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:
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.
Aggiungi il vincolo personalizzato eseguendo questo comando:
gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
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.
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
:
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.
Aggiungi il vincolo personalizzato eseguendo questo comando:
gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
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.
Imposta il nuovo criterio eseguendo il seguente comando:
gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml