Spécifier une identité d’exécution pour le flux de travail d’un pack de ressources Databricks
Cet article explique comment utiliser le paramètre run_as
pour préciser l’identité à utiliser lors de l’exécution du flux de travail d’un pack de ressources Databricks.
Le paramètre run_as
peut être configuré en tant que mappage de niveau supérieur pour s’appliquer aux ressources, ou dans un target
mappage de déploiement dans un fichier de configuration de pack. Il peut être défini en tant que user_name
ou service_principal_name
.
Ce paramètre permet de séparer l’identité utilisée pour déployer un travail ou un pipeline groupé à partir de celui utilisé par le workflow du travail ou de pipeline à exécuter. Cela augmente la flexibilité du développement et de la gestion des packs, tout en permettant également d'établir des garde-fous pour les déploiements et les exécutions. En particulier :
- Si l’identité utilisée pour déployer un bundle est identique à l’identité configurée dans le paramètre
run_as
du bundle, il n’existe aucune restriction. Toutes les ressources groupées sont prises en charge. - Si l’identité utilisée pour déployer un pack est différente de l’identité configurée dans le paramètre
run_as
du pack, seul un sous-ensemble de ressources groupées est pris en charge. Les pipelines et les points de terminaison de service de modèle ne sont pas pris en charge.
Définir une identité d’exécution groupée
Pour définir l’identité d’exécution des ressources groupées, spécifiez run_as
comme mappage de niveau supérieur, comme indiqué dans l’exemple suivant :
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"
Important
Le paramètre run_as
n’est pas pris en charge pour les pipelines ou les points de terminaison de service de modèle. Une erreur se produit si ces ressources sont définies dans un bundle où run_as
est également configuré.
Définir des identités de déploiement cible
Il est recommandé de configurer des identités d’exécution pour les déploiements de cibles de préproduction et de production. En outre, la définition d’une identité run_as
sur un principal de service pour les cibles de production est le moyen le plus sécurisé d’exécuter un flux de travail de production, car cela :
- garantit que le flux de travail a été déployé par le même principal de service ou par une personne disposant d’autorisations CAN_USE sur le principal de service lui-même ;
- dissocie l’autorisation d’exécuter le flux de travail de production à partir de l’identité qui a créé ou déployé le pack ;
- permet aux utilisateurs de configurer et de définir un principal de service pour la production avec moins d’autorisations que l’identité utilisée pour déployer le pack de production.
Dans l’exemple de fichier de configuration suivant databricks.yml
, 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 principaux de service différents. Les principaux de service sont toujours sous la forme d’un ID d’application, qui peut être récupéré à partir de la page d’un principal de service dans les paramètres d’administration de votre espace de travail.
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"