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

OAuth トークン フェデレーションを使用して Databricks へのアクセスを認証する

この記事では、ID プロバイダーからのトークンを使用して Databricks アカウントとワークスペースのリソースにアクセスするための OAuth フェデレーションの構成について説明します。

備考

プレビュー

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 に対して認証されます。
注記

Google Cloudユーザーは、Googleトークンを使用して、 Databricks CLI と APIsを安全に使用することもできます。

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

アカウント 管理者は 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 への認証に使用できます。

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

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

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

  1. Install or update to the newest version of the Databricks CLI.

  2. As an account admin, authenticate to your Databricks account using the CLI. Specifying the ACCOUNT_CONSOLE_URL (e.g.https://accounts.cloud.databricks.com) and your Databricks ACCOUNT_ID:

    Bash
    databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
  3. Create the account federation policy. For example:

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

ユーザーが Databricks と交換するためのトークンを生成するように ID プロバイダーを構成する必要がある場合があります。 手順については、ID プロバイダーのドキュメントを参照してください。

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

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

一致するトークンの例

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_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)

ワークロード 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 への認証に使用できます。

JSON
{
"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 作成できます。

  1. Install or update to the newest version of the Databricks CLI.

  2. As an account admin, authenticate to your Databricks account using the CLI. Specifying the ACCOUNT_CONSOLE_URL (e.g.https://accounts.cloud.databricks.com) and your Databricks ACCOUNT_ID:

    Bash
    databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
  3. Get the numeric ID of the service principal that will have the federation policy applied to it. (For example, 3659993829438643.)

    If you know the service principal application ID (typically a GUID value, such as bc3cfe6c-469e-4130-b425-5384c4aa30bb) in advance, you can then determine the service principal numeric ID using the Databricks CLI:

    Bash
    databricks account service-principals list --filter 'applicationId eq "<service-principal-application-id>"'
  4. Create the service principal federation policy. Here is an example of creating a federation policy for a GitHub Action:

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

例 Databricks アカウント and サービスプリンシパル federation ポリシー

ツール

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

一致するトークンの例

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" }

アカウントのフェデレーションポリシーを設定したら、ID プロバイダーの JWT を使用して Databricks API にアクセスできます。 これを行うには、まず ID プロバイダーからの JWT トークンを Databricks OAuth トークンと交換し、次に API 呼び出しの Bearer: フィールドで Databricks OAuth トークンを使用してアクセスを取得し、呼び出しを完了します。 トークンは、RS256 または ES256 アルゴリズムを使用して署名された有効な JWT である必要があります。

このプロセスのガイダンスについては、「 ID プロバイダー トークンを使用して Databricks に対して認証する」を参照してください。

リソース