Google ID トークンによる認証
Databricks REST APIsに対して認証するには、次の 2 つのオプションがあります。
Databricks個人用アクセストークン。 これらはワークスペース レベルのREST APIsにのみ使用できます。
OpenID Connect (OIDC) トークン。 これらはすべての Databricks REST APIsに使用できます。
OpenID Connect (OIDC) トークンは 、認証をサポートするオープン標準です。 OIDC 1.0 は、OAuth 2.0 プロトコル上の単純な ID レイヤーです。 これにより、アプリケーションは、OAuth 承認サーバーによって実行される認証に基づいてユーザーの ID を検証できます。 アプリケーションは、OIDC トークンからユーザーの基本的なプロファイル情報を取得することもできます。 デフォルトの OIDC トークンは 1 時間後に期限切れになります。
重要
Databricks REST APIs では、一般に Google ID トークンと呼ばれる Google 発行の OIDC トークンのみがサポートされています。 混乱を減らすために、この記事の残りの部分では、OIDCトークンではなくGoogleIDトークンという用語を使用します。
この記事では、Databricks REST APIs を使用するための認証手順と、必要な Google クラウド サービス アカウントを作成し、これらのアカウントのトークンを生成する方法について説明します。
1 つの Google ID トークンは、アカウント レベルのAPIsまたはワークスペース レベルのAPIsに使用できますが、両方の目的に使用することはできません。 ワークスペースレベルとアカウントレベルのAPIsのトークンを設定する手順はほぼ同じです。 重要な違いは、説明書に記載されています。
本番運用環境では、Databricks REST APIsを操作するために 2 つのサービス アカウントを使用することをお勧めします。
ワークロードを実行するためのサービス アカウント (SA-1) を 1 つ作成します。
別のサービス アカウント (SA-2) を作成して、Databricks と Google クラウド リソースへのアクセス許可を保持します。
SA-1 に SA-2 を 偽装 して Databricks REST APIsを呼び出すアクセス許可を付与します。
この偽装モデルでは、1 つのチームがワークロードのセキュリティを管理し、別のチームがリソースのセキュリティを管理できます。 偽装のアクセス許可は必要な場合にのみ付与されるため、このアプローチは組織にセキュリティと柔軟性を提供します。
本番運用で使用するために、これらのステップを実行する方法について詳しく説明します。 これらの手順は、次のいずれかの方法を使用して、本番以外の運用およびテストに適合させることができます。
Google ユーザー アカウントを使用して SA-2 になりすます。ユーザ アカウントには、ロール
roles/iam.serviceAccountTokenCreator
が必要です。SA-1 と SA-2 の両方に 1 つの Google クラウド サービス アカウント を使用します。
アカウントレベルのAPIsとワークスペースレベルのAPIs
Databricks REST APIsを使用するための認証を理解するには、REST APIs の種類と、Databricks リソース階層との関係を理解する必要があります。
1 つ以上の Databricks アカウントを持っている場合があります。 Databricks アカウントには、0 個、1 個、または複数の Databricks ワークスペースが含まれています。 アカウントコンソールを使用して、ワークスペースを作成し、ワークスペースの設定に必要なクラウドリソース(認証情報、ストレージ、ネットワークなど)を管理できます。
Databricksワークスペースには、ジョブやノートブックなどのさまざまなリソースがあります。 ワークスペース管理者 (単に管理者と呼ばれることもあります) は、 管理者設定ページの設定を含む、ワークスペース レベルで定義された設定を変更できます。
この違いにより、 APIsには 2 つのタイプがあります。
Databricksアカウント レベルのAPIs 、アカウント所有者とアカウント管理者のみが呼び出すことができます。 これらのAPIs 、アカウント コンソール URL https://accounts.gcp.databricks.comでホストされています。
Databricksワークスペース レベルのAPIs 、ワークスペース管理者とワークスペース ユーザーのみが呼び出すことができます。 これらのAPIs 、ワークスペース URL ( https://1234567890123456.7.gcp.databricks.comなど) でホストされています。
Databricks REST API に対して認証するには、API のベース URL と一致するオーディエンス (aud
) を持つ Google ID トークンを渡す必要がありますが、これはこれら 2 種類の APIsで異なります。 異なるベース URL で Databricks REST APIs を呼び出すには、異なる Google ID トークンを使用する必要があります。
資格情報のパススルー
いくつかの Databricks REST API メソッドでは 、資格情報のパススルーが必要です。 これらのメソッドを呼び出すには、Google ID に加えて、HTTP ヘッダーで cloud-platform
スコープの Google OAuth アクセストークンも渡す必要があります。Databricks サーバーは、Google OAuth アクセストークンを使用して、呼び出し元に代わって Google クラウド APIs を呼び出します。
Databricks では、アクセストークンの検証や保持は行われません。
重要
操作に資格情報のパススルーが必要かどうかを判断するには、各 API 操作の API ドキュメントを参照してください。 これらの APIs には、要求に X-Databricks-GCP-SA-Access-Token
HTTP ヘッダーが必要です。
ステップ 1: 2 つのサービス アカウントを作成する
新しい Google クラウド サービス アカウントを 2 つ作成します。 Google の記事「 サービス アカウントの作成」の手順に従います。 Google クラウド コンソールを使用するには、[ サービス アカウント ] ページに移動し、作成する Google クラウド プロジェクトを選択します。 これらのサービス アカウントを作成する Google クラウド プロジェクトは、Databricks ワークスペースに使用するプロジェクトと一致する必要はなく、新しいサービス アカウントが互いに同じ Google クラウド プロジェクトを使用する必要もありません。
トークン作成サービス アカウント (SA-1): このサービス アカウントは、メイン サービス アカウントのトークンの作成を自動化します。 これらのトークンは、Databricks REST APIsを呼び出すために使用されます。 Google のドキュメントでは、これを SA-1 と呼んでいます。
Databricks REST APIs (SA-2) のメイン サービス アカウント: このサービス アカウントは、Databricks REST APIs および自動化されたワークフローのプリンシパル (自動化ユーザー) として機能します。 Google のドキュメントでは、これを SA-2 と呼んでいます。
後の手順で使用するために、両方のサービスアカウントの電子メールアドレスを保存します。
トークン作成サービス アカウント (SA-1) の サービス アカウント キー を作成し、
SA-1-key.json
というローカル ファイルに保存します。Google クラウドコンソールの [Service Accounts ] ページで、SA-1 のメールアドレスをクリックします。
「キー」タブをクリックします。
[ADD KEY] をクリックします。
[JSON] (デフォルト) が選択されていることを確認します。
[作成]をクリックします。
Web ページがキー ファイルをブラウザにダウンロードします。 そのファイルをローカルの作業ディレクトリに移動し、名前を
SA-1-key.json
に変更します。
詳しい手順については、Googleの記事「 サービスアカウントキーの作成」を参照してください。
トークン作成サービス アカウント (SA-1) に、メイン サービス アカウント (SA-2) のサービス アカウント トークン作成者ロールを付与します。 Google の記事「 アクセス許可を直接リクエストする」の手順に従います。
Google クラウド コンソールの [サービス アカウント ] ページで、SA-2 の Eメール アドレスをクリックします。
重要
Google クラウドコンソールで、トークン作成 SA(SA-1)ではなく、メイン SA(SA-2)を編集してください。
[権限] をクリックします。
[アクセス権を付与] をクリックします。
[ New Principals ] フィールドに、トークン作成 SA (SA-1) の E メール アドレスを貼り付けます。
[Role] フィールドで、[サービス アカウント トークン Creator Role] を選択します。
[保存]をクリックします。
ステップ 2: Google ID トークンを作成する
Databricks では、Google クラウド CLI (gcloud
) を使用して ID トークンを生成し、Databricks REST APIsを呼び出すことをお勧めします。
重要
生成された ID トークンの有効期限は 1 時間です。 残りのすべてのステップをその時間内に完了する必要があります。 Databricks APIsの呼び出しなど、後の手順を完了する前にトークンの有効期限が切れた場合は、この手順を繰り返して新しい Google ID トークンを生成する必要があります。
マシンに Google クラウド CLI をインストールします。 gcloud ツールのインストールに関する Google の記事をご覧ください。
次のコマンドを実行して、メインサービスアカウントのIDトークンを生成します。
<SA-1-key-json>
を JSON 形式の SA-1 キー ファイルへのパスに置き換えます。<SA-2-email>
を SA-2 の Eメールアドレスに置き換えてください。ユースケースに基づいて、
<audience>
次のように置き換えます。ワークスペース レベルの APIsの場合は、
https://999999999992360.0.gcp.databricks.com
などの形式https://<numbers>.<digit>.gcp.databricks.com
ワークスペース URL に置き換えます。 すべてのワークスペースには、異なる一意のワークスペース URL があります。 複数のワークスペースで APIs を呼び出すには、それぞれ異なるaudience
値を持つ複数の Google ID トークンを作成する必要があります。アカウントレベルの API の場合は、
https://accounts.gcp.databricks.com
に置き換えます。 異なるアカウントはすべて同じaudience
値を共有します。
本番運用システムで使用するには、次のコマンドを実行します。
gcloud auth login --cred-file=<SA-1-key-json> gcloud auth print-identity-token --impersonate-service-account="<SA-2-email-address>" --include-email --audiences="<audience>"
本番運用以外で使用する場合、ユーザー アカウントを使用して SA-2 を偽装する場合は、次のコマンドを使用します。
gcloud auth login gcloud auth print-identity-token --impersonate-service-account=<SA-2-email-address> --audiences="<audience>" --include-email
SA-1 と SA-2 の両方に 1 つのサービス アカウントを使用する場合は、サービス アカウントのキー JSON ファイルで次のコマンドを使用します。
gcloud auth login --cred-file=<SA-key-json> gcloud auth print-identity-token --audiences="<audience>"
出力の最後にある長い行を
google-id-token-sa-2.txt
というファイルに保存します。次のようなテキストが出力されます。
WARNING: This command is using service account impersonation. All API calls will be executed as [<SA-2-email-address>]. eyJhba7s86dfa9s8f6a99das7fa68s7d6...N8s67f6saa78sa8s7dfiLlA
ステップ 3: Google OAuth アクセストークンを作成する (資格情報のパススルーを必要とする APIs のみ)
..note:: このステップは、クレデンシャルパススルーを必要とする APIs を呼び出す場合にのみ必要です。 操作に資格情報のパススルーが必要かどうかを判断するには、各 API 操作の API ドキュメントを参照してください。
アクセストークンを生成するリクエストには、アクセストークンの有効期間を定義する lifetime
フィールドが含まれます。 トークンを 5 分間だけアクティブにする必要がある場合は、 300s
(300 秒) に設定します。 次の例では、1 時間を表す 3600s
を使用します。
重要
残りのすべてのステップを制限時間内に完了する必要があります。 Databricks APIsの呼び出しなど、後の手順を完了する前に時間が経過した場合は、この手順を繰り返して新しい Google OAuth アクセス トークンを生成する必要があります。
デフォルトでは、時間(
3600s
)がlifetime
フィールドに設定できる最大期間です。 この制限を延長するには、Google カスタマー サポートに連絡して例外をリクエストしてください。
次のコマンドを実行します。
<SA-2-email-address>
を SA-2 のサービス アカウント Eメール アドレスに置き換えます。本番以外の運用やテストで、1 つのサービス アカウントを使用している場合や、ユーザー アカウントを使用してサービス アカウントを偽装している場合は、<SA-2-email-address>
をサービス アカウントの電子メール アドレスに置き換えてください。gcloud auth print-access-token --impersonate-service-account=<SA-2-email-address>
出力の最後にある長い行を
access-token-sa-2.txt
というファイルに保存します。次のようなテキストが出力されます。
WARNING: This command is using service account impersonation. All API calls will be executed as [<SA-2-email-address>]. eyJhba7s86dfa9s8f6a99das7fa68s7d6...N8s67f6saa78sa8s7dfiLlA
ステップ 4: サービス アカウントをワークスペースまたはアカウント ユーザーとして追加する
Google ID トークンを使用して、Databricks アカウント レベルの APIs または ワークスペース レベルの APIsを呼び出すことができます。 手順はユースケースによって異なります。 Google ID トークンの作成APIs audience
時に [ ] 欄が異なるため、1 つの Google ID トークンを使用して両方のタイプの にアクセスすることはできません。
ワークスペースAPIs
Google IDトークンでワークスペース APIs 認証するには、ワークスペース管理者設定ページを使用して、メインサービスアカウント(SA-2)をユーザーのEメールアドレスのように追加します。
ワークスペース管理者として、 管理者設定ページに移動します。
ワークスペースのユーザー管理の手順に従い、管理設定ページで入力を求められた場合は、メインのサービス アカウントの電子メール アドレスを使用します。
必要に応じて、呼び出す予定のDatabricks REST APIsと使用するデータ オブジェクトに基づいて、新しい サービス アカウント に必要な可能性があるグループ メンバーシップを追加します。 「グループの管理」を参照してください。
必要に応じて、そのユーザーの Databricks アクセス制御設定を追加します。 アクセス制御リストを参照してください。
アカウントレベルのAPIs
アカウント単位の APIs (Account API など)を Google ID トークンで認証するには、アカウント コンソールを使用して、メインのサービス アカウント(SA-2)をアカウント管理者として追加します。 ユーザーを追加する場合と同様に、Eメールアドレスを使用してサービスアカウントを追加します。
アカウント オーナーまたはアカウント管理者は、 アカウント コンソールの [ユーザー] タブに移動します。
[ユーザーを追加]をクリックします。
注:
「サービスプリンシパルの追加」をクリックしないでください。 サービス アカウントを使用してDatabricksプリンシパルを作成することはできません。
[Eメールアドレス]フィールドに、メインサービスアカウント(SA-2)の Eメールアドレス を入力します。
姓と名の必須フィールドは、サービスアカウントの目的を反映した方法で設定します。
[ユーザーを追加]をクリックします。
ステップ 5: Databricks API を呼び出す
REST API 認証時に指定する必要があるトークンは、予定されている使用方法 ( アカウント API または ワークスペース レベルの APIs) によって異なります。 Google ID トークンの作成APIs audiences
時に [ ] 欄が異なるため、1 つの Google ID トークンを使用して両方のタイプの にアクセスすることはできません。
次の HTTP ヘッダーは、Google ID を使用した Databricks 認証に使用されます。
HTTP ヘッダー名 |
説明 |
どのようなタイプの APIs が必要ですか? |
---|---|---|
|
ベアラー トークンとしての SA-2 の Google ID トークン。 構文は |
すべての APIs |
|
SA-2 の Google OAuth アクセストークン。 |
アカウントレベルの APIs のみ |
ワークスペース レベルの API 要求の例
ワークスペースの Databricks REST API を呼び出すには、次の構文を使用して、 Authorization
HTTP ヘッダーで Google ID トークンを渡します。
Authorization: Bearer <google-id-token>
指定するトークンには、次の属性が必要です。
アクセスするワークスペースは、トークンの作成時に指定したワークスペース URL と一致する必要があります。 ステップ 2: Google ID トークンを作成するをご覧ください。
偽装されるサービス アカウント (SA-2) は、ワークスペースのユーザーである必要があります。 Workspace APIsを参照してください。
次の例では、ワークスペース レベルのAPI を呼び出してクラスターを一覧表示します。
<google-id-token>
ファイルをファイルに保存した Google ID トークンgoogle-id-token-sa-2.txt
置き換えます。<workspace-URL>
を、https://1234567890123456.7.gcp.databricks.com
のような形式のベース ワークスペース URL に置き換えます。
curl \
-X GET \
--header 'Authorization: Bearer <google-id-token>' \
<workspace-URL>/api/2.0/clusters/list
認証情報パススルーを使用しない API のアカウントレベルの API リクエストの例
次の例では、アカウント API を呼び出して、ワークスペースの一覧を取得します。
<google-id-token>
ファイルをファイルに保存した Google ID トークンgoogle-id-token-sa-2.txt
置き換えます。<account-id>
をアカウント ID に置き換えます。アカウント ID を確認するには:アカウント管理者として、 Databricks アカウント コンソールに移動します。
右上隅にあるユーザー名の横にある下矢印をクリックします。
ドロップダウンメニューで、 アカウントIDをコピーできます。
curl \
-X GET \
--header 'Authorization: Bearer <google-id-token>' \
https://accounts.gcp.databricks.com/api/2.0/example/<account-id>/operation-name
認証情報のパススルーを使用したアカウントレベルの API リクエストの例
次の例では、アカウント API を呼び出して、ワークスペースの一覧を取得します。
<google-id-token>
ファイルをファイルに保存した Google ID トークンgoogle-id-token-sa-2.txt
置き換えます。<access-token-sa-2>
を、ファイルaccess-token-sa-2.txt
に保存した SA-2 アクセストークンに置き換えます。<account-id>
をアカウント ID に置き換えます。アカウント ID を確認するには:アカウント管理者として、 Databricks アカウント コンソールに移動します。
左側のメニューの下部(スクロールが必要な場合があります)で、[ユーザー]ボタン(人物アイコン)をクリックします。
表示されるポップアップで、ID の右側にあるアイコンをクリックして、アカウント ID をコピーします。
curl \
-X DELETE \
--header 'Authorization: Bearer <google-id-token>' \
--header 'X-Databricks-GCP-SA-Access-Token: <access-token-sa-2>' \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/workspaces/<workspace-id>