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

サービスプリンシパルへのアクセスを承認する Databricks with OAuth

この記事では、自動化された CLI コマンドやスクリプトやアプリケーションから行われた REST API 呼び出しなど、無人プロセスから Databricks リソースへのアクセスを承認する方法について説明します。

Databricks は、UI の外部でのサービスプリンシパルの認証と認証の優先プロトコルとして OAuth 2.0 を使用します。統合クライアント認証により、トークンの生成と更新が自動化されます。サービスプリンシパルがサインインして同意を得ると、 OAuth は、 CLI、 SDK、またはその他のツールが代わりに使用するアクセストークンを発行します。 各アクセストークンは1時間有効で、その後、新しいトークンが自動的に要求されます。

この記事では、 認証 とは、 OAuth を使用してサービスプリンシパル Databricks リソースへのアクセス権を付与することを指し、 認証 とは、アクセストークンを通じて資格情報を検証することを指します。

詳細については、「 Databricks リソースへのアクセスの承認」を参照してください。

サービスプリンシパルを承認する方法

Databricks では、サービスプリンシパルを承認する 2 つの方法がサポートされています。

  • 自動 (推奨): Databricks Terraform SDK などのサポートされているツールや SDK で 統合クライアント認証 を使用します。このアプローチは、トークンの生成と更新を自動的に処理し、自動化やその他の無人ワークロードに最適です。

  • 手動: コード検証ツールとチャレンジを生成し、それらを OAuth トークンと交換します。ツールまたは API が統合クライアント認証をサポートしていない場合は、この方法を使用します。アプリケーション用に独自のトークン更新メカニズムを構築する必要がある場合があります。詳細については、「 OAuth M2M アクセストークンを手動で生成する」を参照してください。

前提 条件

OAuth を設定する前に、次の手順を実行します。

  1. Databricksサービスプリンシパルを作成します。Add サービスプリンシパルをアカウントに追加するを参照してください。
  2. サービスプリンシパルの [構成 ] タブに移動し、このワークスペースに必要なエンタイトルメントを選択します。
  3. [ 権限] タブに移動し、このサービスプリンシパルを管理および使用する Databricks ユーザー、サービスプリンシパル、およびグループにアクセス権を付与します。 「 サービスプリンシパルを管理および使用できるユーザー」を参照してください。

ステップ 1: OAuth シークレットを作成する

OAuth を使用して Databricks リソースへのアクセスを承認するには、OAuth シークレットを作成する必要があります。シークレットは、認証用の OAuth アクセストークンを生成するために使用されます。サービスプリンシパルには最大 5 つの OAuth シークレットを含めることができ、各シークレットは最大 2 年間有効です。

アカウント管理者とワークスペース管理者は、サービスプリンシパルのOAuthシークレットを作成できます。

  1. サービスプリンシパルの詳細ページで、[ シークレット] タブを開きます。
  2. [ OAuthシークレット ] で、[ シークレットを生成 ] をクリックします。
  3. シークレットの有効期間を日数 (最大 730 日) で設定します。
  4. 表示されたシークレットとクライアント ID をコピーし、[ 完了] をクリックします。シークレットは一度だけ表示されます。クライアント ID は、サービスプリンシパルのアプリケーション ID と同じです。

アカウント管理者は、アカウントコンソールから OAuth シークレットを作成することもできます。 [ ユーザー管理 ] タブからサービスプリンシパルを選択し、[ 資格情報とシークレット] タブに移動します。

注記

サービスプリンシパルがクラスターまたは SQLウェアハウスを使用できるようにするには、サービスプリンシパルにそれらへのアクセス権を付与する必要があります。 コンピュートの権限またはSQLウェアハウスの管理を参照してください。

ステップ 2: OAuth 認証を使用する

統合クライアント認証ツールで OAuth 認証を使用するには、次の関連する環境変数 ( .databrickscfg フィールド、Terraform フィールド、または Config フィールド) を設定する必要があります。

  • アカウント操作の https://accounts.gcp.databricks.com またはターゲット ワークスペース URL (ワークスペース操作の https://1234567890123456.7.gcp.databricks.com など) として指定される Databricks ホスト。
  • Databricksアカウント操作用のDatabricksアカウントID。
  • サービスプリンシパルのクライアントID。
  • サービスプリンシパルのシークレット。

OAuth サービスプリンシパル認証を実行するには、参加するツールまたはSDKに基づいて、コード内に以下を統合します。

ツールまたは SDK で特定の Databricks 認証の種類の環境変数を使用するには、「 Databricks リソースへのアクセスの承認 」またはツールまたは SDK のドキュメントを参照してください。統合クライアント認証の環境変数とフィールドおよびクライアント統合認証のデフォルト方式も参照してください。

アカウントレベルの操作では、以下の環境変数を設定します。

  • DATABRICKS_HOST:DatabricksアカウントのコンソールURL https://accounts.gcp.databricks.com の値に設定します。
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

ワークスペースレベルの操作では、以下の環境変数を設定します。

  • DATABRICKS_HOSTを Databricks ワークスペース URL の値 (例: https://1234567890123456.7.gcp.databricks.com) に設定します。
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

OAuth M2M アクセストークンを手動で生成する

このセクションは、 Databricks 統合クライアント認証をサポートしていないツールまたはサービスを対象としています。M2M 認証に Databricks OAuth トークンを手動で生成、更新、または使用する必要がある場合は、次の手順に従います。

OAuth M2M アクセストークンを生成するには、サービスプリンシパルのクライアント ID とシークレットOAuth使用します。各アクセストークンは 1 時間有効です。有効期限が切れたら、新しいトークンを要求します。トークンは、アカウントレベルまたはワークスペースレベルのいずれかで生成できます。

アカウントレベルのアクセストークンを生成する

アカウントレベルのトークンを使用して、アカウントとサービスプリンシパルがアクセスできる任意のワークスペースの REST APIs を呼び出します。

  1. アカウントIDを見つけます

  2. 次の URL の <account-id> をアカウント ID に置き換えて、トークンエンドポイント URL を構築します。

    https://accounts.gcp.databricks.com/oidc/accounts/<my-account-id>/v1/token
  3. curl を使用して OAuth アクセストークンをリクエストします。取り替える:

    • <token-endpoint-URL> 上記のURLに置き換えます。
    • <client-id> をサービスプリンシパルのクライアント ID (アプリケーション ID) に置き換えます。
    • <client-secret> サービスプリンシパルの OAuth の秘密で。
    Bash
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>

    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'

    これにより、次のようなレスポンスが生成されます。

    JSON
    {
    "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
    "token_type": "Bearer",
    "expires_in": 3600
    }

    all-apis スコープは、サービスプリンシパルがアクセス許可を持つ任意のDatabricks REST APIを呼び出すことを許可するOAuthアクセストークンを要求します。

  4. 応答から access_token 値をコピーします。

ワークスペース レベルのアクセス トークンを生成する

ワークスペースレベルのトークンは、そのワークスペースの REST APIs でのみ使用します。

  1. トークン エンドポイント URL を構築するには、<databricks-instance>を Databricks ワークスペース インスタンス名<databricks-instance> に置き換えます (例: 1234567890123456.7.gcp.databricks.com:

    https://<databricks-instance>/oidc/v1/token
  2. curl を使用して OAuth アクセストークンをリクエストします。取り替える:

    • <token-endpoint-URL> 上記のURLに置き換えます。
    • <client-id> をサービスプリンシパルのクライアント ID (アプリケーション ID) に置き換えます。
    • <client-secret> サービスプリンシパルの OAuth の秘密で。
    Bash
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>

    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'

    これにより、次のようなレスポンスが生成されます。

    JSON
    {
    "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
    "token_type": "Bearer",
    "expires_in": 3600
    }
  3. 応答から access_token 値をコピーします。

注記

配信エンドポイントのトークンを生成するには、リクエストにエンドポイント ID とアクションを含めます。「OAuthトークンを手動で取得する」を参照してください。

Databricks REST API を呼び出す

OAuth アクセス トークンを使用して、アカウント レベルまたはワークスペース レベルの REST APIsを呼び出します。アカウントレベルの APIsを呼び出すには、サービスプリンシパルはアカウント管理者である必要があります。

認証 Bearer 認証で認証ヘッダーにトークンを含めます。

アカウントレベルの REST API リクエストの例

この例では、アカウントのすべてのワークスペースを一覧表示します。取り替える:

  • <oauth-access-token> サービスプリンシパルの OAuth アクセストークン。
  • <account-id> をアカウント ID に置き換えます。
Bash
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/workspaces'

ワークスペース レベルの REST API 要求の例

この例では、ワークスペースで使用可能なすべてのクラスタリングを一覧表示します。 取り替える:

  • <oauth-access-token> サービスプリンシパルの OAuth アクセストークン。
  • <databricks-instance> を Databricks ワークスペース インスタンス名 (例: 1234567890123456.7.gcp.databricks.com) に置き換えます。
Bash
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'

追加のリソース