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"