Dela via


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"