Freigeben über


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 Bündels verwendete Identität mit der identität übereinstimmt, die in der Einstellung des Bundles run_as konfiguriert ist, gibt es keine Einschränkungen. Alle Paketressourcen werden unterstützt.
  • Wenn sich die zum Bereitstellen eines Bündels verwendete Identität von der identität unterscheidet, die in der Einstellung des Bundles run_as konfiguriert ist, werden nur Aufträge und Pipelines 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_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'

Wichtig

Die run_as Einstellung wird für die Modellbereitstellung von Endpunkten nicht 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 befinden sich immer in Form einer Anwendungs-ID, die über die Seite eines Dienstprinzipals in den Administratoreinstellungen ihres 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'