Azure DevOps パイプラインのワークロード ID フェデレーションを有効にする
Databricks OAuth トークン フェデレーション (OpenID Connect (OIDC) とも呼ばれます) を使用すると、Databricks の外部で実行されている自動化されたワークロードで、Databricks シークレットを必要とせずに Databricks に安全にアクセスできます。「OAuth トークン フェデレーションを使用して Databricks へのアクセスを認証する」を参照してください。
Azure DevOps パイプラインのワークロード ID フェデレーションを有効にするには:
ワークロード ID フェデレーションを有効にすると、 Databricks SDK と Databricks CLI は Azure DevOps パイプラインからワークロード ID トークンを自動的にフェッチし、それらを Databricks OAuth トークンと交換します。
フェデレーション ポリシーを作成する
まず、カスタム・ワークロード・アイデンティティ・フェデレーション・ポリシーを作成します。手順については、「 サービスプリンシパル フェデレーション ポリシーを構成する」を参照してください。 Azure DevOps の場合は、ポリシーに次の値を設定します。
- 発行者 URL:
https://vstoken.dev.azure.com/<org_id>
、ここで、<org-id>
は Azure DevOps 組織の GUID です - 観客:
api://AzureADTokenExchange
- 件名:
p://<org-name>/<project-name>/<pipeline-name>
ここで、<org-name>
は Azure DevOps 組織名、<project-name>
は Azure DevOps プロジェクト名、<pipeline-name>
は Azure DevOps パイプラインの名前です。
たとえば、次のDatabricks CLI コマンドは、組織 ID 7f1078d6-b20d-4a20-9d88-05a2f0d645a3
のフェデレーション ポリシーを作成し、Databricks サービスプリンシパルの数値 ID を 5581763342009999
を作成します。
databricks account service-principal-federation-policy create 5581763342009999 --json '{
"oidc_policy": {
"issuer": "https://vstoken.dev.azure.com/7f1078d6-b20d-4a20-9d88-05a2f0d645a3",
"audiences": [
"api://AzureADTokenExchange"
],
"subject": "p://my-org/my-project/my-pipeline"
}
}
'
YAML を構成する
次に、設定ファイルを変更します。次のワークスペース環境変数を設定するだけでなく、Azure CLI を使用してジョブでトークンを取得し、それを DATABRICKS_OIDC_TOKEN
.
DATABRICKS_AUTH_TYPE
:env-oidc
DATABRICKS_HOST
: Databricks ワークスペースの URLDATABRICKS_CLIENT_ID
: サービスプリンシパル (application) ID
trigger: none
pool: test # my self-hosted pool name
variables:
DATABRICKS_HOST: https://my-workspace.cloud.databricks.com/
DATABRICKS_AUTH_TYPE: env-oidc
DATABRICKS_CLIENT_ID: a1b2c3d4-ee42-1eet-1337-f00b44r
steps:
- script: |
OIDC_REQUEST_URL="${SYSTEM_OIDCREQUESTURI}?api-version=7.1"
export DATABRICKS_OIDC_TOKEN=$(curl -s -H "Content-Length: 0" -H "Content-Type: application/json" -H "Authorization: Bearer $(System.AccessToken)" -X POST $OIDC_REQUEST_URL | jq -r '.oidcToken')
databricks current-user me
displayName: 'Display Databricks current user information'