Utilizzare vincoli personalizzati

La policy dell'organizzazioneGoogle Cloud offre un controllo centralizzato e programmatico sulle risorse della tua organizzazione. In qualità di amministratore della policy dell'organizzazione, puoi definire una policy dell'organizzazione, ovvero un set di limitazioni chiamate vincoli che si applicano alle risorseGoogle Cloud e ai discendenti di queste risorse nella gerarchia delle risorseGoogle Cloud . Puoi applicare le policy dell'organizzazione a livello di organizzazione, cartella o progetto.

La policy dell'organizzazione fornisce vincoli predefiniti per vari serviziGoogle Cloud . Tuttavia, se cerchi un controllo più granulare e personalizzabile sui campi specifici limitati nelle policy dell'organizzazione, puoi anche creare vincoli personalizzati e utilizzarli in una policy dell'organizzazione.

Vantaggi

Puoi utilizzare un criterio dell'organizzazione personalizzato per consentire o negare operazioni specifiche su batch e sessioni Serverless per Apache Spark. Ad esempio, se una richiesta di creazione di un workload batch non soddisfa la convalida dei vincoli personalizzati impostata dalla policy dell'organizzazione, la richiesta non andrà a buon fine e verrà restituito un errore al chiamante.

Ereditarietà delle policy

Per impostazione predefinita, le policy dell'organizzazione vengono ereditate dai discendenti delle risorse su cui applichi la policy. Ad esempio, se applichi una policy a una cartella, Google Cloud applica la policy a tutti i progetti contenuti nella cartella. Per scoprire di più su questo comportamento e su come modificarlo, consulta Regole di valutazione della gerarchia.

Prezzi

Il servizio relativo alle policy dell'organizzazione, inclusi i vincoli predefiniti e personalizzati, viene fornito senza costi aggiuntivi.

Prima di iniziare

  1. Configura 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.

      Roles required to select or create a project

      • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
      • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

      Go to project selector

    3. Verify that billing is enabled for your Google Cloud project.

    4. Enable the Serverless for Apache Spark API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    5. Install the Google Cloud CLI.

    6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    7. Per inizializzare gcloud CLI, esegui questo comando:

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

      Roles required to select or create a project

      • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
      • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

      Go to project selector

    9. Verify that billing is enabled for your Google Cloud project.

    10. Enable the Serverless for Apache Spark API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    11. Install the Google Cloud CLI.

    12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    13. Per inizializzare gcloud CLI, esegui questo comando:

      gcloud init
    14. Assicurati di conoscere il tuo ID organizzazione.
    15. Ruoli obbligatori

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

      Questo ruolo predefinito contiene le autorizzazioni necessarie per gestire le policy dell'organizzazione. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

      Autorizzazioni obbligatorie

      Per gestire le policy 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 ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

      Crea un vincolo personalizzato

      Un vincolo personalizzato è definito in un file YAML dalle risorse, dai metodi, dalle condizioni e dalle azioni a cui viene applicato. Serverless per Apache Spark supporta vincoli personalizzati applicati al metodo CREATE delle risorse batch e sessione.

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

      Crea un vincolo personalizzato per una risorsa batch

      Per creare un file YAML per un vincolo personalizzato Serverless per Apache Spark per una risorsa batch, utilizza il seguente formato:

      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 assegnare al nuovo vincolo personalizzato. Un vincolo personalizzato deve iniziare con custom. e può includere solo lettere maiuscole, lettere minuscole o numeri, ad esempio custom.batchMustHaveSpecifiedCategoryLabel. La lunghezza massima di questo campo è di 70 caratteri, senza contare il prefisso, ad esempio organizations/123456789/customConstraints/custom.

      • CONDITION: una condizione CEL scritta in base a una rappresentazione di una risorsa di servizio supportata. Questo campo ha una lunghezza massima di 1000 caratteri. Per ulteriori informazioni sulle risorse disponibili in base a cui scrivere condizioni, consulta Vincoli di Dataproc Serverless per risorse e operazioni. Condizione di esempio: ("category" in resource.labels) && (resource.labels['category'] in ['retail', 'ads', 'service']).

      • ACTION: l'azione da eseguire se la condizione è soddisfatta. Può essere ALLOW o DENY.

      • DISPLAY_NAME: un nome facile da ricordare per il vincolo. Nome visualizzato di esempio: "Imponi il requisito dell'etichetta "categoria" per i batch". Questo campo ha una lunghezza massima di 200 caratteri.

      • DESCRIPTION: una descrizione chiara del vincolo da visualizzare come messaggio di errore in caso di violazione della policy. Questo campo ha una lunghezza massima di 2000 caratteri. Descrizione di esempio: "Consenti la creazione di batch Dataproc solo se ha un 'etichetta "category" con un valore "retail", "ads" o "service".

      Crea un vincolo personalizzato per una risorsa di sessione

      Per creare un file YAML per un vincolo personalizzato Serverless per Apache Spark per una risorsa di sessione, utilizza il seguente formato:

      name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
      resourceTypes:
      - dataproc.googleapis.com/Session
      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 assegnare al nuovo vincolo personalizzato. Un vincolo personalizzato deve iniziare con custom. e può includere solo lettere maiuscole, lettere minuscole o numeri, ad esempio custom.SessionNameMustStartWithTeamName. La lunghezza massima di questo campo è di 70 caratteri, senza contare il prefisso organizations/123456789/customConstraints/. Ad esempio, organizations/123456789/customConstraints/custom.

      • CONDITION: una condizione CEL scritta in base a una rappresentazione di una risorsa di servizio supportata. Questo campo ha una lunghezza massima di 1000 caratteri. Per saperne di più sulle risorse disponibili in base a cui scrivere condizioni, consulta Vincoli di Dataproc Serverless per risorse e operazioni. Condizione di esempio: (resource.name.startsWith("dataproc").

      • ACTION: l'azione da eseguire se la condizione è soddisfatta. Può essere ALLOW o DENY.

      • DISPLAY_NAME: un nome facile da ricordare per il vincolo. Nome visualizzato di esempio: "Imponi che la sessione abbia un TTL < 2 ore". Questo campo ha una lunghezza massima di 200 caratteri.

      • DESCRIPTION: una descrizione chiara del vincolo da visualizzare come messaggio di errore in caso di violazione della policy. Questo campo ha una lunghezza massima di 2000 caratteri. Descrizione di esempio: "Consenti la creazione di sessioni solo se viene impostato un TTL consentito".

      Configura un vincolo personalizzato

      Dopo aver creato il file YAML per un nuovo vincolo personalizzato, devi configurarlo per renderlo disponibile per le policy dell'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 del vincolo personalizzato. Ad esempio: /home/user/customconstraint.yaml. Al termine, i vincoli personalizzati sono disponibili come policy dell'organizzazione nel tuo elenco di policy dell'organizzazione Google Cloud . Per verificare che il vincolo personalizzato 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 Visualizzazione delle policy dell'organizzazione.

      Applica un vincolo personalizzato

      Puoi applicare un vincolo creando una policy dell'organizzazione che lo richiami e poi applicando questa policy dell'organizzazione a una risorsa Google Cloud .

      Console

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

        Vai a Policy dell'organizzazione

      2. Nel selettore di progetti, seleziona il progetto per cui vuoi impostare la policy dell'organizzazione.
      3. Nell'elenco della pagina Policy dell'organizzazione, seleziona il vincolo per visualizzare la pagina Dettagli policy relativa al vincolo in questione.
      4. Per configurare la policy dell'organizzazione per questa risorsa, fai clic su Gestisci policy.
      5. Nella pagina Modifica policy, seleziona Esegui override della policy dell'unità organizzativa principale.
      6. Fai clic su Aggiungi una regola.
      7. Nella sezione Applicazione, seleziona se attivare o meno l'applicazione di questa policy dell'organizzazione
      8. (Facoltativo) Per rendere la policy dell'organizzazione condizionale su un tag, fai clic su Aggiungi condizione. Tieni presente che se aggiungi una regola condizionale a una policy dell'organizzazione, devi aggiungere almeno una regola non condizionale, altrimenti la policy non può essere salvata. Per ulteriori informazioni, consulta Impostazione di una policy dell'organizzazione con tag.
      9. Fai clic su Testa modifiche per simulare l'effetto della policy dell'organizzazione. La simulazione delle policy non è disponibile per i vincoli gestiti legacy. Per ulteriori informazioni, consulta Testa le modifiche alla policy dell'organizzazione con Policy Simulator.
      10. Per completare e applicare la policy dell'organizzazione, fai clic su Imposta policy. L'applicazione della policy può richiedere fino a 15 minuti.

      gcloud

      Per creare una policy dell'organizzazione con regole booleane, crea un file YAML della policy 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.batchMustHaveSpecifiedCategoryLabel.

      Per applicare la policy dell'organizzazione contenente il vincolo, esegui il seguente comando:

          gcloud org-policies set-policy POLICY_PATH
          

      Sostituisci POLICY_PATH con il percorso completo del file YAML della policy dell'organizzazione. L'applicazione della policy può richiedere fino a 15 minuti.

      Testa il vincolo personalizzato

      Questa sezione descrive come testare i vincoli personalizzati per le risorse batch e sessione.

      Testa il vincolo personalizzato per una risorsa batch

      Il seguente esempio di creazione batch presuppone che sia stato creato e applicato un vincolo personalizzato alla creazione batch per richiedere che il batch abbia un'etichetta "category" allegata con un valore "retail", "ads" o "service: ("category" in resource.labels) && (resource.labels['category'] in ['retail', 'ads', 'service']).

      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""]
      

      Testa il vincolo personalizzato per una risorsa di sessione

      Il seguente esempio di creazione di sessione presuppone che sia stato creato e applicato un vincolo personalizzato alla creazione della sessione per richiedere che la sessione abbia un name che inizia con orgName.

      gcloud beta dataproc sessions create spark test-session
        --location us-central1
      

      Esempio di output:

      Operation denied by custom org policy:
      ["customConstraints/custom.denySessionNameNotStartingWithOrgName": "Deny session
      creation if its name does not start with 'orgName'"]
      

      Vincoli di Serverless per Apache Spark su risorse e operazioni

      Questa sezione elenca i vincoli personalizzati di Google Cloud Serverless per Apache Spark disponibili per le risorse batch e sessione.

      Vincoli batch di Google Cloud Serverless per Apache Spark supportati

      I seguenti vincoli personalizzati di Serverless per Apache Spark sono disponibili per l'utilizzo quando crei (invii) un carico di lavoro batch:

      Generali

      • resource.labels

      PySparkBatch

      • resource.pysparkBatch.mainPythonFileUri
      • resource.pysparkBatch.args
      • resource.pysparkBatch.pythonFileUris
      • resource.pysparkBatch.jarFileUris
      • resource.pysparkBatch.fileUris
      • resource.pysparkBatch.archiveUris

      SparkBatch

      • resource.sparkBatch.mainJarFileUri
      • resource.sparkBatch.mainClass
      • resource.sparkBatch.args
      • resource.sparkBatch.jarFileUris
      • resource.sparkBatch.fileUris
      • resource.sparkBatch.archiveUris

      SparRBatch

      • resource.sparkRBatch.mainRFileUri
      • resource.sparkRBatch.args
      • resource.sparkRBatch.fileUris
      • resource.sparkRBatch.archiveUris

      SparkSqlBatch

      • resource.sparkSqlBatch.queryFileUri
      • resource.sparkSqlBatch.queryVariables
      • resource.sparkSqlBatch.jarFileUris

      RuntimeConfig

      • resource.runtimeConfig.version
      • resource.runtimeConfig.containerImage
      • resource.runtimeConfig.properties
      • resource.runtimeConfig.repositoryConfig.pypiRepositoryConfig.pypiRepository
      • resource.runtimeConfig.autotuningConfig.scenarios
      • resource.runtimeConfig.cohort

      ExecutionConfig

      • resource.environmentConfig.executionConfig.serviceAccount
      • resource.environmentConfig.executionConfig.networkUri
      • resource.environmentConfig.executionConfig.subnetworkUri
      • resource.environmentConfig.executionConfig.networkTags
      • resource.environmentConfig.executionConfig.kmsKey
      • resource.environmentConfig.executionConfig.idleTtl
      • resource.environmentConfig.executionConfig.ttl
      • resource.environmentConfig.executionConfig.stagingBucket
      • resource.environmentConfig.executionConfig.authenticationConfig.userWorkloadAuthenticationType

      PeripheralsConfig

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

      Supportato Google Cloud Vincoli di sessione di Serverless per Apache Spark

      I seguenti attributi di sessione di Google Cloud Serverless per Apache Spark sono disponibili per l'utilizzo quando crei vincoli personalizzati per le sessioni serverless:

      Generali

      • resource.name
      • resource.sparkConnectSession
      • resource.user
      • resource.sessionTemplate

      JupyterSession

      • resource.jupyterSession.kernel
      • resource.jupyterSession.displayName

      RuntimeConfig

      • resource.runtimeConfig.version
      • resource.runtimeConfig.containerImage
      • resource.runtimeConfig.properties
      • resource.runtimeConfig.repositoryConfig.pypiRepositoryConfig.pypiRepository
      • resource.runtimeConfig.autotuningConfig.scenarios
      • resource.runtimeConfig.cohort

      ExecutionConfig

      • resource.environmentConfig.executionConfig.serviceAccount
      • resource.environmentConfig.executionConfig.networkUri
      • resource.environmentConfig.executionConfig.subnetworkUri
      • resource.environmentConfig.executionConfig.networkTags
      • resource.environmentConfig.executionConfig.kmsKey
      • resource.environmentConfig.executionConfig.idleTtl
      • resource.environmentConfig.executionConfig.ttl
      • resource.environmentConfig.executionConfig.stagingBucket
      • resource.environmentConfig.executionConfig.authenticationConfig.userWorkloadAuthenticationType

      PeripheralsConfig

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

      Esempi di vincoli personalizzati per casi d'uso comuni

      Questa sezione include esempi di vincoli personalizzati per casi d'uso comuni per risorse batch e di sessione.

      Esempi di vincoli personalizzati per una risorsa batch

      La seguente tabella fornisce esempi di vincoli personalizzati per i batch di Serverless per Apache Spark:

      Descrizione Sintassi del vincolo
      Il batch deve allegare un'etichetta "category" con i 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.
      Batch deve impostare una versione del 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.
      Deve utilizzare SparkSQL.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.batchMustUseSparkSQL
          resourceTypes:
          - dataproc.googleapis.com/Batch
          methodTypes:
          - CREATE
          condition: (has(resource.sparkSqlBatch))
          actionType: ALLOW
          displayName: Enforce batch only use SparkSQL Batch.
          description: Only allow creation of SparkSQL Batch.
      Il batch deve impostare un TTL inferiore a 2 ore.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.batchMustSetLessThan2hTtl
          resourceTypes:
          - dataproc.googleapis.com/Batch
          methodTypes:
          - CREATE
          condition:  (has(resource.environmentConfig.executionConfig.ttl)) && (resource.environmentConfig.executionConfig.ttl <= duration('2h'))
          actionType: ALLOW
          displayName: Enforce batch TTL.
          description: Only allow batch creation if it sets an allowable TTL.
      Batch non può impostare più di 20 esecutori iniziali di 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.
      Batch non può impostare più di 20 esecutori iniziali di allocazione dinamica 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 dell'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 di staging 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.
      L'impostazione della memoria dell'esecutore batch deve terminare con un suffisso m ed essere inferiore a 20.000 m.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.batchExecutorMemoryMax
          resourceTypes:
          - dataproc.googleapis.com/Batch
          methodTypes:
          - CREATE
          condition:  ('spark.executor.memory' in resource.runtimeConfig.properties) && (resource.runtimeConfig.properties['spark.executor.memory'].endsWith('m')) && (int(resource.runtimeConfig.properties['spark.executor.memory'].split('m')[0])<20000)
          actionType: ALLOW
          displayName: Enforce batch executor maximum memory.
          description: Only allow batch creation if the executor memory setting ends with a suffix 'm' and is less than 20000 m.

      Esempi di vincoli personalizzati per una risorsa di sessione

      La seguente tabella fornisce esempi di vincoli personalizzati per le sessioni di Serverless per Apache Spark:

      Descrizione Sintassi del vincolo
      La sessione deve impostare sessionTemplate su una stringa vuota.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionTemplateMustBeEmpty
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition: resource.sessionTemplate == ""
          actionType: ALLOW
          displayName: Enforce empty session templates.
          description: Only allow session creation if session template is empty string.
      sessionTemplate deve essere uguale agli ID modello approvati.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionTemplateIdMustBeApproved
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition:
          resource.sessionTemplate.startsWith("https://www.googleapis.com/compute/v1/projects/")
            &&
            resource.sessionTemplate.contains("/locations/") &&
            resource.sessionTemplate.contains("/sessionTemplates/") &&
             (
               resource.sessionTemplate.endsWith("/1") ||
               resource.sessionTemplate.endsWith("/2") ||
               resource.sessionTemplate.endsWith("/13")
             )
          actionType: ALLOW
          displayName: Enforce templateId must be 1, 2, or 13.
          description: Only allow session creation if session template ID is in the
          approved list, that is, 1, 2 and 13.
      La sessione deve utilizzare le credenziali dell'utente finale per autenticare il workload.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.AllowEUCSessions
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition:
          resource.environmentConfig.executionConfig.authenticationConfig.userWorkloadAuthenticationType=="END_USER_CREDENTIALS"
          actionType: ALLOW
          displayName: Require end user credential authenticated sessions.
          description: Allow session creation only if the workload is authenticated
          using end-user credentials.
      La sessione deve impostare una versione del runtime consentita.
          name: organizations/ORGANIZATION_ID/custom.sessionMustUseAllowedVersion
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition: (has(resource.runtimeConfig.version)) &&
          (resource.runtimeConfig.version in ["2.0.45", "2.0.48"])
          actionType: ALLOW
          displayName: Enforce session runtime version.
          description: Only allow session creation if it sets an allowable runtime
          version.
      La sessione deve impostare un TTL inferiore a 2 ore.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionMustSetLessThan2hTtl
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition: (has(resource.environmentConfig.executionConfig.ttl)) &&
          (resource.environmentConfig.executionConfig.ttl <= duration('2h'))
          actionType: ALLOW
          displayName: Enforce session TTL.
          description: Only allow session creation if it sets an allowable TTL.
      La sessione non può impostare più di 20 esecutori iniziali di Spark.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionInitialExecutorMax20
          resourceTypes:
          - dataproc.googleapis.com/Session
          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 session Spark executor instances.
          description: Deny session creation if it specifies more than 20 Spark executor
          instances.
      La sessione non può impostare più di 20 esecutori iniziali per l'allocazione dinamica di Spark.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionDynamicAllocationInitialExecutorMax20
          resourceTypes:
          - dataproc.googleapis.com/Session
          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 session dynamic allocation initial executors.
          description: Deny session creation if it specifies more than 20 Spark dynamic
          allocation initial executors.
      La sessione deve impostare la chiave KMS su un pattern consentito.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionKmsPattern
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition: matches(resource.environmentConfig.executionConfig.kmsKey, '^keypattern[a-z]$')
          actionType: ALLOW
          displayName: Enforce session KMS Key pattern.
          description: Only allow session creation if it sets the KMS key to an
          allowable pattern.
      La sessione deve impostare il prefisso del bucket di staging su un valore consentito.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionStagingBucketPrefix
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition: resource.environmentConfig.executionConfig.stagingBucket.startsWith(ALLOWED_PREFIX)
          actionType: ALLOW
          displayName: Enforce session staging bucket prefix.
          description: Only allow batch creation if it sets the staging bucket prefix
          to ALLOWED_PREFIX.
      L'impostazione della memoria dell'executor della sessione deve terminare con il suffisso m ed essere inferiore a 20.000 m.
          name: organizations/ORGANIZATION_ID/customConstraints/custom.sessionExecutorMemoryMax
          resourceTypes:
          - dataproc.googleapis.com/Session
          methodTypes:
          - CREATE
          condition: ('spark.executor.memory' in resource.runtimeConfig.properties) &&
          (resource.runtimeConfig.properties['spark.executor.memory'].endsWith('m')) &&
          (int(resource.runtimeConfig.properties['spark.executor.memory'].split('m')[0])<20000)
          actionType: ALLOW
          displayName: Enforce session executor maximum memory.
          description: Only allow session creation if the executor memory setting ends
          with a suffix 'm' and is less than 20000 m.

      Passaggi successivi