Поделиться через


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

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

Этот run_as параметр можно настроить как сопоставление верхнего уровня для применения к ресурсам или в target сопоставлении развертывания в файле конфигурации пакета. Его можно задать как a user_name или a 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" 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"

Внимание

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

Установка удостоверений целевого развертывания

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

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

В следующем примере 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"