Partager via


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 targetmappage 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"