Usa vincoli personalizzati

I criteri dell'organizzazione di Google Cloud offrono un sistema centralizzato e programmatico un controllo completo sulle risorse dell'organizzazione. Come amministratore dei criteri dell'organizzazione, puoi definire un criterio dell'organizzazione, un insieme di restrizioni denominate vincoli che si applicano le risorse Google Cloud e i discendenti di queste risorse nel Gerarchia delle risorse di Google Cloud. Puoi applicare i criteri dell'organizzazione all'indirizzo a livello di organizzazione, cartella o progetto.

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 vincoli personalizzati e utilizzare dei vincoli in un criterio dell'organizzazione.

Vantaggi

Puoi utilizzare un criterio dell'organizzazione personalizzato per consentire o negare su batch Dataproc serverless. Ad esempio, se una richiesta di creazione di un carico di lavoro batch non riesce a soddisfare la convalida di vincoli personalizzati come impostata dal criterio dell'organizzazione la richiesta avrà esito negativo e verrà restituito un errore al chiamante.

Eredità dei criteri

Per impostazione predefinita, i criteri dell'organizzazione vengono ereditati dai discendenti dei le risorse a cui applichi il criterio. 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 Criteri dell'organizzazione, inclusi i vincoli predefiniti e personalizzati, è disponibile su senza costi aggiuntivi.

Prima di iniziare

  1. Configurare il progetto
    1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
    2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    3. Make sure that billing is enabled for your Google Cloud project.

    4. Enable the Dataproc Serverless API.

      Enable the API

    5. Install the Google Cloud CLI.
    6. To initialize the gcloud CLI, run the following command:

      gcloud init
    7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    8. Make sure that billing is enabled for your Google Cloud project.

    9. Enable the Dataproc Serverless API.

      Enable the API

    10. Install the Google Cloud CLI.
    11. To initialize the gcloud CLI, run the following command:

      gcloud init
    12. Assicurati di conoscere ID organizzazione.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire i criteri dell'organizzazione, chiedi all'amministratore di concederti Ruolo IAM Amministratore criteri dell'organizzazione (roles/orgpolicy.policyAdmin) per la risorsa dell'organizzazione. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per gestire i criteri dell'organizzazione. Per vedere le autorizzazioni esatte obbligatorie, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per gestire i criteri dell'organizzazione sono necessarie le seguenti autorizzazioni:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

Potresti anche riuscire a ottenere queste autorizzazioni con ruoli personalizzati altri ruoli predefiniti.

Crea un vincolo personalizzato

Un vincolo personalizzato viene definito in un file YAML dalle risorse, dai metodi condizioni e azioni a cui è applicato. Dataproc Serverless supporta vincoli personalizzati applicati al metodo CREATE del BATCH risorsa (vedi Vincoli di Dataproc Serverless su risorse e operazioni).

Per creare un file YAML per un vincolo personalizzato Dataproc Serverless:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- dataproc.googleapis.com/Batch
methodTypes: 
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Sostituisci quanto segue:

  • ORGANIZATION_ID: l'ID della tua organizzazione, ad esempio 123456789.

  • CONSTRAINT_NAME: il nome che vuoi per il tuo nuovo un vincolo personalizzato. Un vincolo personalizzato deve iniziare con custom. e può includere solo lettere maiuscole, lettere minuscole o numeri, per ad esempio custom.batchMustHaveSpecifiedCategoryLabel. La lunghezza massima di questo campo è 70 senza contare il prefisso, ad esempio organizations/123456789/customConstraints/custom.

  • CONDITION: una condizione CEL scritta in base a di una risorsa di servizio supportata. Questo campo ha un limite massimo di 1000 caratteri. Consulta Risorse supportate per ulteriori informazioni sulle risorse disponibili per la scrittura delle condizioni. Condizione di esempio: ("category" in resource.labels) && (resource.labels['category'] in ['retail', 'ads', 'service']).

  • ACTION: l'azione da eseguire se la condizione è sono soddisfatte determinate condizioni. Può essere ALLOW o DENY.

  • DISPLAY_NAME: un nome semplice per di blocco. Nome visualizzato di esempio: "Applica 'categoria' batch' requisito dell'etichetta". Questo campo ha una lunghezza massima di 200 caratteri.

  • DESCRIPTION: una descrizione del del vincolo che viene visualizzato come messaggio di errore quando il criterio viene violato. Questo campo ha una lunghezza massima di 2000 caratteri. Descrizione di esempio: Consenti la creazione in batch Dataproc solo se presenta un 'categoria' etichetta con "retail", "ads" o "service" ".

Per saperne di più su come creare un vincolo personalizzato, consulta Definizione di vincoli personalizzati.

Configura un vincolo personalizzato

Dopo aver creato un nuovo vincolo personalizzato utilizzando Google Cloud CLI, devi configurarlo per disponibile per i criteri dell'organizzazione nella tua organizzazione. Per configurare 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 dell'organizzazione. Per ulteriori informazioni, vedi Visualizzazione dei criteri dell'organizzazione.

Applica un vincolo personalizzato

Puoi applicare un vincolo booleano creando un criterio dell'organizzazione che vi faccia riferimento. 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 di progetti nella parte superiore della pagina.
  3. Dal selettore di progetti, scegli il progetto per il quale vuoi impostare criterio dell'organizzazione.
  4. Seleziona il vincolo dall'elenco nella pagina Criteri dell'organizzazione. Dovrebbe essere visualizzata la pagina Dettagli criterio per il vincolo in questione.
  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, scegli se applicare questo criterio dell'organizzazione deve essere attivato o disattivato.
  9. Se vuoi, per applicare le condizioni del criterio dell'organizzazione a un tag, fai clic su Aggiungi condizione. Tieni presente che se aggiungi una regola condizionale a un'organizzazione devi aggiungere almeno una regola incondizionata. In caso contrario, la norma non potrà essere salvata. Per ulteriori 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 Testa modifiche per simulare l'effetto di questo criterio dell'organizzazione. Per ulteriori informazioni, vedi Testa 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 potrebbero essere necessari fino a 15 minuti.

gcloud

Per creare un criterio dell'organizzazione che applichi un vincolo booleano, crea un criterio File YAML che fa 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 in modo forzato i tuoi di blocco.
  • CONSTRAINT_NAME: il nome definito per il vincolo personalizzato. Per ad esempio custom.batchMustHaveSpecifiedCategoryLabel.

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 richiederà fino a 15 minuti.

Testa il vincolo personalizzato

L'esempio di creazione batch seguente presuppone che sia stato creato un vincolo personalizzato creato e applicato alla creazione in batch per richiedere che il batch abbia una "categoria" etichetta associata con il valore "retail", "ads" o "service: ("category" in resource.labels) && (resource.labels['category'] in ['retail', 'ads', 'service']). Tieni presente che la parola "category" dell'esempio non ha uno dei valori obbligatori.

gcloud dataproc batches submit spark \
  --region us-west1
  --jars file:///usr/lib/spark/examples/jars/spark-examples.jar \
  --class org.apache.spark.examples.SparkPi  \
  --network default \
  --labels category=foo \
  -- 100

Esempio di output:

Operation denied by custom org policies: ["customConstraints/custom.batchMustHaveSpecifiedCategoryLabel": ""Only allow Dataproc batch creation if it has a 'category' label with
  a 'retail', 'ads', or 'service' value""]

Vincoli serverless di Dataproc su risorse e operazioni

I seguenti vincoli personalizzati serverless di Dataproc sono disponibili per l'uso quando si crea (invia) un carico di lavoro batch.

Generali

  • resource.labels

RuntimeConfig

  • resource.runtimeConfig.version
  • resource.runtimeConfig.containerImage
  • resource.runtimeConfig.properties

ExecutionConfig

  • resource.environmentConfig.executionConfig.serviceAccount
  • resource.environmentConfig.executionConfig.networkTags
  • resource.environmentConfig.executionConfig.kmsKey
  • resource.environmentConfig.executionConfig.stagingBucket

PeripheralsConfig

  • resource.environmentConfig.peripheralsConfig.metastoreService
  • resource.environmentConfig.peripheralsConfig.sparkHistoryServerConfig.dataprocCluster

Esempi di vincoli personalizzati per i casi d'uso comuni

La tabella riportata di seguito fornisce esempi di modelli batch serverless personalizzati di Dataproc. vincoli:

Descrizione Sintassi del vincolo
Il batch deve collegare una "categoria" con valori consentiti.
    name: organizations/ORGANIZATION_ID/customConstraints/custom.batchMustHaveSpecifiedCategoryLabel
    resourceTypes:
    - dataproc.googleapis.com/Batch
    methodTypes:
    - CREATE
    condition: ("category" in resource.labels)  &&(resource.labels['category'] in ['retail', 'ads', 'service'])
    actionType: ALLOW
    displayName: Enforce batch "category" label requirement.
    description: Only allow batch creation if it attaches a "category" label with an allowable value.
Il batch deve impostare una versione di runtime consentita.
    name: organizations/ORGANIZATION_ID/customConstraints/custom.batchMustUseAllowedVersion
    resourceTypes:
    - dataproc.googleapis.com/Batch
    methodTypes:
    - CREATE
    condition:  (has(resource.runtimeConfig.version))  &&(resource.runtimeConfig.version in ["2.0.45", "2.0.48"])
    actionType: ALLOW
    displayName: Enforce batch runtime version.
    description: Only allow batch creation if it sets an allowable runtime version.
Il batch non può impostare più di 20 esecutori iniziali Spark.
    name: organizations/ORGANIZATION_ID/customConstraints/custom.batchInitialExecutorMax20
    resourceTypes:
    - dataproc.googleapis.com/Batch
    methodTypes:
    - CREATE
    condition: (has(resource.runtimeConfig.properties))  &&('spark.executor.instances' in resource.runtimeConfig.properties)
      &&(int(resource.runtimeConfig.properties['spark.executor.instances'])>20)
    actionType: DENY
    displayName: Enforce maximum number of batch Spark executor instances.
    description: Deny batch creation if it specifies more than 20 Spark executor instances.
Il batch non può impostare più di 20 esecutori iniziali per l'allocazione dinamica di Spark.
    name: organizations/ORGANIZATION_ID/customConstraints/custom.batchDynamicAllocationInitialExecutorMax20
    resourceTypes:
    - dataproc.googleapis.com/Batch
    methodTypes:
    - CREATE
    condition: (has(resource.runtimeConfig.properties))  &&('spark.dynamicAllocation.initialExecutors' in resource.runtimeConfig.properties)
      &&(int(resource.runtimeConfig.properties['spark.dynamicAllocation.initialExecutors'])>20)
    actionType: DENY
    displayName: Enforce maximum number of batch dynamic allocation initial executors.
    description: Deny batch creation if it specifies more than 20 Spark dynamic allocation initial executors.
Il batch non deve consentire più di 20 esecutori di allocazione dinamica.
    name: organizations/ORGANIZATION_ID/customConstraints/custom.batchDynamicAllocationMaxExecutorMax20
    resourceTypes:
    - dataproc.googleapis.com/Batch
    methodTypes:
    - CREATE
    condition: (resource.runtimeConfig.properties['spark.dynamicAllocation.enabled']=='false') || (('spark.dynamicAllocation.maxExecutors' in resource.runtimeConfig.properties)  &&(int(resource.runtimeConfig.properties['spark.dynamicAllocation.maxExecutors'])<=20))
    actionType: ALLOW
    displayName: Enforce batch maximum number of dynamic allocation executors.
    description:  Only allow batch creation if dynamic allocation is disabled or
    the maximum number of dynamic allocation executors is set to less than or equal to 20.
Il batch deve impostare la chiave KMS su un pattern consentito.
    name: organizations/ORGANIZATION_ID/custom.batchKmsPattern
    resourceTypes:
    - dataproc.googleapis.com/Batch
    methodTypes:
    - CREATE
    condition:  matches(resource.environmentConfig.executionConfig.kmsKey, '^keypattern[a-z]$')
    actionType: ALLOW
    displayName: Enforce batch KMS Key pattern.
    description: Only allow batch creation if it sets the KMS key to an allowable pattern.
Il batch deve impostare il prefisso del bucket gestione temporanea su un valore consentito.
    name: organizations/ORGANIZATION_ID/customConstraints/custom.batchStagingBucketPrefix
    resourceTypes:
    - dataproc.googleapis.com/Batch
    methodTypes:
    - CREATE
    condition:  resource.environmentConfig.executionConfig.stagingBucket.startsWith(ALLOWED_PREFIX)
    actionType: ALLOW
    displayName: Enforce batch staging bucket prefix.
    description: Only allow batch creation if it sets the staging bucket prefix to ALLOWED_PREFIX.

Passaggi successivi