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 un controllo più granulare e personalizzabile sui campi specifici limitati nelle norme dell'organizzazione, puoi anche creare norme dell'organizzazione personalizzate.

Questa pagina descrive in dettaglio come creare vincoli personalizzati per le funzioni create utilizzando le API Cloud Functions v2 e come applicarli 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 i criteri dell'organizzazione personalizzati per verificare che le etichette corrispondano alle espressioni necessarie.

Ereditarietà delle norme

Quando un criterio dell'organizzazione viene applicato a una risorsa, anche tutti i discendenti della risorsa ereditano il criterio dell'organizzazione. Ad esempio, se applichi un criterio a una cartella, Google Cloud lo applica a tutti i progetti nella cartella. 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 dell'organizzazione personalizzati si applicano le seguenti limitazioni:

  • Non viene applicato per i nomi delle istanze VM quando utilizzi l'API di inserimento collettivo.
  • Viene applicato solo al metodo CREATE per le risorse Compute Engine.
  • Disponibile solo nelle API Cloud Functions v2. Non possono essere applicati alle funzioni Cloud Run (1ª generazione.).
  • Proteggi le funzioni solo quando utilizzi le API Cloud Functions v2. Le funzioni Cloud Run possono essere modificate anche dall'API Cloud Run. Per una maggiore protezione, potresti dover anche applicare vincoli personalizzati 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, dalle condizioni e dalle azioni supportate dal servizio su cui stai applicando 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, consulta Definire vincoli personalizzati.

Configurare un vincolo personalizzato

Dopo aver creato il file YAML per un nuovo vincolo personalizzato, devi configurarlo per renderlo 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 file delle limitazioni personalizzate. Ad esempio: /home/user/customconstraint.yaml. Al termine, i vincoli personalizzati sono disponibili come criteri dell'organizzazione nell'elenco dei criteri dell'organizzazione di Google Cloud. Per verificare che la limitazione personalizzata esista, utilizza il 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 lo richiami e poi applicando questo criterio dell'organizzazione a una risorsa Google Cloud.

Console

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

    Vai a Criteri dell'organizzazione

  2. Nel selettore di progetti, seleziona il progetto per cui vuoi impostare il criterio dell'organizzazione.
  3. Nell'elenco della pagina Criteri organizzazione, seleziona il vincolo per visualizzare la pagina Dettagli criteri relativa al vincolo in questione.
  4. Per configurare il criterio dell'organizzazione per questa risorsa, fai clic su Gestisci criterio.
  5. Nella pagina Modifica criterio, seleziona Ignora criterio della risorsa padre.
  6. Fai clic su Aggiungi una regola.
  7. Nella sezione Applicazione, seleziona se l'applicazione di questo criterio dell'organizzazione è attivata o disattivata.
  8. (Facoltativo) Per rendere il criterio dell'organizzazione condizionale 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 ulteriori informazioni, consulta Impostare un criterio dell'organizzazione con tag.
  9. 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.
  10. Per completare e applicare il criterio dell'organizzazione, fai clic su Imposta criterio. L'applicazione del criterio può richiedere fino a 15 minuti.

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. Ad esempio, custom.cloudFunctionsMaxInstanceLimit.

Per applicare il criterio dell'organizzazione contenente la limitazione, esegui il seguente comando:

    gcloud org-policies set-policy POLICY_PATH
    

Sostituisci POLICY_PATH con il percorso completo del file YAML del criterio dell'organizzazione. L'applicazione del criterio può 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 dei vincoli
Impedire la creazione di funzioni con un linguaggio specifico
    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.
Richiedi che le funzioni memorizzino 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