OAuth トークン フェデレーションを使用して Databricks へのアクセスを認証する
この記事では、ID プロバイダーからのトークンを使用して Databricks アカウントとワークスペースのリソースにアクセスするための OAuth フェデレーションの構成について説明します。
Databricks OAuth トークンフェデレーションとは
Databricks OAuth トークンフェデレーションを使用すると、ID プロバイダー (IdP) からトークンを使用して Databricks APIs に安全にアクセスできます。 OAuthトークンDatabricks フェデレーションを使用すると、個人用アクセス トークンや クライアント シークレットなどのDatabricksOAuth シークレットを管理する必要がなくなります。
Databricks OAuthトークン フェデレーションを使用して、ユーザーとサービスプリンシパルは、ID プロバイダーからの JWT (JSON Web トークン) トークンを Databricks OAuth トークンと交換し、トークンを使用して ID にアクセスできますDatabricks APIs。
Databricks では、次の 2 種類のトークン フェデレーションがサポートされています。
アカウント全体のトークン フェデレーション を使用すると、 Databricks アカウント内のすべてのユーザーとサービスプリンシパルが、ID プロバイダーからのトークンを使用して Databricks APIs にアクセスできます。 アカウント全体のトークン フェデレーションを使用すると、ID プロバイダーのトークン発行ポリシーの管理を一元化でき、通常は SCIMと組み合わせて使用されるため、ID プロバイダーのユーザーは Databricks アカウントに同期されます。
ワークロード ID フェデレーション を使用すると、 の外部で実行されている自動化されたワークロードは、Databricks DatabricksAPIsシークレットを必要とせずにDatabricks にアクセスできます。ワークロード ID フェデレーションでは、アプリケーション (ワークロード) は、ワークロードランタイムによって発行されたトークンを使用して、Databricks サービスプリンシパルとして Databricks に対して認証されます。
アカウント全体のトークンフェデレーション
アカウント 管理者は OAuth アカウント フェデレーション ポリシーを使用して、 Databricks アカウントでトークン フェデレーションを構成できます。 アカウント federation ポリシー を使用すると、 Databricks アカウント内のすべてのユーザーとサービスプリンシパルが、ID プロバイダーからのトークンを使用して Databricks APIs にアクセスできます。 アカウント フェデレーション ポリシーでは、次のものを指定します。
Databricks がトークンを受け入れる ID プロバイダーまたは発行者。
トークンを対応する Databricks ユーザーまたはサービスプリンシパルにマッピングするための基準。
アカウント フェデレーション ポリシーを構成するには、次の情報を指定します。
トークンの
iss
要求で指定されている必要なトークン発行者。発行者は、ID プロバイダーを識別する HTTPS URL です。トークンの
aud
要求で指定されている、許可されたトークン対象ユーザー。この識別子は、トークンの受信者を表します。 トークン内のオーディエンスがポリシー内の少なくとも 1 つのオーディエンスと一致する限り、トークンは一致と見なされます。 指定しない場合、デフォルト値は Databricks アカウント ID です。件名の主張。これは、トークンが発行されたユーザーの Databricks ユーザー名がどのトークン要求に含まれているかを示します。 指定しない場合、デフォルト値は
sub
です。必要に応じて、トークンの署名を検証するために使用される公開鍵 (JSON Web Key Sets (JWKS) 形式)。 指定しない場合 (推奨)、Databricks は発行者の既知のエンドポイントから公開キーを自動的にフェッチします。 Databricks では、公開キーの検出について、発行者の既知のエンドポイントに依存することを強くお勧めします。
注:
フェデレーション ポリシーで JWKS を指定しない場合 (推奨)、ID プロバイダーは OpenID プロバイダー メタデータを
{issuer-url}/.well-known/openid-configuration
で提供する必要があります。 OpenID プロバイダー メタデータには、トークンの署名の検証に使用される公開キーの場所を指定するjwks_uri
が含まれている必要があります。
次に、アカウントフェデレーションポリシーの例を示します。
issuer: "https://idp.mycompany.com/oidc"
audiences: ["databricks"]
subject_claim: "sub"
次の例の JWT 本文は上記のポリシーと一致し、ユーザー username@mycompany.com
として Databricks への認証に使用できます。
{
"iss": "https://idp.mycompany.com/oidc",
"aud": "databricks",
"sub": "username@mycompany.com"
}
アカウントフェデレーションポリシーを構成する
アカウント 管理者は、Databricks CLI (バージョン 0.239.0 以降) または Databricks APIを使用してアカウント フェデレーション ポリシーを構成できます。Databricks アカウントでは、最大 5 つのアカウント フェデレーション ポリシーを指定できます。
最新バージョンの Databricks CLI をインストールまたは更新します。
アカウント管理者として、CLI を使用して Databricks アカウントに認証します。 アカウントの指定(例:https://accounts.cloud.databricks.com) そしてあなたの Databricks アカウント:
databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
アカウント フェデレーション ポリシーを作成します。 例えば:
databricks account federation-policy create --json \ '{ "oidc_policy": { "issuer": "https://idp.mycompany.com/oidc", "audiences": [ "databricks" ], "subject_claim": "sub" } }'
アカウント フェデレーション ポリシーを作成するための Databricks REST API 呼び出しの例を次に示します。
curl --request POST \
--header "Authorization: Bearer $TOKEN" \
"https://accounts.cloud.databricks.com/api/2.0/accounts/${ACCOUNT_ID}/federationPolicies" \
--data '{
"oidc_policy": {
"issuer": "https://idp.mycompany.com/oidc",
"audiences": [
"databricks"
],
"subject_claim": "sub"
}
}'
ユーザーが Databricks と交換するためのトークンを生成するように ID プロバイダーを構成する必要がある場合があります。 手順については、ID プロバイダーのドキュメントを参照してください。
アカウントフェデレーションポリシーの例
フェデレーション ポリシー |
一致するトークンの例 |
---|---|
|
|
|
|
|
|
|
|
ワークロード ID フェデレーション
ワークロード ID フェデレーションを使用すると、 の外部で実行されている自動化されたワークロードは、Databricks DatabricksAPIsシークレットを必要とせずにDatabricks にアクセスできます。アカウント 管理者は、サービスプリンシパル フェデレーション ポリシーを使用してワークロード ID フェデレーションを構成できます。
サービスプリンシパル federation ポリシーは、 Databricks アカウントのサービスプリンシパルに関連付けられ、次の項目を指定します。
サービスプリンシパルが認証できる ID プロバイダー (または発行者)。
Databricks サービスプリンシパルとしての認証が許可されているワークロード ID (またはサブジェクト)。
サービスプリンシパル フェデレーション ポリシーを構成するには、次の情報を提供します。
ワークロード ID トークンの
iss
要求で指定される、必要なトークン発行者。発行者は、ワークロード ID プロバイダーを識別する HTTPS URL です。ワークロード ID トークンの
sub
要求で指定される、必要なトークンのサブジェクト。このサブジェクトは、ワークロード・ランタイム環境内のワークロードを一意的に識別します。ワークロード ID トークンの
aud
要求で指定される、許可されたトークン対象ユーザー。オーディエンスは、トークンの受信者を表します。 トークン内のオーディエンスがポリシー内の少なくとも 1 つのオーディエンスと一致する限り、トークンは一致と見なされます。 指定しない場合、デフォルト値は Databricks アカウント ID です。必要に応じて、ワークロード ID トークンの署名を検証するために使用される公開キー (JSON Web Key Sets (JWKS) 形式)。 指定しない場合 (推奨)、Databricks は発行者の既知のエンドポイントから公開キーを自動的にフェッチします。 Databricks では、公開キーの検出に発行者の既知のエンドポイントに依存することを強くお勧めします。
必要に応じて、サブジェクトの主張。 これは、トークンのワークロード ID (またはサブジェクト) を含むトークン要求を示します。 指定しない場合、デフォルト値は
sub
です。 Databricks ワークロード ID フェデレーションに デフォルトsub
要求を使用することを強くお勧めします。sub
以外のクレームは、sub
クレームが適切または安定したサブジェクト識別子ではない場合にのみ使用する必要があります。これはまれです。詳細については、以下の 「サービスプリンシパル federation ポリシーの例 」を参照してください。注:
フェデレーション ポリシーで JWKS を指定しない場合 (推奨)、ID プロバイダーは OpenID プロバイダー メタデータを
{issuer-url}/.well-known/openid-configuration
で提供する必要があります。 OpenID プロバイダー メタデータには、トークンの署名の検証に使用される公開キーの場所を指定するjwks_uri
が含まれている必要があります。
次に、 GitHub Actions ワークロードのサービスプリンシパル federation ポリシーの例を示します。
issuer: "https://token.actions.githubusercontent.com"
audiences: ["https://github.com/my-github-org"]
subject: "repo:my-github-org/my-repo:environment:prod"
次の例の JWT 本文は上記のポリシーと一致し、Databricks への認証に使用できます。
{
"iss": "https://token.actions.githubusercontent.com",
"aud": "https://github.com/my-github-org",
"sub": "repo:my-github-org/my-repo:environment:prod"
}
サービスプリンシパル フェデレーション ポリシーを構成する
アカウント 管理者は、Databricks CLI (バージョン 0.239.0 以降) または Databricks APIを使用してサービスプリンシパル フェデレーション ポリシーを構成できます。サービスプリンシパルごとに最大 5 つのサービスプリンシパル フェデレーション ポリシー Databricks 作成できます。
最新バージョンの Databricks CLI をインストールまたは更新します。
アカウント管理者として、CLI を使用して Databricks アカウントに認証します。 アカウントの指定(例:https://accounts.cloud.databricks.com) そしてあなたの Databricks アカウント:
databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
サービスプリンシパル federation ポリシーを作成し、サービスプリンシパル アプリケーション ID (
3659993829438643
など) を指定します。 次に、 GitHub Actions ワークロードの例を示します。databricks account service-principal-federation-policy create ${SERVICE_PRINCIPAL_ID} --json \ '{ "oidc_policy": { "issuer": "https://token.actions.githubusercontent.com", "audiences": [ "https://github.com/my-github-org" ], "subject": "repo:my-github-org/my-repo:environment:prod" } }'
DatabricksRESTAPI次に、 ワークロードのポリシーを作成するGitHub Actions 呼び出しの例を示します。
curl --request POST \
--header "Authorization: Bearer $TOKEN" \
"https://accounts.cloud.databricks.com/api/2.0/accounts/${ACCOUNT_ID}/servicePrincipals/${SERVICE_PRINCIPAL_ID}/federationPolicies" \
--data '{
"oidc_policy": {
"issuer": "https://token.actions.githubusercontent.com",
"audiences": [
"https://github.com/my-github-org"
],
"subject": "repo:my-github-org/my-repo:environment:prod"
}
}'
例 Databricks アカウント and サービスプリンシパル federation ポリシー
ツール |
フェデレーション ポリシー |
一致するトークンの例 |
---|---|---|
GitHub Actions |
|
|
Kubernetes の |
|
|
Azure DevOps |
|
|
GitLab |
|
|
CircleCIの |
|
|
アカウントのフェデレーションポリシーを設定したら、ID プロバイダーの JWT を使用して Databricks API にアクセスできます。 これを行うには、まず ID プロバイダーからの JWT トークンを Databricks OAuth トークンと交換し、次に API 呼び出しの Bearer:
フィールドで Databricks OAuth トークンを使用してアクセスを取得し、呼び出しを完了します。 トークンは、RS256 または ES256 アルゴリズムを使用して署名された有効な JWT である必要があります。
このプロセスのガイダンスについては、「 ID プロバイダー トークンを使用して Databricks に対して認証する」を参照してください。