Share via


Angeben einer Ausführungsidentität für einen Databricks-Ressourcenpaketworkflow

In diesem Artikel wird beschrieben, wie Sie die run_as-Einstellung verwenden, um die Identität zum Ausführen eines Databricks-Ressourcenpaketworkflows anzugeben.

Die run_as-Einstellung kann als Zuordnung auf oberster Ebene zur Anwendung auf Ressourcen oder in einer target-Bereitstellungszuordnung in einer Paketkonfigurationsdatei konfiguriert werden. Sie kann auf einen user_name oder einen service_principal_name festgelegt werden.

Diese Einstellung bietet die Möglichkeit, die zum Bereitstellen eines Paketauftrags oder einer Pipeline verwendete Identität von der Identität zu trennen, die vom Auftrags- oder Pipelineworkflow zum Ausführen verwendet wird. Dies erhöht die Flexibilität der Paketentwicklung und -verwaltung und ermöglicht gleichzeitig die Einrichtung von Schutzmaßnahmen für Bereitstellungen und Ausführungen. Dies gilt insbesondere für:

  • Wenn die zum Bereitstellen eines Pakets verwendete Identität mit der Identität identisch ist, die in der run_as-Einstellung des Pakets konfiguriert ist, gibt es keine Einschränkungen. Alle Paketressourcen werden unterstützt.
  • Wenn sich die zum Bereitstellen eines Pakets verwendete Identität von der Identität unterscheidet, die in der run_as-Einstellung des Pakets konfiguriert ist, wird nur eine Teilmenge von Paketressourcen unterstützt. Pipelines und Modellbereitstellungsendpunkte werden nicht unterstützt.

Festlegen einer Ausführungsidentität für das Paket

Um die Ausführungsidentität von Paketressourcen festzulegen, geben Sie wie im folgenden Beispiel gezeigt run_as als Zuordnung der obersten Ebene an:

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"

Wichtig

Die run_as-Einstellung wird nicht für Pipelines oder Modellbereitstellungsendpunkte unterstützt. Wenn diese Ressourcen in einem Paket definiert sind, in dem run_as ebenfalls konfiguriert ist, tritt ein Fehler auf.

Festlegen von Zielbereitstellungsidentitäten

Es empfiehlt sich, Ausführungsidentitäten für Staging- und Produktionszielbereitstellungen zu konfigurieren. Darüber hinaus ist das Festlegen einer run_as-Identität auf einen Dienstprinzipal für Produktionsziele aus den folgenden Gründen die sicherste Methode, einen Produktionsworkflow auszuführen:

  • Es wird sichergestellt, dass der Workflow entweder vom gleichen Dienstprinzipal oder von einer Person mit CAN_USE-Berechtigungen für den Dienstprinzipal selbst bereitgestellt wurde.
  • Die Berechtigung zum Ausführen des Produktionsworkflows wird von der Identität getrennt, die das Paket erstellt oder bereitgestellt hat.
  • Benutzer können einen Dienstprinzipal für die Produktion konfigurieren, der über weniger Berechtigungen als die zum Bereitstellen des Produktionspakets verwendete Identität verfügt.

In der folgenden databricks.yml-Beispielkonfigurationsdatei wurden drei Zielmodi konfiguriert: Entwicklung, Staging und Produktion. Der Entwicklungsmodus wird für die Ausführung als einzelner Benutzer konfiguriert, und die Staging- und Produktionsmodi werden für die Ausführung mit zwei verschiedenen Dienstprinzipalen konfiguriert. Dienstprinzipale haben immer das Format einer Anwendungs-ID, die über die Seite eines Dienstprinzipals in den Administratoreinstellungen des Arbeitsbereichs abgerufen werden kann.

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"