Partilhar via


Especificar uma identidade de execução para um fluxo de trabalho do Databricks Asset Bundles

Este artigo descreve como usar a run_as configuração para especificar a identidade a ser usada ao executar fluxos de trabalho do Databricks Asset Bundles.

A run_as configuração pode ser configurada como um mapeamento de nível superior a ser aplicado a recursos ou dentro de um target mapeamento de implantação em um arquivo de configuração de pacote. Pode ser definido como um user_name ou um service_principal_name.

Essa configuração fornece a capacidade de separar a identidade usada para implantar um trabalho ou pipeline de pacote daquele usado pelo trabalho ou fluxo de trabalho de pipeline a ser executado. Isso aumenta a flexibilidade de desenvolvimento e gerenciamento de pacotes, ao mesmo tempo em que permite que guardrails sejam estabelecidos para implantações e execuções. Em particular:

  • Se a identidade usada para implantar um pacote for a mesma que a identidade configurada na configuração do pacote, run_as não haverá restrições. Todos os recursos do pacote são suportados.
  • Se a identidade usada para implantar um pacote for diferente da identidade configurada na configuração do run_as pacote, somente trabalhos e pipelines serão suportados.

Definir uma identidade de execução de pacote

Para definir a identidade de execução dos recursos do pacote, especifique run_as como um mapeamento de nível superior, conforme mostrado no exemplo a seguir:

bundle:
  name: 'run_as'

# This is the identity that will be used when "databricks bundle run my_test_job_1" is executed.
run_as:
  service_principal_name: '5cf3z04b-a73c-4x46-9f3d-52da7999069e'

resources:
  jobs:
    my_test_job _1:
      name: Test job 1
      tasks:
        - task_key: 'task_1'
          new_cluster:
            num_workers: 1
            spark_version: 13.2.x-snapshot-scala2.12
            node_type_id: i3.xlarge
            runtime_engine: PHOTON
          notebook_task:
            notebook_path: './test.py'
    my_test_job_2:
      name: Test job 2
      run_as: # This is the identity that will be used when "databricks bundle run my_test_job_2" is executed.
        service_principal_name: '69511ed2-zb27-444c-9863-4bc8ff497637'
      tasks:
        - task_key: 'task_2'
          notebook_task:
            notebook_path: './test.py'

Importante

A configuração run_as não é suportada para endpoints de serviço de modelo. Ocorrerá um erro se esses recursos forem definidos em um pacote onde run_as também está configurado.

Definir identidades de implantação de destino

É uma prática recomendada configurar identidades de execução para implantações de destino de preparação e produção. Além disso, definir uma run_as identidade para uma entidade de serviço para destinos de produção é a maneira mais segura de executar um fluxo de trabalho de produção, uma vez que:

  • Garante que o fluxo de trabalho foi implantado pela mesma entidade de serviço ou por alguém com permissões CAN_USE na própria entidade de serviço.
  • Desacopla a permissão para executar o fluxo de trabalho de produção da identidade que criou ou implantou o pacote.
  • Permite que os usuários configurem e definam uma entidade de serviço para produção com menos permissões do que a identidade usada para implantar o pacote de produção.

No arquivo de configuração de exemplo databricks.yml a seguir, três modos de destino foram configurados: desenvolvimento, preparo e produção. O modo de desenvolvimento é configurado para ser executado como um usuário individual, e os modos de preparação e produção são configurados para serem executados usando duas entidades de serviço diferentes. As entidades de serviço estão sempre na forma de uma ID de aplicação, que pode ser obtida a partir da página da entidade de serviço nas configurações de administração do espaço de trabalho.

bundle:
  name: my_targeted_bundle

run_as:
  service_principal_name: '5cf3z04b-a73c-4x46-9f3d-52da7999069e'

targets:
  # Development deployment settings, set as the default
  development:
    mode: development
    default: true
    workspace:
      host: https://my-host.cloud.databricks.com
    run_as:
      user_name: someone@example.com

  # Staging deployment settings
  staging:
    workspace:
      host: https://my-host.cloud.databricks.com
      root_path: /Shared/staging-workspace/.bundle/${bundle.name}/${bundle.target}
    run_as:
      service_principal_name: '69511ed2-zb27-444c-9863-4bc8ff497637'

  # Production deployment settings
  production:
    mode: production
    workspace:
      host: https://my-host.cloud.databricks.com
      root_path: /Shared/production-workspace/.bundle/${bundle.name}/${bundle.target}
    run_as:
      service_principal_name: '68ed9cd5-8923-4851-x0c1-c7536c67ff99'

resources:
  jobs:
    my_test_job:
      name: Test job
      tasks:
        - task_key: 'task'
          new_cluster:
            num_workers: 1
            spark_version: 13.3.x-cpu-ml-scala2.12
            node_type_id: i3.xlarge
            runtime_engine: STANDARD
          notebook_task:
            notebook_path: './test.py'