Especificación de una identidad de ejecución para un flujo de trabajo de agrupaciones de recursos de Databricks
En este artículo se describe cómo usar la configuración run_as
para especificar la identidad que se va a usar al ejecutar flujos de trabajo de Databricks Asset Bundles.
El ajuste run_as
puede configurarse como una asignación de nivel superior para aplicar a los recursos, o dentro de una asignación de implementación de target
en un archivo de configuración de agrupaciones. Se puede establecer en user_name
o en service_principal_name
.
Esta configuración proporciona la capacidad de separar la identidad usada para implementar un trabajo de agrupación o una canalización del que usa el flujo de trabajo o canalización para ejecutarse. Esto aumenta la flexibilidad de desarrollo y administración de agrupaciones, al tiempo que permite establecer límites de protección para implementaciones y ejecuciones. En concreto:
- Si la identidad que se usa para implementar una agrupación es la misma que la identidad configurada en la configuración de la agrupación
run_as
, no hay restricciones. Se admiten todos los recursos de agrupación. - Si la identidad utilizada para desplegar un paquete es diferente de la identidad configurada en el ajuste X del paquete
run_as
, sólo se admite un subconjunto de recursos del paquete. No se admiten canalizaciones ni puntos de conexión de servicio de modelos.
Establecimiento de una identidad de ejecución de agrupación
Para establecer la identidad de ejecución de los recursos de agrupación, especifique run_as
como una asignación de nivel superior, como se muestra en el siguiente ejemplo:
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
La configuración run_as
no se admite para canalizaciones ni para los puntos de conexión de servicio del modelo. Se produce un error si estos recursos se definen en una agrupación donde run_as
también está configurada.
Establecimiento de identidades de implementación de destino
Se recomienda configurar identidades de ejecución para implementaciones de destino de ensayo y producción. Además, establecer una identidad run_as
en una entidad de servicio para destinos de producción es la forma más segura de ejecutar un flujo de trabajo de producción a medida que:
- Garantiza que el flujo de trabajo se implementó mediante la misma entidad de servicio o por alguien con permisos de CAN_USE en la propia entidad de servicio.
- Desacopla el permiso para ejecutar el flujo de trabajo de producción desde la identidad que creó o implementó la agrupación.
- Permite a los usuarios configurar y establecer una entidad de servicio para producción con menos permisos que la identidad usada para implementar la agrupación de producción.
En el siguiente archivo de configuración de ejemplo databricks.yml
, se han configurado tres modos de destino: desarrollo, almacenamiento provisional y producción. El modo de desarrollo está configurado para ejecutarse como usuario individual y los modos de ensayo y producción se configuran para ejecutarse mediante dos entidades de servicio diferentes. Las entidades de servicio siempre están en forma de un identificador de aplicación, que se puede recuperar de una página de entidad de servicio en la configuración de administrador del área de trabajo.
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"