Určete identitu spuštění pro pracovní postup deklarativních balíčků automatizace

Tento článek popisuje, jak pomocí nastavení run_as určit identitu, která se má použít při spouštění pracovních postupů deklarativních balíčků automatizace.

Nastavení run_as lze nakonfigurovat jako mapování nejvyšší úrovně, které se má použít pro prostředky, nebo v rámci target mapování nasazení v konfiguračním souboru sady. Může být nastaven na user_name nebo service_principal_name. (Nesprávci můžou toto pole nastavit jenom na vlastní e-mail.)

Toto nastavení umožňuje oddělit identitu, která je použita k nasazení balíčku úlohy nebo kanálu, od identity, kterou pracovní postup úlohy nebo kanálu využívá ke spuštění. To zvyšuje flexibilitu vývoje a správy balíčků a zároveň umožňuje vytváření ochranných opatření pro nasazování a provoz. Zejména jde o toto:

  • Pokud je identita použitá k nasazení sady stejná jako identita nakonfigurovaná v nastavení sady, run_as neexistují žádná omezení. Podporovány jsou všechny zdroje svazku.
  • Pokud se identita použitá k nasazení sady liší od identity nakonfigurované v nastavení sady run_as , podporují se jenom úlohy a kanály.

Nastavení identity spuštění sady

Nastavte identitu běhu zdrojů sady tak, že určíte run_as jako mapování nejvyšší úrovně, jak je znázorněno v následujícím příkladu:

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'

Důležité

Nastavení run_as není podporováno pro koncové body obsluhy modelu. K chybě dojde, pokud jsou tyto prostředky definovány v sadě, kde je také nakonfigurován run_as.

Nastavení identit cílového nasazení

Osvědčeným postupem je nakonfigurovat identifikační údaje spuštění pro cílová nasazení v testovacím a produkčním prostředí. Kromě toho je nastavení identity run_as na principál služby pro produkční cíle nejbezpečnějším způsobem, jak spustit produkční pracovní postup:

  • Zajišťuje, že pracovní postup byl nasazen stejnou službou principal nebo někým, kdo má oprávnění CAN_USE k samotné službě principal.
  • Oddělí oprávnění ke spuštění produkčního pracovního postupu od identity, která vytvořila nebo nasadila balíček.
  • Umožňuje uživatelům nakonfigurovat a nastavit instanční objekt pro produkční prostředí s menším počtem oprávnění než identita použitá k nasazení produkční sady.

V následujícím příkladu databricks.yml konfiguračního souboru byly nakonfigurovány tři cílové režimy: vývoj, příprava a produkce. Režim vývoje je nakonfigurovaný tak, aby běžel jako jednotlivý uživatel a pracovní a produkční režimy se konfigurují tak, aby běžely pomocí dvou různých instančních objektů. Servisní principy jsou vždy ve formě ID aplikace, které lze získat ze stránky servisního principu v nastavení správce pracovního prostoru.

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'