Udostępnij za pośrednictwem


Określanie tożsamości przebiegu dla przepływu pracy pakietów zasobów usługi Databricks

W tym artykule opisano sposób użycia run_as ustawienia w celu określenia tożsamości, która ma być używana podczas uruchamiania przepływów pracy pakietów zasobów usługi Databricks.

Ustawienie run_as można skonfigurować jako mapowanie najwyższego poziomu w celu zastosowania do zasobów lub w ramach target mapowania wdrożenia w pliku konfiguracji pakietu. Można go ustawić na user_name lub service_principal_name.

To ustawienie umożliwia oddzielenie tożsamości używanej do wdrożenia zadania pakietu lub potoku od tego, który jest używany przez zadanie lub przepływ pracy potoku do uruchomienia. Zwiększa to elastyczność tworzenia pakietów i zarządzania nimi, a jednocześnie umożliwia ustanowienie barier zabezpieczających na potrzeby wdrożeń i przebiegów. W szczególności:

  • Jeśli tożsamość używana do wdrażania pakietu jest taka sama jak tożsamość skonfigurowana w ustawieniu pakietu run_as , nie ma żadnych ograniczeń. Wszystkie zasoby pakietu są obsługiwane.
  • Jeśli tożsamość używana do wdrażania pakietu różni się od tożsamości skonfigurowanej w ustawieniu pakietu run_as , obsługiwane są tylko podzestaw zasobów pakietu. Potoki i punkty końcowe obsługujące model nie są obsługiwane.

Ustawianie tożsamości przebiegu pakietu

Aby ustawić tożsamość uruchamiania zasobów pakietu, określ run_as jako mapowanie najwyższego poziomu, jak pokazano w poniższym przykładzie:

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"

Ważne

Ustawienie run_as nie jest obsługiwane w przypadku potoków ani punktów końcowych obsługujących model. Błąd występuje, jeśli te zasoby są zdefiniowane w pakiecie, w którym skonfigurowano również run_as.

Ustawianie tożsamości wdrożenia docelowego

Najlepszym rozwiązaniem jest skonfigurowanie tożsamości uruchamiania na potrzeby wdrożeń docelowych w środowisku przejściowym i produkcyjnym. Ponadto ustawienie run_as tożsamości jednostki usługi dla celów produkcyjnych jest najbezpieczniejszym sposobem uruchamiania produkcyjnego przepływu pracy:

  • Gwarantuje, że przepływ pracy został wdrożony przez tę samą jednostkę usługi lub przez osobę z uprawnieniami CAN_USE dla samej jednostki usługi.
  • Rozdziela uprawnienia do uruchamiania przepływu pracy produkcyjnego z tożsamości utworzonej lub wdrożonej pakietu.
  • Umożliwia użytkownikom konfigurowanie i ustawianie elementu głównego usługi dla środowiska produkcyjnego z mniejszą liczbą uprawnień niż tożsamość używana do wdrażania produkcyjnego pakietu.

W poniższym przykładowym databricks.yml pliku konfiguracji skonfigurowano trzy tryby docelowe: programowanie, przemieszczanie i produkcja. Tryb programowania jest skonfigurowany do uruchamiania jako użytkownik indywidualny, a tryb przejściowy i produkcyjny są skonfigurowane do uruchamiania przy użyciu dwóch różnych jednostek usługi. Jednostki usługi są zawsze w postaci identyfikatora aplikacji, który można pobrać ze strony jednostki usługi w ustawieniach administratora obszaru roboczego.

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"