Aller au contenu principal

Spécifiez une identité d'exécution pour un workflow Declarative Automation Bundles

Cet article décrit comment utiliser le paramètre run_as pour spécifier l'identité à utiliser lors de l'exécution des workflows Declarative Automation Bundles.

Le paramètre run_as peut être configuré en tant que mappage de haut niveau à appliquer aux ressources, ou au sein d'un mappage de déploiement target dans un fichier de configuration de bundle. Il peut être défini sur un user_name ou un service_principal_name. (Les non-administrateurs peuvent uniquement définir ce champ sur leur propre e-mail.)

Ce paramètre permet de séparer l’identité utilisée pour déployer un job ou un pipeline de bundle de celle utilisée par le workflow du job ou du pipeline pour l’exécution. Cela augmente la flexibilité du développement et de la gestion des bundles, tout en permettant également l'tablissement de garde-fous pour les déploiements et les exécutions. En particulier :

  • Si l’identité utilisée pour déployer un bundle est la même que l’identité configurée dans le paramètre run_as du bundle, il n’y a aucune restriction. Toutes les ressources de bundle sont prises en charge.
  • Si l'identité utilisée pour déployer un bundle est différente de l'identité configurée dans le paramètre run_as du bundle, seuls les Jobs et les pipelines sont pris en charge.

Définir une identité d’exécution de bundle

Pour définir l'identité d'exécution des ressources de bundle, spécifiez run_as comme mappage de premier niveau, comme illustré dans l'exemple suivant :

YAML
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'
important

Le paramètre run_as n'est pas pris en charge pour les endpoints de déploiement de modèles. Une erreur se produit si ces ressources sont définies dans un bundle où run_as est également configuré.

Définir les identités de déploiement cibles

Il est recommandé de configurer les identités d'exécution pour les déploiements cibles de préproduction et de production. En outre, définir une identité run_as pour un Service Principal pour les cibles de production est le moyen le plus sûr d'exécuter un workflow de production, car :

  • Garantit que le workflow a été déployé par le même service principal ou par une personne disposant des autorisations CAN_USE sur le service principal lui-même.
  • Découple la permission d'exécuter le workflow de production de l'identité qui a créé ou déployé le bundle.
  • Permet aux utilisateurs de configurer et de définir un Service Principal pour la production avec moins de permissions que l'identité utilisée pour déployer le bundle de production.

Dans l'exemple de fichier de configuration databricks.yml suivant, trois modes cibles ont été configurés : développement, préproduction et production. Le mode de développement est configuré pour s'exécuter en tant qu'utilisateur individuel, et les modes de préproduction et de production sont configurés pour s'exécuter à l'aide de deux Service Principal différents. Les Service Principal se présentent toujours sous la forme d'un ID d'application, qui peut être récupéré depuis la page d'un Service principal dans vos paramètres d'administration du Workspace.

YAML
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'