フェデレーション ポリシーを構成する
Databricks OAuth トークンフェデレーションを使用すると、ID プロバイダー (IdP) からトークンを使用して Databricks APIs に安全にアクセスできます。 OAuth トークンのフェデレーションを有効にするには、フェデレーションポリシーを Databricks アカウント全体またはワークロード用に構成する必要があります。
この記事では、OAuth トークン フェデレーション ポリシーを作成および構成する方法について説明します。
ワークロード ID フェデレーション
ワークロード ID フェデレーションを使用すると、 の外部で実行されている自動化されたワークロードは、Databricks DatabricksAPIシークレットを必要とせずにDatabricks にアクセスできます。アカウント 管理者は、サービスプリンシパル フェデレーション ポリシーを使用してワークロード ID フェデレーションを構成できます。
サービスプリンシパル federation ポリシーは、 Databricks アカウントのサービスプリンシパルに関連付けられ、次の項目を指定します。
- サービスプリンシパルが認証できる ID プロバイダー (または発行者)。
- Databricks サービスプリンシパルとしての認証が許可されているワークロード ID (またはサブジェクト)。
たとえば、 GitHub Actions ワークロードに対して次のサービスプリンシパル フェデレーション ポリシーがあるとします。
- 発行者:
https://token.actions.githubusercontent.com
- 観客:
https://github.com/my-github-org
- 件名:
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 または Databricks APIを使用してサービスプリンシパルフェデレーションポリシーを構成できます。 サービスプリンシパルごとに最大 20 個のサービスプリンシパル フェデレーション ポリシーを作成できます Databricks プリンシパル。
サービスプリンシパル フェデレーション ポリシーを設定するには、以下を指定する必要があります。
- 発行者URL: ワークロード ID トークンの
iss
要求で指定された、ワークロード ID プロバイダーを識別する HTTPS URL。 - 件名: ワークロード・ランタイム環境内のワークロードの固有識別子。デフォルトは
sub
で、 - 観客:
aud
要求で指定されているトークンの意図された受信者。トークンは、その対象ユーザーがポリシー内の少なくとも 1 つの対象と一致する場合、一致と見なされます。指定しない場合、 デフォルト は アカウント ID Databricks です。 - サブジェクト要求: (省略可能) トークンのワークロード ID (サブジェクトとも呼ばれます) を含むトークン要求を指定します。設定しない場合、 Databricks は
sub
by デフォルトを使用します。 Databricks 、ワークロード ID フェデレーションの デフォルトsub
要求を維持することをお勧めします。 別の主張を選択するのは、sub
が適切または安定したサブジェクト識別子でない場合のみであり、これはまれです。詳細については、「 サービスプリンシパル フェデレーション ポリシーの例」を参照してください。 - トークン署名の検証: (オプション) トークン署名の検証に使用される Web キーセット (JWKS) 形式の公開鍵またはその URL JSON 。 指定しない場合、Databricks は発行者の既知のエンドポイントから自動的に取得します (推奨されるアプローチです)。公開鍵を指定しない場合、ID プロバイダーは
<issuer-url>/.well-known/openid-configuration
で OpenID プロバイダーメタデータを提供する必要があります。メタデータには、トークン署名の検証に使用される公開鍵の場所を指定するjwks_uri
が含まれている必要があります。
- Databricks UI
- Databricks CLI
- Databricks Account API
- アカウント管理者として、
https://accounts.cloud.databricks.com
で Databricks アカウント コンソールにサインインします。 - [ ユーザー管理 ] をクリックします。
- サービスプリンシパル タブに移動します。
- ポリシーを作成するサービスプリンシパルを選択します。
- [ 資格情報とシークレット ] タブに移動します。
- [フェデレーション ポリシー ] タブで、[ ポリシーの作成 ] をクリックします。
- フェデレーション資格情報プロバイダーを選択し、対応するフィールドを構成します。
- 「 ポリシーの作成 」をクリックします。
Databricks ワークスペース Web ターミナルのDatabricks CLIを使用してフェデレーション ポリシーを作成することはできません。
-
最新バージョンの Databricks CLI をインストールまたは更新します。
-
アカウント管理者として、CLI を使用して Databricks アカウントに対して認証します。
ACCOUNT_CONSOLE_URL
と DatabricksACCOUNT_ID
を指定します。Bashdatabricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
-
フェデレーション ポリシーが適用されるサービスプリンシパルの数値 ID を取得します。 (たとえば、
3659993829438643
などです。サービスプリンシパル アプリケーション ID (通常は
bc3cfe6c-469e-4130-b425-5384c4aa30bb
などの GUID 値) が事前にわかっている場合は、次の Databricks CLIを使用してサービスプリンシパルの数値 ID を特定できます。Bashdatabricks account service-principals list --filter 'applicationId eq "<service-principal-application-id>"'
-
サービスプリンシパル federation ポリシーを作成します。 次に、 GitHub Actionsのフェデレーション ポリシーを作成する例を示します。
Bashdatabricks account service-principal-federation-policy create ${SERVICE_PRINCIPAL_NUMERIC_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"
}
}'
-
フェデレーション ポリシーが適用されるサービスプリンシパルの数値 ID を取得します (例:
3659993829438643
)。サービスプリンシパル アプリケーション ID (通常はbc3cfe6c-469e-4130-b425-5384c4aa30bb
などの GUID 値) が事前にわかっている場合は、 Databricks サービスプリンシパル REST APIを使用してサービスプリンシパルの数値 ID を特定できます。Bashcurl --get \
--header "Authorization: Bearer $TOKEN" \
"https://accounts.cloud.databricks.com/api/2.0/accounts/${ACCOUNT_ID}/scim/v2/ServicePrincipals" \
--data-urlencode 'filter=applicationId eq "<service-principal-application-id>"'サービスプリンシパル 数値 ID は、応答の
id
フィールドに返されます。 -
サービスプリンシパル federation ポリシーを作成します。 次に、 GitHub Actionsのフェデレーション ポリシーを作成する例を示します。
Bashcurl --request POST \
--header "Authorization: Bearer $TOKEN" \
"https://accounts.cloud.databricks.com/api/2.0/accounts/${ACCOUNT_ID}/servicePrincipals/${SERVICE_PRINCIPAL_NUMERIC_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"
}
}'
Example Databricks サービスプリンシパル federation ポリシー
次の表に、サービスプリンシパル federation ポリシーと対応する JWT 本文の例を示します。
これらの一般的な ID プロバイダーの一部でワークロード ID フェデレーションを有効にするための完全な構成手順については、「 CI/CD でワークロード ID フェデレーションを有効にする」を参照してください。
ツール | フェデレーション ポリシー | 一致するトークンの例 |
---|---|---|
GitHub Actions | 発行者: |
|
Kubernetes の | 発行者: |
|
Azure DevOps | 発行者: |
|
GitLab | 発行者: |
|
CircleCIの | 発行者: |
|
アカウント全体のトークンフェデレーション
アカウント 管理者は OAuth アカウント フェデレーション ポリシーを使用して、 Databricks アカウントでトークン フェデレーションを構成できます。 アカウント federation ポリシー を使用すると、 Databricks アカウント内のすべてのユーザーとサービスプリンシパルが、ID プロバイダーからのトークンを使用して Databricks API にアクセスできます。 アカウント フェデレーション ポリシーでは、次のものを指定します。
- Databricks がトークンを受け入れる ID プロバイダーまたは発行者。
- トークンを対応する Databricks ユーザーまたはサービスプリンシパルにマッピングするための基準。
たとえば、次のフィールドを持つフェデレーションポリシーがあるとします。
- 発行者:
https://idp.mycompany.com/oidc
- 観客:
databricks
- 主題の主張:
sub
この JWT 本文を使用して、次のように Databricks に認証しますusername@mycompany.com
{
"iss": "https://idp.mycompany.com/oidc",
"aud": "databricks",
"sub": "username@mycompany.com"
}
アカウントフェデレーションポリシーを構成する
アカウント 管理者は、 Databricks UI、 Databricks CLI 、または Databricks REST APIを使用してアカウントフェデレーションポリシーを構成できます。 Databricks アカウントでは、最大 20 個のアカウント フェデレーション ポリシーを指定できます。
アカウントフェデレーションポリシーを設定するには、以下を指定する必要があります。
- 発行者URL: トークンの
iss
要求で指定された ID プロバイダーを識別する HTTPS URL。 - 観客:
aud
要求で指定されているトークンの意図された受信者。トークンは、その対象ユーザーがポリシー内の少なくとも 1 つの対象と一致する場合、一致と見なされます。指定しない場合、 デフォルト は アカウント ID Databricks です。 - 主題の主張: トークンが発行されたユーザーの Databricks ユーザー名を含むトークン要求。指定しない場合、デフォルトは
sub
です。 - トークン署名の検証: (オプション) トークン署名の検証に使用される Web キーセット (JWKS) 形式の公開鍵またはその URL JSON 。 指定しない場合、Databricks は発行者の既知のエンドポイントから自動的に取得します (推奨されるアプローチです)。公開鍵を指定しない場合、ID プロバイダーは
<issuer-url>/.well-known/openid-configuration
で OpenID プロバイダーメタデータを提供する必要があります。メタデータには、トークン署名の検証に使用される公開鍵の場所を指定するjwks_uri
が含まれている必要があります。
アカウント全体のフェデレーションの場合、 登録する フルマネージド 会社独自の IdP など、組織から信頼されています。 顧客やパートナーが管理するIdPなど、制御できない外部IdPとのアカウント全体のフェデレーションは構成しないでください。
- Databricks UI
- Databricks CLI
- Databricks Account API
- アカウント管理者として、
https://accounts.cloud.databricks.com
で Databricks アカウント コンソールにサインインします。 - [ 設定 ] をクリックし、[ 認証] タブに移動します。
- [フェデレーション ポリシー] で、[ ポリシーの作成 ] をクリックします。
- 発行者の URL、対象ユーザー、サブジェクト要求、およびオプションのトークン署名検証を入力します。
- 「 ポリシーの作成 」をクリックします。
Databricks ワークスペース Web ターミナルのDatabricks CLIを使用してフェデレーション ポリシーを作成することはできません。
-
最新バージョンの Databricks CLI をインストールまたは更新します。
-
アカウント管理者として、CLI を使用して Databricks アカウントに対して認証します。
ACCOUNT_CONSOLE_URL
と DatabricksACCOUNT_ID
を指定します。Bashdatabricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
-
アカウント フェデレーション ポリシーを作成します。例えば:
Bashdatabricks 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"
}
}'
アカウントフェデレーションポリシーの例
次の表に、アカウント フェデレーション ポリシーの例と、一致する JWT 本文を示します。
フェデレーション ポリシー | 一致するトークンの例 |
---|---|
発行者: |
|
発行者: |
|
発行者: |
|
発行者: |
|
次のステップ
アカウントのフェデレーションポリシーを設定した後、次の操作を行います。
- ユーザーが Databricks と交換できるトークンを生成するように ID プロバイダー (IdP) を構成します。セットアップの詳細については、IdP のドキュメントを参照してください。一般的な IdP でワークロード ID フェデレーションを有効にする手順については、「 CI/CD でのワークロード ID フェデレーションの有効化」を参照してください。
- IdP の JWT を使用して、最初に Databricks OAuth トークンと交換して Databricks API にアクセスします。API 呼び出しの
Bearer:
ヘッダーに Databricks OAuth トークンを含めて、要求を完了します。JWT は有効であり、RS256 または ES256 アルゴリズムを使用して署名されている必要があります。実装の詳細については、「 ID プロバイダートークンを使用して認証する Databricks REST APIsを参照してください。