Use restrições personalizadas

Google Cloud A política da organização dá-lhe um controlo centralizado e programático sobre os recursos da sua organização. Enquanto administrador de políticas da organização, pode definir uma política da organização, que é um conjunto de restrições denominadas limitações que se aplicam aGoogle Cloud recursos e descendentes desses recursos na Google Cloud hierarquia de recursos. Pode aplicar políticas da organização ao nível da organização, da pasta ou do projeto.

A política da organização oferece restrições predefinidas para vários Google Cloud serviços. No entanto, se quiser um controlo mais detalhado e personalizável sobre os campos específicos que estão restritos nas políticas da sua organização, também pode criar restrições personalizadas e usá-las numa política da organização.

Vantagens

Pode usar uma política organizacional personalizada para permitir ou recusar operações específicas em lotes e sessões do Serverless para Apache Spark. Por exemplo, se um pedido para criar uma carga de trabalho em lote não cumprir a validação de restrições personalizadas definida pela política da sua organização, o pedido falha e é devolvido um erro ao autor da chamada.

Herança de políticas

Por predefinição, as políticas da organização são herdadas pelos descendentes dos recursos nos quais aplica a política. Por exemplo, se aplicar uma política a uma pasta, Google Cloud aplica a política a todos os projetos na pasta. Para saber mais acerca deste comportamento e como o alterar, consulte as regras de avaliação da hierarquia.

Preços

O serviço de políticas da organização, incluindo restrições predefinidas e personalizadas, é oferecido sem custo financeiro.

Antes de começar

  1. Configure o seu projeto
    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 estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

    7. Para inicializar a CLI gcloud, execute o seguinte 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 estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

    13. Para inicializar a CLI gcloud, execute o seguinte comando:

      gcloud init
    14. Certifique-se de que sabe o seu ID da organização.
    15. Funções necessárias

      Para receber as autorizações de que precisa para gerir políticas da organização, peça ao seu administrador para lhe conceder a função de IAM de administrador de políticas da organização (roles/orgpolicy.policyAdmin) no recurso da organização. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

      Esta função predefinida contém as autorizações necessárias para gerir políticas da organização. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

      Autorizações necessárias

      São necessárias as seguintes autorizações para gerir políticas da organização:

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

      Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

      Crie uma restrição personalizada

      Uma restrição personalizada é definida num ficheiro YAML pelos recursos, métodos, condições e ações aos quais é aplicada. O Serverless para Apache Spark suporta restrições personalizadas que são aplicadas ao método CREATE dos recursos de lote e sessão.

      Para mais informações sobre como criar uma restrição personalizada, consulte o artigo Definir restrições personalizadas.

      Crie uma restrição personalizada para um recurso em lote

      Para criar um ficheiro YAML para uma restrição personalizada do Serverless for Apache Spark para um recurso de lote, use o seguinte formato:

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

      Substitua o seguinte:

      • ORGANIZATION_ID: o ID da sua organização, como 123456789.

      • CONSTRAINT_NAME: o nome que quer para a nova restrição personalizada. Uma restrição personalizada tem de começar com custom. e só pode incluir letras maiúsculas, letras minúsculas ou números, por exemplo, custom.batchMustHaveSpecifiedCategoryLabel. O comprimento máximo deste campo é de 70 carateres, sem contar com o prefixo, por exemplo, organizations/123456789/customConstraints/custom.

      • CONDITION: uma condição CEL escrita em função de uma representação de um recurso de serviço suportado. Este campo tem um comprimento máximo de 1000 carateres. Para mais informações sobre os recursos disponíveis para escrever condições, consulte as restrições do Dataproc Serverless em recursos e operações. Condição da amostra: ("category" in resource.labels) && (resource.labels['category'] in ['retail', 'ads', 'service']).

      • ACTION: a ação a tomar se a condição for cumprida. Pode ser ALLOW ou DENY.

      • DISPLAY_NAME: um nome simples para a restrição. Nome a apresentar de exemplo: "Aplique o requisito de etiqueta "categoria" em lote". Este campo tem um comprimento máximo de 200 carateres.

      • DESCRIPTION: uma descrição acessível da restrição a apresentar como uma mensagem de erro quando a política é violada. Este campo tem um comprimento máximo de 2000 carateres. Descrição de exemplo: "Só permitir a criação de lotes do Dataproc se tiver uma etiqueta "category" com um valor "retalho", "anúncios" ou "serviço"".

      Crie uma restrição personalizada para um recurso de sessão

      Para criar um ficheiro YAML para uma restrição personalizada do Serverless for Apache Spark para um recurso de sessão, use o seguinte formato:

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

      Substitua o seguinte:

      • ORGANIZATION_ID: o ID da sua organização, como 123456789.

      • CONSTRAINT_NAME: o nome que quer para a nova restrição personalizada. Uma restrição personalizada tem de começar com custom. e só pode incluir letras maiúsculas, letras minúsculas ou números, por exemplo, custom.SessionNameMustStartWithTeamName. O comprimento máximo deste campo é de 70 carateres, sem contar com o prefixo organizations/123456789/customConstraints/. Por exemplo, organizations/123456789/customConstraints/custom.

      • CONDITION: uma condição CEL escrita em função de uma representação de um recurso de serviço suportado. Este campo tem um comprimento máximo de 1000 carateres. Para mais informações sobre os recursos disponíveis para escrever condições, consulte Restrições do Dataproc Serverless em recursos e operações. Condição da amostra: (resource.name.startsWith("dataproc").

      • ACTION: a ação a tomar se a condição for cumprida. Pode ser ALLOW ou DENY.

      • DISPLAY_NAME: um nome simples para a restrição. Nome a apresentar de exemplo: "Enforce session must have a ttl < 2 hours" (Impor que a sessão tem de ter um tempo de vida inferior a 2 horas). Este campo tem um comprimento máximo de 200 carateres.

      • DESCRIPTION: uma descrição acessível da restrição a apresentar como uma mensagem de erro quando a política é violada. Este campo tem um comprimento máximo de 2000 carateres. Descrição do exemplo: "Só permitir a criação de sessões se definir um TTL permitido".

      Configure uma restrição personalizada

      Depois de criar o ficheiro YAML para uma nova restrição personalizada, tem de o configurar para o disponibilizar para as políticas da organização na sua organização. Para configurar uma restrição personalizada, use o comando gcloud org-policies set-custom-constraint:
      gcloud org-policies set-custom-constraint CONSTRAINT_PATH
      Substitua CONSTRAINT_PATH pelo caminho completo para o seu ficheiro de restrições personalizado. Por exemplo, /home/user/customconstraint.yaml. Após a conclusão, as restrições personalizadas ficam disponíveis como políticas da organização na sua lista de Google Cloud políticas da organização. Para verificar se a restrição personalizada existe, use o comando gcloud org-policies list-custom-constraints:
      gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
      Substitua ORGANIZATION_ID pelo ID do recurso da sua organização. Para mais informações, consulte o artigo Ver políticas da organização.

      Aplique uma restrição personalizada

      Pode aplicar uma restrição criando uma política da organização que a referencie e, em seguida, aplicando essa política da organização a um Google Cloud recurso.

      Consola

      1. Na Google Cloud consola, aceda à página Políticas de organização.

        Aceda às políticas da organização

      2. No seletor de projetos, selecione o projeto para o qual quer definir a política de organização.
      3. Na lista da página Políticas da organização, selecione a restrição para ver a página Detalhes da política dessa restrição.
      4. Para configurar a política da organização para este recurso, clique em Gerir política.
      5. Na página Editar política, selecione Substituir política do elemento principal.
      6. Clique em Adicionar regra.
      7. Na secção Aplicação, selecione se a aplicação desta política organizacional está ativada ou desativada.
      8. Opcional: para tornar a política de organização condicional a uma etiqueta, clique em Adicionar condição. Tenha em atenção que, se adicionar uma regra condicional a uma política da organização, tem de adicionar, pelo menos, uma regra incondicional. Caso contrário, não é possível guardar a política. Para mais informações, consulte o artigo Definir uma política de organização com etiquetas.
      9. Clique em Testar alterações para simular o efeito da política da organização. A simulação de políticas não está disponível para restrições geridas antigas. Para mais informações, consulte o artigo Teste as alterações à política da organização com o simulador de políticas.
      10. Para concluir e aplicar a política da organização, clique em Definir política. A política demora até 15 minutos a entrar em vigor.

      gcloud

      Para criar uma política da organização com regras booleanas, crie um ficheiro YAML de política que faça referência à restrição:

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

      Substitua o seguinte:

      • PROJECT_ID: o projeto no qual quer aplicar a restrição.
      • CONSTRAINT_NAME: o nome que definiu para a restrição personalizada. Por exemplo, custom.batchMustHaveSpecifiedCategoryLabel.

      Para aplicar a política da organização que contém a restrição, execute o seguinte comando:

          gcloud org-policies set-policy POLICY_PATH
          

      Substitua POLICY_PATH pelo caminho completo para o ficheiro YAML da política da organização. A política demora até 15 minutos a entrar em vigor.

      Teste a restrição personalizada

      Esta secção descreve como testar restrições personalizadas para recursos de lotes e sessões.

      Teste a restrição personalizada para um recurso em lote

      O exemplo de criação em lote seguinte pressupõe que foi criada e aplicada uma restrição personalizada na criação em lote para exigir que o lote tenha uma etiqueta "category" anexada com um valor de "retail", "ads" ou "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
      

      Exemplo de saída:

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

      Teste a restrição personalizada para um recurso de sessão

      O exemplo de criação de sessão seguinte pressupõe que foi criada e aplicada uma restrição personalizada na criação de sessões para exigir que a sessão tenha um name a começar por orgName.

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

      Exemplo de saída:

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

      Restrições sem servidor para o Apache Spark em recursos e operações

      Esta secção apresenta as restrições personalizadas do Google Cloud Serverless for Apache Spark disponíveis para recursos de processamento em lote e de sessão.

      Restrições de lotes do Apache Spark sem servidor suportadas Google Cloud

      As seguintes restrições personalizadas do Serverless for Apache Spark estão disponíveis para utilização quando cria (envia) uma carga de trabalho em lote:

      Geral

      • 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

      Suportado Google Cloud Restrições de sessão sem servidor para o Apache Spark

      Os seguintes atributos de sessão do Google Cloud Serverless for Apache Spark estão disponíveis para utilização quando cria restrições personalizadas em sessões sem servidor:

      Geral

      • 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

      Exemplos de restrições personalizadas para exemplos de utilização comuns

      Esta secção inclui exemplos de restrições personalizadas para exemplos de utilização comuns de recursos de lotes e sessões.

      Exemplo de restrições personalizadas para um recurso em lote

      A tabela seguinte apresenta exemplos de restrições personalizadas de lotes do Serverless para Apache Spark:

      Descrição Sintaxe de restrição
      O lote tem de anexar uma etiqueta "category" com valores permitidos.
          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.
      O lote tem de definir uma versão de tempo de execução permitida.
          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.
      Tem de usar o 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.
      O lote tem de definir o TTL para menos de 2 horas.
          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.
      O lote não pode definir mais de 20 executores iniciais do 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.
      O lote não pode definir mais de 20 executores iniciais de atribuição dinâmica do 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.
      O lote não pode permitir mais de 20 executores de alocação dinâmica.
          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.
      O lote tem de definir a chave do KMS para um padrão permitido.
          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.
      O lote tem de definir o prefixo do contentor de preparação para um valor permitido.
          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.
      A definição de memória do executor de lotes tem de terminar com o sufixo m e ser inferior 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.

      Exemplo de restrições personalizadas para um recurso de sessão

      A tabela seguinte apresenta exemplos de restrições personalizadas de sessão do Serverless para Apache Spark:

      Descrição Sintaxe de restrição
      A sessão tem de definir sessionTemplate como uma string vazia.
          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 tem de ser igual aos IDs dos modelos aprovados.
          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.
      A sessão tem de usar credenciais de utilizador final para autenticar a carga de trabalho.
          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.
      A sessão tem de definir uma versão de tempo de execução permitida.
          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.
      A sessão tem de definir um TTL inferior a 2 horas.
          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.
      A sessão não pode definir mais de 20 executores iniciais do 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.
      A sessão não pode definir mais de 20 executores iniciais de alocação dinâmica do 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.
      A sessão tem de definir a chave do KMS para um padrão permitido.
          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.
      A sessão tem de definir o prefixo do contentor de preparação para um valor permitido.
          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.
      A definição de memória do executor da sessão tem de terminar com o sufixo m e ser inferior 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.

      O que se segue?