Указание идентификатора выполнения для рабочего процесса декларативных пакетов автоматизации

В этой статье описывается, как использовать параметр run_as для указания используемого удостоверения при выполнении рабочих процессов в декларативных пакетах автоматизации.

Этот run_as параметр можно настроить как сопоставление верхнего уровня для применения к ресурсам или в target сопоставлении развертывания в файле конфигурации пакета. Его можно установить на user_name или service_principal_name. (Неадминистраторы могут устанавливать это поле только на свою собственную электронную почту.)

Этот параметр позволяет отделять идентификатор, используемый для развертывания задания или конвейера, от идентификатора, который используется рабочим процессом во время выполнения. Это повышает гибкость разработки и управления пакетами, а также позволяет устанавливать ограждения для развертываний и запусков. В частности:

  • Если удостоверение, используемое для развертывания пакета, совпадает с удостоверением, настроенным в параметре пакета run_as , нет ограничений. Поддерживаются все ресурсы пакета.
  • Если удостоверение, используемое для развертывания пакета, отличается от удостоверения, настроенного в параметре пакета run_as , поддерживаются только задания и конвейеры.

Установить идентификатор запуска пакета

Чтобы задать идентификатор запуска ресурсов пакета, укажите run_as в качестве сопоставления верхнего уровня, как показано в следующем примере:

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'

Внимание

Параметр run_as не поддерживается для конечных точек обслуживания моделей. Ошибка возникает, если эти ресурсы определены в пакете, где run_as также настроены.

Задание идентификаторов целевого развертывания

Целесообразно настроить идентификаторы запуска для промежуточных и рабочих целевых сред развертывания. Кроме того, настройка удостоверения для субъектов-служб run_as на целевых производственных объектах является наиболее безопасным способом выполнения производственного рабочего процесса.

  • Гарантирует, что рабочий процесс был развернут тем же service principal или кем-либо, имеющим разрешения CAN_USE на этот service principal.
  • Отделяет разрешение на запуск производственного рабочего процесса от личности, создавшей или развернувшей пакет.
  • Позволяет пользователям настраивать и задавать учетную запись службы для продуктивной среды с меньшим количеством разрешений, чем идентификатор, используемый для развертывания производственного пакета.

В следующем примере databricks.yml файла конфигурации были настроены три целевых режима: разработка, промежуточное развертывание и рабочая среда. Режим разработки настроен на запуск от имени отдельного пользователя, а промежуточный и рабочий режимы настроены на запуск с использованием двух разных служебных принципалов. Субъекты-службы всегда находятся в виде идентификатора приложения, который можно получить на странице субъекта-службы в параметрах администратора рабочей области.

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'