メインコンテンツまでスキップ

フェデレーション ポリシーを構成する

備考

プレビュー

Databricks OAuth トークン フェデレーションは パブリック プレビュー段階です。

Databricks OAuth トークンフェデレーションを使用すると、ID プロバイダー (IdP) からトークンを使用して Databricks APIs に安全にアクセスできます。 OAuth トークンのフェデレーションを有効にするには、フェデレーションポリシーを Databricks アカウント全体またはワークロード用に構成する必要があります。

この記事では、OAuth トークン フェデレーション ポリシーを作成および構成する方法について説明します。

注記

DatabricksCLIDatabricksワークスペースWebターミナル の を使用してフェデレーションポリシーを作成することはできません。

アカウント全体のトークンフェデレーション

アカウント 管理者は OAuth アカウント フェデレーション ポリシーを使用して、 Databricks アカウントでトークン フェデレーションを構成できます。 アカウント federation ポリシー を使用すると、 Databricks アカウント内のすべてのユーザーとサービスプリンシパルが、ID プロバイダーからのトークンを使用して Databricks API にアクセスできます。 アカウント フェデレーション ポリシーでは、次のものを指定します。

  • Databricks がトークンを受け入れる ID プロバイダーまたは発行者。
  • トークンを対応する Databricks ユーザーまたはサービスプリンシパルにマッピングするための基準。

たとえば、次のアカウントフェデレーションポリシーがあるとします。

issuer: "https://idp.mycompany.com/oidc"
audiences: ["databricks"]
subject_claim: "sub"

この JWT 本体は、次のように Databricks への認証に使用できますusername@mycompany.com

JSON
{
"iss": "https://idp.mycompany.com/oidc",
"aud": "databricks",
"sub": "username@mycompany.com"
}

アカウントフェデレーションポリシーを構成する

アカウント フェデレーション ポリシーを構成するには、次のものを指定する必要があります。

  • トークンの iss 要求で指定されている必要なトークン 発行者 。発行者は、ID プロバイダーを識別する HTTPS URL です。

  • トークンの aud 要求で指定されている、許可されたトークン 対象ユーザー 。この識別子は、トークンの受信者を表します。トークン内のオーディエンスがポリシー内の少なくとも 1 つのオーディエンスと一致する限り、トークンは一致と見なされます。指定しない場合、デフォルト値は Databricks アカウント ID です。

  • 件名の主張 。これは、トークンが発行されたユーザーの Databricks ユーザー名がどのトークン要求に含まれているかを示します。指定しない場合、デフォルト値は subです。

  • 必要に応じて、トークンの署名の検証に使用される公開鍵 (または公開鍵の URL) を JSON Web Key Sets (JWKS) 形式で入力します。指定しない場合 (推奨)、Databricks は発行者の既知のエンドポイントから公開キーを自動的にフェッチします。Databricks では、公開キーの検出について、発行者の既知のエンドポイントに依存することを強くお勧めします。

注記

フェデレーションポリシーで JWKS または jwks_uri を指定しない場合、ID プロバイダーは OpenID プロバイダーメタデータを {issuer-url}/.well-known/openid-configurationで提供する必要があります。OpenID プロバイダー メタデータには、トークンの署名の検証に使用される公開キーの場所を指定する jwks_uri が含まれている必要があります。

アカウント 管理者は、Databricks CLI (バージョン 0.239.0 以降) または Databricks APIを使用してアカウント フェデレーション ポリシーを構成できます。Databricks アカウントでは、最大 5 つのアカウント フェデレーション ポリシーを指定できます。

  1. 最新バージョンの Databricks CLI をインストールまたは更新します。

  2. アカウント管理者として、CLI を使用して Databricks アカウントに認証します。ACCOUNT_CONSOLE_URLの指定(例:https://accounts.cloud.databricks.com)と Databricks ACCOUNT_ID:

    Bash
    databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
  3. アカウント フェデレーション ポリシーを作成します。例えば:

    Bash
    databricks account federation-policy create --json \
    '{
    "oidc_policy": {
    "issuer": "https://idp.mycompany.com/oidc",
    "audiences": [
    "databricks"
    ],
    "subject_claim": "sub"
    }
    }'

アカウントフェデレーションポリシーの例

次の表に、アカウント フェデレーション ポリシーの例と、一致する JWT 本文を示します。

フェデレーション ポリシー

一致するトークンの例

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"]

{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" }

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] subject_claim: "preferred_username"

{ "iss": "https://idp.mycompany.com/oidc", "aud": ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "other-audience"], "preferred_username": "username@mycompany.com", "sub": "some-other-ignored-value" }

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] jwks_json: {"keys":[{"kty":"RSA","e":"AQAB","use":"sig", "kid":"<key-id>","alg":"RS256", "n":"uPUViFv..."}]}

{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" } (signature verified using public key in policy)

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] jwks_uri: "https://idp.mycompany.com/jwks.json"

{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" } (signature verified using public key fetched from jwks_uri)

ワークロード ID フェデレーション

ワークロード ID フェデレーションを使用すると、 の外部で実行されている自動化されたワークロードは、Databricks DatabricksAPIシークレットを必要とせずにDatabricks にアクセスできます。アカウント 管理者は、サービスプリンシパル フェデレーション ポリシーを使用してワークロード ID フェデレーションを構成できます。

サービスプリンシパル federation ポリシーは、 Databricks アカウントのサービスプリンシパルに関連付けられ、次の項目を指定します。

  • サービスプリンシパルが認証できる ID プロバイダー (または発行者)。
  • Databricks サービスプリンシパルとしての認証が許可されているワークロード ID (またはサブジェクト)。

たとえば、 GitHub Actions ワークロードに対して次のサービスプリンシパル フェデレーション ポリシーがあるとします。

issuer: "https://token.actions.githubusercontent.com"
audiences: ["https://github.com/my-github-org"]
subject: "repo:my-github-org/my-repo:environment:prod"

この JWT 本体は、Databricks への認証に使用できます。

JSON
{
"iss": "https://token.actions.githubusercontent.com",
"aud": "https://github.com/my-github-org",
"sub": "repo:my-github-org/my-repo:environment:prod"
}

サービスプリンシパル フェデレーション ポリシーを構成する

サービスプリンシパル フェデレーション ポリシーを構成するには、以下を指定する必要があります。

  • ワークロード ID トークンの iss 要求で指定される、必要なトークン 発行者 。発行者は、ワークロード ID プロバイダーを識別する HTTPS URL です。

  • ワークロード ID トークンの sub 要求で指定される、必要なトークンの サブジェクト 。このサブジェクトは、ワークロード・ランタイム環境内のワークロードを一意的に識別します。

  • ワークロード ID トークンの aud 要求で指定される、許可されたトークン 対象ユーザー 。オーディエンスは、トークンの受信者を表します。トークン内のオーディエンスがポリシー内の少なくとも 1 つのオーディエンスと一致する限り、トークンは一致と見なされます。指定しない場合、デフォルト値は Databricks アカウント ID です。

  • 必要に応じて、ワークロード ID トークンの署名の検証に使用される公開鍵 (または公開鍵の URL) を JSON Web Key Sets (JWKS) 形式で入力します。指定しない場合 (推奨)、Databricks は発行者の既知のエンドポイントから公開キーを自動的にフェッチします。Databricks では、公開キーの検出に発行者の既知のエンドポイントに依存することを強くお勧めします。

注記

フェデレーションポリシーで JWKS または jwks_uri を指定しない場合、ID プロバイダーは OpenID プロバイダーメタデータを {issuer-url}/.well-known/openid-configurationで提供する必要があります。OpenID プロバイダー メタデータには、トークンの署名の検証に使用される公開キーの場所を指定する jwks_uri が含まれている必要があります。

  • 必要に応じて、サブジェクトの主張。これは、トークンのワークロード ID (またはサブジェクト) を含むトークン要求を示します。指定しない場合、デフォルト値は subです。Databricks ワークロード ID フェデレーションに デフォルト sub 要求を使用することを強くお勧めします。 sub 以外のクレームは、sub クレームが適切または安定したサブジェクト識別子ではない場合にのみ使用する必要があります。これはまれです。詳細については、以下の 「サービスプリンシパル federation ポリシーの例 」を参照してください。

アカウント 管理者は、Databricks CLI (バージョン 0.239.0 以降) または Databricks APIを使用して、サービスプリンシパル フェデレーション ポリシーを構成できます。サービスプリンシパルごとに最大 5 つのサービスプリンシパル フェデレーション ポリシー Databricks 作成できます。

  1. 最新バージョンの Databricks CLI をインストールまたは更新します。

  2. アカウント管理者として、CLI を使用して Databricks アカウントに認証します。ACCOUNT_CONSOLE_URLの指定 ( https://accounts.cloud.databricks.com など)と Databricks ACCOUNT_ID:

    Bash
    databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
  3. フェデレーション ポリシーが適用されるサービスプリンシパルの数値 ID を取得します。 (たとえば、 3659993829438643などです。

    サービスプリンシパル アプリケーション ID (通常は bc3cfe6c-469e-4130-b425-5384c4aa30bbなどの GUID 値) が事前にわかっている場合は、次の Databricks CLIを使用してサービスプリンシパルの数値 ID を特定できます。

    Bash
    databricks account service-principals list --filter 'applicationId eq "<service-principal-application-id>"'
  4. サービスプリンシパル federation ポリシーを作成します。 次に、 GitHub Actionsのフェデレーション ポリシーを作成する例を示します。

    Bash
    databricks 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"
    }
    }'

Example Databricks サービスプリンシパル federation ポリシー

次の表に、サービスプリンシパル federation ポリシーと対応する JWT 本文の例を示します。

これらの一般的な ID プロバイダーの一部でワークロード ID フェデレーションを有効にするための完全な構成手順については、「 CI/CD でワークロード ID フェデレーションを有効にする」を参照してください。

ツール

フェデレーション ポリシー

一致するトークンの例

GitHub Actions

issuer: "https://token.actions.githubusercontent.com" audiences: ["https://github.com/<github-org>"] subject: "repo:<github-org>/<repo>:environment:prod"

{ "iss": "https://token.actions.githubusercontent.com", "aud": "https://github.com/<github-org>", "sub": "repo:<github-org>/<repo>:environment:prod" }

Kubernetes の

issuer: "https://kubernetes.default.svc" audiences: ["https://kubernetes.default.svc"] subject: "system:serviceaccount:namespace:podname" jwks json: {"keys":[{"kty":"rsa","e":"AQAB","use":"sig", "kid":"<key-id>","alg":"RS256","n":"uPUViFv..."}]}

{ "iss": "https://kubernetes.default.svc", "aud": ["https://kubernetes.default.svc"], "sub": "system:serviceaccount:namespace:podname" }

Azure DevOps

issuer: "https://vstoken.dev.azure.com/<org_id>" audiences: ["api://AzureADTokenExchange"] subject: "sc://my-org/my-project/my-connection"

{ "iss": "https://vstoken.dev.azure.com/<org_id>", "aud": "api://AzureADTokenExchange", "sub": "sc://my-org/my-project/my-connection" }

GitLab

issuer: "https://gitlab.example.com" audiences: ["https://gitlab.example.com"] subject: "project_path:my-group/my-project:..."

{ "iss": "https://gitlab.example.com", "aud": "https://gitlab.example.com", "sub": "project_path:my-group/my-project:..." }

CircleCIの

issuer: "https://oidc.circleci.com/org/<org_id>" audiences: ["<org_id>"] subject: "7cc1d11b-46c8-4eb2-9482-4c56a910c7ce" subject_claim: "oidc.circleci.com/project-id"

{ "iss": "https://oidc.circleci.com/org/<org_id>", "aud": "<org_id>", "oidc.circleci.com/project-id": "7cc1d11b-46c8-4eb2-9482-4c56a910c7ce" }

次のステップ

アカウントのフェデレーションポリシーを設定したら、次の操作を行います。

  • ユーザーが Databricks と交換するためのトークンを生成するように ID プロバイダーを構成する必要がある場合があります。手順については、ID プロバイダーのドキュメントを参照してください。一部の一般的な ID プロバイダーでワークロード ID フェデレーションを有効にするための完全な構成手順については、「 CI/CD でワークロード ID フェデレーションを有効にする」を参照してください。
  • ID プロバイダーの JWT を使用して、Databricks API にアクセスできます。まず、ID プロバイダーからの JWT トークンを Databricks OAuth トークンと交換し、次に API 呼び出しの Bearer: フィールドで Databricks OAuth トークンを使用してアクセスを取得し、呼び出しを完了します。トークンは、RS256 または ES256 アルゴリズムを使用して署名された有効な JWT である必要があります。トークン交換の実装の詳細については、「ID プロバイダー トークンを使用したDatabricks REST APIsの認証」を参照してください。