Gestire le risorse delle funzioni utilizzando vincoli personalizzati

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

I criteri dell'organizzazione forniscono vincoli predefiniti per vari servizi Google Cloud. Tuttavia, se vuoi più granulare, personalizzabile controllo sui campi specifici con restrizioni nella tua organizzazione criteri, puoi anche creare criteri dell'organizzazione personalizzati.

Questa pagina spiega come creare vincoli personalizzati per le funzioni create utilizzando API Cloud Functions v2 e applica a livello di progetto. Per informazioni sui criteri dell'organizzazione personalizzati, consulta Creare e gestire criteri dell'organizzazione personalizzati.

Vantaggi

  • Gestione dei costi: utilizza i criteri dell'organizzazione per limitare le dimensioni e i tipi di istanze VM e di dischi che possono essere utilizzati nella tua organizzazione. Puoi anche limitare la famiglia di macchine utilizzata per l'istanza VM.
  • Sicurezza, conformità e governance:
    • Per applicare i requisiti di sicurezza, puoi richiedere regole specifiche per le porte del firewall sulle VM.
    • Per supportare l'isolamento hardware o la conformità delle licenze, puoi richiedere che tutte le VM all'interno di un progetto o di una cartella specifica vengano eseguite su nodi single-tenant.
    • Per gestire gli script di automazione, puoi utilizzare un'organizzazione personalizzata per verificare che le etichette corrispondano alle espressioni necessarie.

Eredità dei criteri

Quando un criterio dell'organizzazione viene applicato a una risorsa, a tutti i discendenti eredita anche il criterio dell'organizzazione. Ad esempio, se applichi un criterio su una cartella, Google Cloud applica i criteri a tutti i progetti . Per scoprire di più su questo comportamento e su come modificarlo, consulta Regole di valutazione della gerarchia.

Prezzi

Il servizio di criteri dell'organizzazione, inclusi i criteri dell'organizzazione predefiniti e personalizzati, viene fornito senza costi.

Limitazioni

Ai criteri personalizzati dell'organizzazione si applicano le seguenti limitazioni:

  • Non viene applicato per i nomi delle istanze VM quando utilizzi l'API di inserimento collettivo.
  • Applicato solo in CREATE per le risorse Compute Engine.
  • Disponibile solo su Cloud Functions API v2. Non possono essere applicati alle funzioni Cloud Run (1ª generazione.).
  • Proteggi le funzioni solo quando utilizzi le API Cloud Functions v2. Le funzioni di Cloud Run possono essere modificate anche dell'API Cloud Run. Per una maggiore protezione, potrebbero servirti per applicare vincoli personalizzati anche su Cloud Run.

Prima di iniziare

Ruoli obbligatori

Creare un vincolo personalizzato

Un vincolo personalizzato viene definito in un file YAML dalle risorse, dai metodi le condizioni e le azioni supportate dal servizio per applicare il criterio dell'organizzazione. Le condizioni per i vincoli personalizzati vengono definite utilizzando Common Expression Language (CEL). Per ulteriori informazioni su come creare condizioni nei vincoli personalizzati utilizzando CEL, consulta la sezione CEL di Creare e gestire vincoli personalizzati.

Per specificare un vincolo personalizzato che impedisca la creazione di tutte le funzioni con un massimo di istanze superiore a 150, procedi nel seguente modo:

  • Crea un nuovo file maxInstanceConstraint.yaml con i seguenti contenuti:

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - cloudfunctions.googleapis.com/Function
    methodTypes: 
    - CREATE
    - UPDATE
    condition: resource.serviceConfig.maxInstanceCount > 150
    actionType: DENY
    displayName: Deny functions with max instance count greater than 150
    description: Functions cannot be created with a max instance count greater than 150
    

Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione, ad esempio 123456789.

Per ulteriori informazioni, vedi Definizione di vincoli personalizzati.

Configurare un vincolo personalizzato

Dopo aver creato il file YAML per un nuovo vincolo personalizzato, devi configurarlo per disponibile per i criteri dell'organizzazione nella tua organizzazione. Per impostare un vincolo personalizzato, utilizza il comando gcloud org-policies set-custom-constraint:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
Sostituisci CONSTRAINT_PATH con il percorso completo del tuo personalizzato. Ad esempio: /home/user/customconstraint.yaml. Al termine, troverai i vincoli personalizzati come criteri dell'organizzazione disponibili nel tuo elenco di criteri dell'organizzazione di Google Cloud. Per verificare che il vincolo personalizzato esista, utilizza il metodo Comando gcloud org-policies list-custom-constraints:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Sostituisci ORGANIZATION_ID con l'ID della risorsa della tua organizzazione. Per ulteriori informazioni, consulta Visualizzare i criteri dell'organizzazione.

Applicare un criterio dell'organizzazione personalizzato

Puoi applicare un vincolo booleano creando un criterio dell'organizzazione che vi faccia riferimento. e applicando il criterio dell'organizzazione a una risorsa Google Cloud.

Console

Per applicare un vincolo booleano:

  1. Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Seleziona il selettore del progetto nella parte superiore della pagina.
  3. Nel selettore di progetti, seleziona il progetto per cui vuoi impostare il criterio dell'organizzazione.
  4. Seleziona il vincolo dall'elenco nella pagina Criteri dell'organizzazione. Dovrebbe essere visualizzata la pagina Dettagli norme relativa alla limitazione.
  5. Per configurare il criterio dell'organizzazione per questa risorsa, fai clic su Gestisci criterio.
  6. Nella pagina Modifica criterio, seleziona Sostituisci criterio della risorsa padre.
  7. Fai clic su Aggiungi una regola.
  8. In Applicazione, seleziona se l'applicazione di questo criterio dell'organizzazione deve essere attivata o disattivata.
  9. Facoltativamente, per rendere i criteri dell'organizzazione condizionali su un tag, fai clic su Aggiungi condizione. Tieni presente che se aggiungi una regola condizionale a un criterio dell'organizzazione, devi aggiungere almeno una regola non condizionale, altrimenti il criterio non può essere salvato. Per maggiori informazioni i dettagli, vedi Impostazione di un criterio dell'organizzazione con i tag.
  10. Se si tratta di un vincolo personalizzato, puoi fare clic su Prova modifiche per simulare l'effetto di questo criterio dell'organizzazione. Per ulteriori informazioni, consulta Testare le modifiche ai criteri dell'organizzazione con Policy Simulator.
  11. Per completare e applicare il criterio dell'organizzazione, fai clic su Imposta criterio. Le norme Possono trascorrere fino a 15 minuti prima che le modifiche diventino effettive.

gcloud

Per creare un criterio dell'organizzazione che applichi un vincolo booleano, crea un file YAML del criterio che faccia riferimento al vincolo:

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

Sostituisci quanto segue:

  • PROJECT_ID: il progetto su cui vuoi applicare il vincolo.
  • CONSTRAINT_NAME: il nome definito per il vincolo personalizzato. Per ad esempio custom.cloudFunctionsMaxInstanceLimit.

Per applicare il criterio dell'organizzazione contenente il vincolo, esegui questo comando:

    gcloud org-policies set-policy POLICY_PATH
    

Sostituisci POLICY_PATH con il percorso completo del criterio dell'organizzazione YAML. L'applicazione del criterio potrebbe richiedere fino a 15 minuti.

Testa il criterio dell'organizzazione personalizzato

Per creare una funzione con un'istanza massima di 151, esegui il seguente comando:

gcloud functions deploy FUNCTION_NAME \
  ...
  --max-instances 151

Viene visualizzato il seguente output:

 Operation denied by custom org policy on resource: ["customConstraints/custom.cloudFunctionsMaxInstanceLimit": "Cloud Functions cannot be created with a max instance count greater than 150."]

Risorse e operazioni supportate dalle funzioni Cloud Run

Tipo di risorsa Tipi di metodi Riferimento API
cloudfunctions.googleapis.com/Function CREATE, UPDATE projects.locations.functions

Esempi comuni di criteri dell'organizzazione

La seguente tabella fornisce la sintassi di alcuni criteri dell'organizzazione personalizzati che potresti trovare utili:

Descrizione Sintassi del vincolo
Impedire la creazione di funzioni con una lingua specifica
    name: organizations/ORGANIZATION_IDcustomConstraints/custom.cloudFunctionRuntimeBlock
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.runtime == "python312"
    action_type: DENY
    display_name: Deny functions using Python 3.12
    description: Functions cannot be created with Python 3.12 as the language runtime
Richiedere alle funzioni di utilizzare un pool di worker specifico
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsWorkerPool
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.workerPool == "WORKER_POOL"
    action_type: DENY
    display_name: Require worker pool
    description: Functions must use a worker pool 
Sostituisci WORKER_POOL con il nome del pool di worker Cloud Build.
Richiedono che le funzioni archivino tutte le immagini container in un repository di immagini specifico
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsRepository
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.dockerRepository.startsWith("REPO_PATH")
    action_type: DENY
    display_name: Image repository constraint
    description: Functions must push images to a central image repository under REPO_PATH
Sostituisci REPO_PATH con l'URI dell'URL del repository di immagini in cui vuoi che tutte le funzioni memorizzino le proprie immagini container.

Passaggi successivi