指定 Databricks 資產套件組合工作流程的執行身分識別
本文說明如何使用 run_as
設定來指定執行 Databricks 資產組合工作流程時要使用的身分識別。
設定run_as
可以設定為最上層對應,以套用至資源,或在套件組合組態檔中的部署對應內target
。 這個選項可以設定為 user_name
或 service_principal_name
。
此設定可讓您將用來部署套件組合作業或管線的身分識別與作業或管線工作流程用來執行的身分識別分開。 這會增加套件組合開發和管理的彈性,同時允許針對部署和執行建立護欄。 特別是:
- 如果用來部署套件組合的身分識別與套件組合設定中設定的
run_as
身分識別相同,則沒有任何限制。 支援所有 套件組合資源 。 - 如果用來部署套件組合的身分識別與套件組合設定中設定的
run_as
身分識別不同,則僅支援套件組合資源的子集。 不支援管線和模型服務端點。
設定套件組合執行身分識別
若要設定套件組合資源的執行身分識別,請指定 run_as
為最上層對應,如下列範例所示:
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"
重要
run_as
管線或服務端點的模型不支援此設定。 如果在同時設定的套件組合 run_as
中定義這些資源,就會發生錯誤。
設定目標部署身分識別
最佳做法是設定預備和生產目標部署的執行身分識別。 此外,將 run_as
身分識別設定為 生產目標的服務主體 ,是執行生產工作流程的最安全方式:
- 確保工作流程是由相同的服務主體所部署,或是由具有服務主體本身CAN_USE許可權的人員所部署。
- 將執行生產工作流程的許可權與建立或部署套件組合的身分識別分離。
- 允許使用者為生產環境設定服務主體,其許可權比用來部署生產套件組合的身分識別少。
在下列範例 databricks.yml
組態檔中,已設定三個目標模式:開發、預備和生產環境。 開發模式設定為以個別使用者身分執行,而預備和生產模式則設定為使用兩個不同的服務主體執行。 服務主體一律會以應用程式標識碼的形式顯示,您可以從工作區管理員設定中的服務主體頁面擷取。
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"