Specificare un'identità di esecuzione per un flusso di lavoro dei bundle di asset di Databricks
Questo articolo descrive come usare l'impostazione run_as
per specificare l'identità da usare durante l'esecuzione dei flussi di lavoro di Databricks Asset Bundles.
L'impostazione run_as
può essere configurata come mapping di primo livello da applicare alle risorse o all'interno di un target
mapping di distribuzione in un file di configurazione del bundle. Può essere set, user_name
o service_principal_name
.
Questa impostazione consente di separare l'identità usata per distribuire un processo o una pipeline bundle da quella usata dal flusso di lavoro del processo o della pipeline da eseguire. In questo modo si aumenta la flessibilità di sviluppo e gestione dei bundle, consentendo allo stesso tempo di stabilire protezioni per le distribuzioni e le esecuzioni. In particolare:
- Se l'identità usata per distribuire un bundle corrisponde all'identità configurata nell'impostazione del
run_as
bundle non sono previste restrizioni. Tutte le risorse bundle sono supportate. - Se l'identità usata per distribuire un bundle è diversa dall'identità configurata nell'impostazione del
run_as
bundle, sono supportati solo un subset di risorse bundle. Le pipeline e i modelli che servono gli endpoint non sono supportati.
Set un'identità di esecuzione del bundle
Per set l'identità di esecuzione delle risorse del bundle, specificare run_as
come mapping di primo livello, come illustrato nell'esempio seguente:
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"
Importante
L'impostazione run_as
non è supportata per le pipeline o i modelli che servono gli endpoint. Si verifica un errore se queste risorse sono definite in un bundle, e whereorun_as
sono configurati anche.
Set identità di distribuzione di destinazione
È consigliabile configurare le identità di esecuzione per le distribuzioni di staging e di destinazione di produzione. Inoltre, l'impostazione di un'identità run_as
su un'entità servizio per le destinazioni di produzione è il modo più sicuro per eseguire un flusso di lavoro di produzione come segue:
- Assicura che il flusso di lavoro sia stato distribuito dalla stessa entità servizio o da un utente con autorizzazioni CAN_USE per l'entità servizio stessa.
- Separa l'autorizzazione per eseguire il flusso di lavoro di produzione dall'identità che ha creato o distribuito il bundle.
- Permette agli utenti di configurare e set un'entità di servizio per la produzione con meno autorizzazioni rispetto a quelle dell'identità utilizzata per distribuire il pacchetto di produzione.
Nel file di configurazione di esempio databricks.yml
seguente sono state configurate tre modalità di destinazione: sviluppo, gestione temporanea e produzione. La modalità di sviluppo è configurata per l'esecuzione come singolo utente e le modalità di gestione temporanea e di produzione sono configurate per l'esecuzione usando due entità servizio diverse. Le entità servizio sono sempre sotto forma di ID applicazione, che possono essere recuperate dalla pagina di un'entità servizio nelle impostazioni di amministrazione dell'area di lavoro.
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"