Ange en körningsidentitet för ett Databricks Asset Bundles-arbetsflöde
Den här artikeln beskriver hur du använder inställningen run_as
för att ange den identitet som ska användas när du kör Arbetsflöden för Databricks-tillgångspaket.
Inställningen run_as
kan konfigureras som en toppnivåmappning som ska tillämpas på resurser eller i en target
distributionsmappning i en paketkonfigurationsfil. Den kan ställas in på en user_name
eller en service_principal_name
.
Den här inställningen ger möjlighet att separera identiteten som används för att distribuera ett paketjobb eller en pipeline från den som används av jobbet eller pipelinearbetsflödet som ska köras. Detta ökar flexibiliteten för paketutveckling och hantering, samtidigt som skyddsräcken kan upprättas för distributioner och körningar. Framför allt:
- Om identiteten som används för att distribuera ett paket är densamma som den identitet som konfigurerats i paketets
run_as
inställning finns det inga begränsningar. Alla paketresurser stöds. - Om identiteten som används för att distribuera ett paket skiljer sig från den identitet som konfigurerats i paketets
run_as
inställning stöds endast en delmängd av paketresurserna . Pipelines och modell som betjänar slutpunkter stöds inte.
Ange en paketkörningsidentitet
Om du vill ange körningsidentiteten för paketresurser anger du run_as
som en mappning på den översta nivån enligt följande exempel:
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"
Viktigt!
Inställningen run_as
stöds inte för pipelines eller modell som betjänar slutpunkter. Ett fel uppstår om dessa resurser definieras i ett paket där run_as
även konfigureras.
Ange måldistributionsidentiteter
Det är bästa praxis att konfigurera körningsidentiteter för distributioner av mellanlagrings- och produktionsmål. Dessutom är det säkraste sättet att köra ett produktionsarbetsflöde att ange en run_as
identitet till ett tjänsthuvudnamn för produktionsmål:
- Säkerställer att arbetsflödet antingen har distribuerats av samma tjänsthuvudnamn eller av någon med CAN_USE behörigheter för själva tjänstens huvudnamn.
- Frikopplar behörigheten att köra produktionsarbetsflödet från identiteten som skapade eller distribuerade paketet.
- Tillåter användare att konfigurera och ange ett huvudnamn för tjänsten för produktion med färre behörigheter än den identitet som används för att distribuera produktionspaketet.
I följande exempelkonfigurationsfil databricks.yml
har tre mållägen konfigurerats: utveckling, mellanlagring och produktion. Utvecklingsläget är konfigurerat att köras som en enskild användare och mellanlagrings- och produktionslägena är konfigurerade att köras med två olika tjänsthuvudnamn. Tjänstens huvudnamn är alltid i form av ett program-ID som kan hämtas från en tjänsthuvudnamnssida i administratörsinställningarna för arbetsytan.
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"