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, apenas um subconjunto de recursos do pacote será suportado. Não há suporte para pipelines e pontos de extremidade de serviço de modelo.
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" 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:
service_principal_name: "69511ed2-zb27-444c-9863-4bc8ff497637"
tasks:
- task_key: "task_2"
notebook_task:
notebook_path: "./test.py"
Importante
A run_as
configuração não é suportada para pipelines ou pontos de extremidade 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 aplicativo, que pode ser recuperada 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"