Google IDトークンによる認証
認証するには Databricks REST APIs、 Databricks OAuth、すべてのクラウド プラットフォームで推奨されるソリューション。OAuth 2.0 は、Databricks が委任された承認に使用する標準プロトコルです。REST APIsへの安全なアクセスを提供し、次のようなメカニズムをサポートします 更新トークン 長期にわたってアクセスを維持します。
また、主に Google Cloud で Google ID トークンを使用して認証することもできます。これらのトークンは、 OpenID Connect(OIDC)などのオープンスタンダードに従っています。
Databricks REST API は、一般に Google ID トークンと呼ばれる Google 発行の OIDC トークンのみをサポートします。 混乱を避けるため、この記事の残りの部分では、 OIDC トークン ではなく Google ID トークン という用語を使用します。
独自の ID プロバイダーを持ち込んで Databricks へのシングル サインオンを構成する場合、Google ID トークンで認証することはできません。
この記事では、 Databricks REST API を使用するための認証手順と、必要な Google Cloud サービス アカウントを作成してこれらのアカウントのトークンを生成する方法について説明します。
サービス アカウントの設定と認証フロー
アカウントレベルのAPIsまたはワークスペースレベルのAPIsに 1 つの Google ID トークンを使用できますが、両方の目的に使用することはできません。ワークスペースレベルとアカウントレベルの APIs にトークンを設定する手順は、ほとんど同じです。 重要な違いは、説明書に記載されています。
本番運用環境では Databricks 、次の 2 つの Google Cloud サービス アカウントを使用することをお勧めします。
- SA-1 : ワークロードを実行し、トークンを取得します。
- SA-2 : Databricks リソースと GCP リソースに対するアクセス許可を保持します。
SA-1 を Databricks REST APIs呼び出すために、SA-2 を偽装する権限を SA-1 に付与します。
この偽装モデルでは、1 つのチームがワークロードのセキュリティを管理し、別のチームがリソースのセキュリティを管理できます。偽装のアクセス許可は必要な場合にのみ付与するため、このアプローチは組織にセキュリティと柔軟性を提供します。
開発またはテストでは、次のいずれかのオプションを使用してセットアップを簡略化できます。
- Google ユーザー アカウント を使用して SA-2 になりすます。
roles/iam.serviceAccountTokenCreator
ロールが必要です。 - 1 つのサービス アカウント を使用して、SA-1 と SA-2 の両方として機能します。
資格情報のパススルー
いくつかの Databricks REST API メソッドでは 、資格情報のパススルー が必要です。これらのメソッドを呼び出すには、Google ID に加えて、HTTP ヘッダーで cloud-platform
スコープを含む Google OAuth アクセス トークン も渡す必要があります。Databricks サーバーは、Google OAuth アクセス トークンを使用して、呼び出し元の代わりに Google Cloud APIを呼び出します。
Databricks では、アクセス トークンは検証または保持されません。
操作に認証情報のパススルーが必要かどうかを判断するには、各 API 操作の API ドキュメントを参照してください。これらの API には、要求に X-Databricks-GCP-SA-Access-Token
HTTP ヘッダーが必要です。
ステップ 1: 2 つのサービス アカウントを作成する
-
新しい Google Cloud サービス アカウントを 2 つ作成します。Google の記事 「サービス アカウントの作成」の指示に従います。Google Cloud Console を使用するには、 サービス アカウント ページに移動し、作成する Google Cloud プロジェクトを選択します。 これらのサービス アカウントを作成するGoogle Cloud プロジェクトは、 Databricks ワークスペースに使用するプロジェクトと一致する必要はなく、新しいサービス アカウントも互いに同じ Google Cloud プロジェクトを使用する必要はありません。
- トークン-creating サービス アカウント (SA-1): このサービス アカウントは、メイン サービス アカウントのトークンの作成を自動化します。 これらのトークンは、 Databricks REST APIを呼び出すために使用されます。 Googleのドキュメントではこれを SA-1 と呼んでいます。
- Main サービス アカウント for Databricks REST API (SA-2): このサービス アカウントは、 Databricks REST API および自動化されたワークフローのプリンシパル (自動化ユーザー) として機能します。 Googleのドキュメントではこれを SA-2 と呼んでいます。
両方のサービス アカウントのEメール アドレスを保存して、後の手順で使用します。
-
トークン作成サービス アカウント (SA-1) の サービス アカウント キー を作成し、
SA-1-key.json
というローカル ファイルに保存します。- Google Cloud Console のサービス アカウント ページで、SA-1 の Eメール アドレスをクリックします。
- [ キー] タブに移動します。
- [キーの追加 ] > [ 新しいキーの作成 ] をクリックします。
- キータイプとして、[ JSON] を選択します。
- 作成 をクリックします。
- Web ページは、キー ファイルをブラウザにダウンロードします。そのファイルをローカルの作業ディレクトリに移動し、名前を .
SA-1-key.json
に変更します。
その他の手順については、Google の記事「 サービス アカウント キーの作成」を参照してください。
-
トークン作成サービスアカウント (SA-1) に、メインのサービスアカウント アカウント (SA-2) のサービスアカウントトークン作成者ロールを付与します。
- Google Cloud Console のサービス アカウント ページで、SA-2 の Eメール アドレスをクリックします。
- 権限 タブに移動します。
- [アクセス権を持つプリンシパル] をクリックします。
- [ アクセス権を付与 ] をクリックします。
- [新しいプリンシパル ] フィールドに、トークンを作成する SA (SA-1) の Eメール アドレスを貼り付けます。
- [ ロール] フィールドで、[ サービスアカウントトークン作成者 ] を選択します。
- 保存 をクリックします。
ステップ 2: Google ID トークンを作成する
Databricks では、Google Cloud CLI (gcloud
) を使用して ID トークンを生成し、 Databricks REST APIを呼び出すことをお勧めします。
生成された ID トークンは 1 時間で期限切れになります。その時間内に残りのすべてのステップを完了する必要があります。Databricks APIの呼び出しなど、後の手順を完了する前にトークンの有効期限が切れた場合は、この手順を繰り返して新しい Google ID トークンを生成する必要があります。
-
Google Cloud 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
の形式のワークスペース URL に置き換えます。すべてのワークスペースには、異なる一意のワークスペース URL があります。複数のワークスペースで APIs を呼び出すには、異なるaudience
値を持つ複数のGoogle ID トークンを作成します。 - アカウントレベルの API の場合は 、
https://accounts.gcp.databricks.com
に置き換えます。異なるアカウントはすべて同じaudience
値を共有します。
- ワークスペースレベルのAPIsの場合は 、
本番運用システムで使用する以下のコマンドを実行します。
Bashgcloud auth login --cred-file=<SA-1-key-json>
gcloud auth print-identity-token \
--impersonate-service-account="<SA-2-email>" \
--include-email \
--audiences="<audience>"本番運用以外で、ユーザーアカウントを使用してSA-2になりすます場合は、次のコマンドを使用します。
Bashgcloud auth login
gcloud auth print-identity-token \
--impersonate-service-account="<SA-2-email>" \
--audiences="<audience>" --include-email本番運用以外で使用する場合、SA-1 と SA-2 の両方に 1 つのサービス アカウントを使用する場合は、サービス アカウントのキー JSON ファイルと共に次のコマンドを使用します。
Bashgcloud 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>].
eyJhba7s86dfa9s8f6a99das7fa68s7d6...N8s67f6saa78sa8s7dfiLlA
ステップ 3: Google OAuth アクセス トークンを作成する(認証情報のパススルーが必要な API のみ)
この手順は、資格情報のパススルーが必要な API を呼び出す場合にのみ必要です。 操作に認証情報のパススルーが必要かどうかを判断するには、各 API 操作の API ドキュメントを参照してください。
アクセス トークンを生成する要求には、アクセス トークンの有効期間を定義する lifetime
フィールドが含まれます。トークンを 5 分間だけアクティブにする必要がある場合は、 300s
(300 秒) に設定します。次の例では、1 時間を表す 3600s
を使用しています。
- 残りのすべてのステップをその制限時間内に完了する必要があります。Databricks APIの呼び出しなど、後の手順を完了する前に時間が経過した場合は、この手順を繰り返して新しい Google OAuth アクセス トークンを生成する必要があります。
- デフォルトでは、時間 (
3600s
) がlifetime
フィールドに設定できる最大期間です。この制限を延長するには、Google 顧客サポートに連絡して例外をリクエストしてください。
-
次のコマンドを実行します。
<SA-2-email>
を SA-2 のサービス アカウント Eメール アドレスに置き換えます。本番運用以外の使用またはテストで、単一のサービスアカウントを使用している場合、またはユーザーアカウントを使用してサービスアカウントを偽装している場合は、<SA-2-email>
をサービスアカウントのEメールアドレスに置き換えてください。Bashgcloud auth print-access-token --impersonate-service-account=<SA-2-email>
-
出力の末尾にある長い行を
access-token-sa-2.txt
というファイルに保存します。次のようなテキストが出力されます。
WARNING: This command is using service account impersonation. All API calls will be executed as [<SA-2-email>].
eyJhba7s86dfa9s8f6a99das7fa68s7d6...N8s67f6saa78sa8s7dfiLlA
ステップ 4: メイン サービス アカウントをユーザーとして追加する
Google ID トークンを使用してワークスペースレベルのAPIsまたはアカウントレベルのDatabricksAPIsを呼び出すには、適切なDatabricks環境のユーザーとしてメインサービスアカウント(SA-2)を追加します。
audience
フィールドはベース URL に基づいて変化するため、API タイプごとに個別の Google ID トークンを生成する必要があります。詳しくは、 Google ID トークンを作成するをご覧ください。
Databricks では、API 要求の呼び出し元 ID として SA-2 が使用されます。トークン作成サービス アカウント (SA-1) を Databricks に追加する必要はありません。SA-1 は SA-2 を偽装してトークンを生成するだけで、Databricks と直接対話しません。
ワークスペース API
Google ID トークンを使用して ワークスペースレベルの APIsを認証するには、アカウント にユーザーを追加する の ワークスペース管理者設定 タブの手順に従ってください。プロンプトが表示されたら、メインサービスアカウント(SA-2)のEメールアドレスを入力します。
オプションで、呼び出し Databricks 予定の REST APIs と使用するデータオブジェクトに応じて、新しいサービスアカウントに必要なグループメンバーシップとアクセス制御設定を追加します。 グループとアクセス制御リストを参照してください。
アカウントレベルの API
Google ID トークンを使用して アカウントレベルの APIs を認証するには、アカウントに ユーザーを追加する アカウント コンソール タブの手順に従ってください。プロンプトが表示されたら、メインサービスアカウント(SA-2)のEメールアドレスを入力します。 サービス アカウントの目的を明確に反映するように名前を設定します。
手順 5: Databricks API を呼び出す
REST API認証時に提供する必要があるトークンは、予定されている使用方法 (アカウント API またはワークスペース レベルのAPI) によって異なります。Google ID トークンの作成時に フィールドが異なるため、1 つの GoogleAPI audiences
ID トークンを使用して両方のタイプの にアクセスすることはできません。
次の HTTP ヘッダーは、Google ID を使用した Databricks 認証に使用されます。
HTTP ヘッダー名 | 説明 | どのような種類の API が必要ですか? |
---|---|---|
| ベアラートークンとしてのSA-2のGoogle IDトークン。 構文は | すべてのAPI |
| SA-2 の Google OAuth アクセス トークン。 | アカウントレベルの API のみ |
ワークスペース レベルの API 要求の例
ワークスペースの Databricks REST API を呼び出すには、次の構文で Authorization
HTTP ヘッダーに Google ID トークンを渡します。
Authorization: Bearer <google-id-token>
提供するトークンには、次の属性が必要です。
- アクセスするワークスペースは、トークンの作成時に指定したワークスペース URL と一致する必要があります。「ステップ 2: Google ID トークンを作成する」を参照してください。
- 偽装されるサービス アカウント (SA-2) は、ワークスペースのユーザーである必要があります。ワークスペース APIを参照してください。
次の例では、ワークスペース レベルのAPIを呼び出して、クラスターを一覧表示します。
<google-id-token>
をgoogle-id-token-sa-2.txt
ファイルに保存した Google ID トークンに置き換えます。<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-token-sa-2.txt
ファイルに保存した Google ID トークンに置き換えます。<account-id>
をアカウントIDに置き換えてください。アカウントIDを見つけるには:- アカウント管理者として、 Databricks アカウント コンソールに移動します。
- 右上のユーザー名の横にある下向きの矢印をクリックします。
- ドロップダウンメニューでは、 アカウントID をコピーできます。
curl \
-X GET \
--header 'Authorization: Bearer <google-id-token>' \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/workspaces
認証情報のパススルーを使用したアカウントレベルの API リクエストの例
次の例では、アカウント API を呼び出してワークスペースの一覧を取得します。
-
<google-id-token>
をgoogle-id-token-sa-2.txt
ファイルに保存した Google ID トークンに置き換えます。 -
<access-token-sa-2>
を、ファイルaccess-token-sa-2.txt
に保存した SA-2 アクセス トークンに置き換えます。 -
<account-id>
をアカウントIDに置き換えてください。アカウントIDを見つけるには:- アカウント管理者として、 Databricks アカウント コンソールに移動します。
- 右上のユーザープロファイルアイコンをクリックします。
- 表示されるポップアップで、ID の右側にあるアイコンをクリックしてアカウント ID をコピーします。
curl \
-X GET \
--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