フェデレーション ポリシーを構成する
Databricks OAuth トークンフェデレーションを使用すると、ID プロバイダー (IdP) からトークンを使用して Databricks API に安全にアクセスできます。 OAuth トークンのフェデレーションを有効にするには、フェデレーションポリシーを Databricks アカウント全体またはワークロード用に構成する必要があります。
このページでは、OAuth トークン フェデレーション ポリシーを作成して構成する方法について説明します。
ワークロード ID フェデレーション
ワークロードアイデンティティフェデレーションにより、Databricksの外部で実行される自動化されたワークロードは、Databricksシークレットを必要とせずにDatabricks APIにアクセスできます。アカウント 管理者は、サービスプリンシパル フェデレーション ポリシーを使用してワークロード ID フェデレーションを構成できます。
サービスプリンシパル フェデレーション ポリシーは、 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を使用してサービスプリンシパルフェデレーションポリシーを構成できます。 Databricksサービスプリンシパルごとに最大 20 個のサービスプリンシパル フェデレーション ポリシーを作成できます。
サービスプリンシパル フェデレーション ポリシーを設定するには、以下を指定する必要があります。
-
発行者URL: ワークロード ID トークンの
iss要求で指定された、ワークロード ID プロバイダーを識別する HTTPS URL。 -
サブジェクト: ワークロード ランタイム環境内のワークロードの一意の識別子。指定しない場合は、デフォルトは
subです。 -
オーディエンス:
aud要求で指定されているトークンの意図された受信者。トークンは、その対象ユーザーがポリシー内の少なくとも 1 つの対象と一致する場合、一致と見なされます。指定しない場合、 デフォルト は あなたの Databricks アカウント IDです。 -
サブジェクト要求: (省略可能) トークンのワークロード ID (サブジェクトとも呼ばれます) を含むトークン要求を指定します。設定しない場合、 Databricks は デフォルトで
subを使用します。 Databricksでは、ワークロード ID フェデレーションの デフォルトsub要求を維持することをお勧めします。 別の主張を選択するのは、subが適切または安定したサブジェクト識別子でない場合のみであり、これはまれです。詳細については、「 サービスプリンシパル フェデレーション ポリシーの例」を参照してください。 -
トークン署名の検証: (オプション) トークン署名の検証に使用されるJSON Web Key Sets (JWKS) 形式の公開キーまたはその URL。 JWKS JSON は最大 5 個のキーをサポートします。アイデンティティプロバイダーがさらに公開する場合は、代わりに JWKS URI を使用します。
指定されていない場合、Databricks は発行者の既知のエンドポイントからキーを取得します。これが推奨される方法です。ID プロバイダーは、トークン署名の検証に使用される公開キーの場所を指定する
jwks_uriを含む OpenID プロバイダー メタデータを<issuer-url>/.well-known/openid-configurationで提供する必要があります。
- Databricks UI
- Databricks CLI
- Databricks Account API
- アカウント管理者として、
https://accounts.gcp.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>"' -
サービスプリンシパル フェデレーション ポリシーを作成します。 次に、 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"
}
}'
-
アカウント コンソールから、またはサービスプリンシパルAPIを使用して、サービスプリンシパルの数値 ID (例:
3659993829438643) を取得します。 -
サービスプリンシパルフェデレーションポリシーを作成します。 認証のために、
ACCOUNT_CONSOLE_URL、DatabricksACCOUNT_ID、SERVICE_PRINCIPAL_NUMERIC_ID、およびベアラーTOKENを指定します。Bashcurl --request POST \
--header "Authorization: Bearer $TOKEN" \
"${ACCOUNT_CONSOLE_URL}/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"
}
}'完全な API リファレンス ドキュメントについては、アカウント フェデレーション ポリシー APIを参照してください。
Databricks サービスプリンシパル フェデレーション ポリシーの例
次の表に、サービスプリンシパル フェデレーション ポリシーと対応する JWT 本文の例を示します。
これらの一般的な ID プロバイダーの一部でワークロード ID フェデレーションを有効にするための完全な構成手順については、「 CI/CD でワークロード ID フェデレーションを有効にする」を参照してください。
ツール | フェデレーション ポリシー | 一致するトークンの例 |
|---|---|---|
GitHub Actions | 発行者: |
|
Kubernetes | 発行者: |
|
Azure DevOps | 発行者: |
|
GitLab | 発行者: |
|
CircleCI | 発行者: |
|
AWS IAMアウトバウンドIDフェデレーション | 発行者: |
|
AWS IAMアウトバウンドIDフェデレーションでは、トークン内のsubクレームは、呼び出し元のワークロード(例:Lambda実行ロール、ECSタスクロール、またはEC2インスタンスロール)のIAMロールARNです。
サービスプリンシパルフェデレーションポリシーのベストプラクティス
各サービスプリンシパルは、最大20個のフェデレーションポリシーをサポートします。その制限に達しないようにするには、以下のガイドラインに従ってください。
サービスプリンシパルごとに外部IDを1つマッピングします。
外部ワークロードのIDごとに、専用のサービスプリンシパルを作成します。単一のサービスプリンシパルに対して複数のフェデレーションポリシーを適用することが適切なのは、同一の論理IDが異なるIDプロバイダーを通じて認証を行う場合に限られます。例えば、GitHub ActionsとAzure DevOpsの両方で実行されるワークロードの場合、同じサービスプリンシパル上に、プロバイダーごとに1つずつ、合計2つのポリシーが必要になります。
複数のポリシーを使用して、異なるワークロード(リージョンごとに個別のKubernetesポッドなど)を単一のサービスプリンシパルにマッピングしないでください。代わりに、ワークロードごとに個別のサービスプリンシパルを作成してください。これにより、監査ログの帰属情報が保持され、他のワークロードに影響を与えることなく、あるワークロードへのアクセス権を取り消すことができます。
グループを使用して権限管理を効率化
複数のサービス プリンシパルに同じアクセス許可が必要な場合は、それらをDatabricksグループのメンバーとして追加し、そのグループにアクセス許可を割り当てます。 ID管理のベストプラクティスを参照してください。
代替クレームにはsubject_claimプロパティを使用してください
デフォルトでは、Databricks は ID トークンのsubクレームを使用してワークロードを識別します。IDプロバイダーがsubクレームを安定したワークロード識別子として使用しない場合は、 subject_claimプロパティをプロバイダーが使用するクレーム名に設定してください。例については、 「サンプルDatabricksプリンシパル フェデレーション ポリシー」の 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 つの対象と一致する場合、一致と見なされます。指定しない場合、 デフォルト は あなたの Databricks アカウント IDです。 -
サブジェクトのクレーム: トークンが発行されたユーザーの Databricks ユーザー名を含むトークン要求。指定しない場合、デフォルトは
subです。 -
トークン署名の検証: (オプション) トークン署名の検証に使用されるJSON Web Key Sets (JWKS) 形式の公開キーまたはその URL。 JWKS JSON は最大 5 個のキーをサポートします。アイデンティティプロバイダーがさらに公開する場合は、代わりに JWKS URI を使用します。
指定されていない場合、Databricks は発行者の既知のエンドポイントからキーを取得します。これが推奨される方法です。ID プロバイダーは、トークン署名の検証に使用される公開キーの場所を指定する
jwks_uriを含む OpenID プロバイダー メタデータを<issuer-url>/.well-known/openid-configurationで提供する必要があります。
アカウント全体のフェデレーションの場合、 登録する フルマネージド 会社独自の IdP など、組織から信頼されています。 顧客やパートナーが管理するIdPなど、制御できない外部IdPとのアカウント全体のフェデレーションは構成しないでください。
- Databricks UI
- Databricks CLI
- Databricks Account API
- アカウント管理者として、
https://accounts.gcp.databricks.comで Databricks アカウント コンソールにサインインします。 - 「セキュリティ」 をクリックし、 「認証」 タブに移動します。
- [フェデレーション ポリシー] で、[ ポリシーの作成 ] をクリックします。
- 発行者の URL、対象ユーザー、サブジェクト要求、およびオプションのトークン署名検証を入力します。
- 「 ポリシーの作成 」をクリックします。
Databricks ワークスペース Web ターミナルのDatabricks CLIを使用してフェデレーション ポリシーを作成することはできません。
-
最新バージョンの Databricks CLI をインストールまたは更新します。
-
アカウント管理者として、CLI を使用して Databricks アカウントに対して認証します。
ACCOUNT_CONSOLE_URLと お使いのDatabricksのACCOUNT_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"
}
}'
次の REST API 呼び出しは、アカウント フェデレーション ポリシーを作成します。認証のために、 ACCOUNT_CONSOLE_URL 、Databricks ACCOUNT_ID 、およびベアラーTOKENを指定します。
curl --request POST \
--header "Authorization: Bearer $TOKEN" \
"${ACCOUNT_CONSOLE_URL}/api/2.0/accounts/${ACCOUNT_ID}/federationPolicies" \
--data '{
"oidc_policy": {
"issuer": "https://idp.mycompany.com/oidc",
"audiences": [
"databricks"
],
"subject_claim": "sub"
}
}'
完全な API リファレンス ドキュメントについては、アカウント フェデレーション ポリシー APIを参照してください。
アカウントフェデレーションポリシーの例
次の表に、アカウント フェデレーション ポリシーの例と、一致する JWT 本文を示します。
フェデレーション ポリシー | 一致するトークンの例 |
|---|---|
発行者: |
|
発行者: |
|
発行者: |
|
発行者: |
|
次のステップ
アカウントのフェデレーションポリシーを設定した後、次の操作を行います。
- ユーザーが Databricks と交換できるトークンを生成するように ID プロバイダー (IdP) を構成します。セットアップの詳細については、IdP のドキュメントを参照してください。一般的な IdP でワークロード ID フェデレーションを有効にする手順については、「 CI/CD でのワークロード ID フェデレーションの有効化」を参照してください。
- IdP の JWT を使用して、最初に Databricks OAuth トークンと交換して Databricks API にアクセスします。API 呼び出しの
Bearer:ヘッダーに Databricks OAuth トークンを含めて、要求を完了します。JWT は有効であり、RS256 または ES256 アルゴリズムを使用して署名されている必要があります。実装の詳細については、「 ID プロバイダートークンを使用した認証」を参照してください。