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

Databricksを使用して リソースへの無人アクセスをサービスプリンシパルで承認するOAuth

このトピックでは、Databricks CLIコマンドを自動化するとき、または無人プロセスから実行されるコードから Databricks REST APIを呼び出すときにDatabricksリソースへのアクセスを承認する手順と詳細について説明します。

Databricks は、UI の外部で Databricks リソースと対話する際のユーザー認証と認証の優先プロトコルとして OAuth を使用します。Databricks は、OAuth の認証方法の一部として生成されるアクセス トークンの更新を自動化するための統合クライアント認証ツールも提供しています。これは、サービスプリンシパル とユーザー アカウントにも当てはまりますが、操作の一部としてアクセスする必要がある Databricks リソースに対して、適切なアクセス許可と特権を使用してサービスプリンシパルを構成する必要があります。

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

Databricks サービスプリンシパルを使用する場合の承認と認証にはどのようなオプションがありますか?

このトピックでは、 承認 とは、委任を通じて特定の Databricks リソースへのアクセスをネゴシエートするために使用されるプロトコル (OAuth) を指します。 認証 とは、資格情報が表現、送信、および検証されるメカニズムを指し、この場合は アクセストークン です。

Databricks はOAuth 2.0 ベースの承認を使用してDatabricksコマンド ラインまたはコードからアカウントとワークスペース リソースへのアクセスを有効にします。これらのリソースにアクセスするアクセス許可を持つサービスプリンシパルの代わりに。Databricksサービスプリンシパルが構成され、CLI コマンドを実行したり、 を呼び出したりするときにその資格情報が検証されると、参加しているツールまたはRESTAPI OAuthにSDK トークンが付与され、その時点からサービスプリンシパルに代わってトークンベースの認証が実行されます。OAuthアクセストークンの有効期間は1時間で、その後、関係するツールまたはSDKは、1時間有効な新しいトークンを取得するための自動バックグラウンド試行を行います。

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

  • Databricks 統合クライアント認証サポートを使用して、ほとんどの場合自動的に行われます。 特定の Databricks SDK (Databricks Terraform SDK など) とツールを使用している場合は、この簡略化されたアプローチを使用します。 サポートされているツールと SDK については、「 Databricks 統合クライアント認証」を参照してください。 このアプローチは、自動化やその他の無人プロセス シナリオに適しています。
  • 手動で、OAuth コード検証ツール/チャレンジのペアと認証コードを直接生成し、それらを使用して、構成で提供する初期 OAuth トークンを作成します。 Databricks 統合クライアント認証でサポートされている API を使用していない場合は、この方法を使用します。 この場合、使用しているサードパーティのツールやAPIに固有のアクセストークンの更新を処理するための独自のメカニズムを開発する必要があるかもしれません。 詳しくは、OAuth サービスプリンシパル認証用のアクセス・トークンを手動で生成して使用するを参照してください。

開始する前に、 Databricks サービスプリンシパルを構成し、オートメーション コードまたはコマンドが要求したときに使用する必要があるリソースにアクセスするための適切なアクセス許可を割り当てる必要があります。

前提条件: サービスプリンシパルを作成する

アカウント admins とワークスペース admins は、サービスプリンシパルを作成できます。 この手順では、 Databricks ワークスペースでサービスプリンシパルを作成する方法について説明します。 Databricks アカウント コンソールの詳細については、「アカウントへのサービスプリンシパルの追加」を参照してください。

  1. ワークスペース管理者として、Databrickワークスペースにログインします。
  2. Databricksワークスペースの上部のバーにあるユーザー名をクリックし、 [設定] を選択します。
  3. [ IDとアクセス ] タブをクリックします。
  4. サービスプリンシパル の横にある [ 管理 ] をクリックします。
  5. [ サービスプリンシパルの追加 ] をクリックします。
  6. 検索ボックスのドロップダウン矢印をクリックし、[ 新規追加 ] をクリックします。
  7. サービスプリンシパルの名前を入力します。
  8. [ 追加 ] をクリックします。

サービスプリンシパルはワークスペースとDatabricksアカウントの両方に追加されます。

ステップ 1: サービスプリンシパルに権限を割り当てる

  1. サービスプリンシパルの名前をクリックして、その詳細ページを開きます。
  2. 構成 タブで、このワークスペースに対してサービスプリンシパルに付与する各権限の横にあるボックスを選択し、 更新 をクリックします。
  3. [ アクセス許可 ] タブで、このサービスプリンシパルを管理および使用する任意の Databricks ユーザー、サービスプリンシパル、およびグループにアクセス権を付与します。 サービスプリンシパルでの役割の管理を参照してください。

ステップ 2: サービスプリンシパルの OAuth シークレットを作成する

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

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

  1. サービスプリンシパルの詳細ページで、[ シークレット ] タブをクリックします。

  2. [ OAuthシークレット ] で、[ シークレットを生成 ] をクリックします。

    ワークスペースから OAuth シークレットを生成する

  3. シークレットの有効期間を日数で設定します。 OAuth シークレットの最大有効期間は 730 日 (2 年) です。

  4. 表示された シークレットクライアントID をコピーし、[ 完了 ] をクリックします。

秘密は作成中に一度だけ明らかになります。クライアント ID は、サービスプリンシパルのアプリケーション ID と同じです。

アカウント 管理者は、アカウント コンソールのサービスプリンシパル 詳細ページから OAuth シークレットを生成することもできます。

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. サイドバーで、[ ユーザー管理 ] をクリックします。

  3. [ サービスプリンシパル ] タブで、サービスプリンシパルを選択します。

  4. [ OAuthシークレット ] で、[ シークレットを生成 ] をクリックします。

    アカウントから OAuth シークレットを生成する

  5. シークレットの有効期間を日数で設定します。 OAuth シークレットの最大有効期間は 730 日 (2 年) です。

  6. 表示された シークレットクライアントID をコピーし、[ 完了 ] をクリックします。

注記

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

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

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

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

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

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

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

  • DATABRICKS_HOST:DatabricksアカウントのコンソールURL(https://accounts.cloud.databricks.com)に設定されます。
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

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

  • DATABRICKS_HOSTで、Databricks ワークスペース URL ( https://dbc-a1b2345c-d6e7.cloud.databricks.comなど) に設定します。
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

OAuth サービスプリンシパル 認証 用のアクセス トークンを手動で生成して使用する

Databricksクライアント統合認証標準を実装するDatabricksツールと SDK は、OAuth サービスプリンシパル 認証に必要なDatabricks OAuth アクセストークンを自動的に生成、更新、および使用します。

Databricks ではクライアント統合認証の使用をお勧めしますが、Databricks OAuth アクセス トークンを手動で生成、更新、または使用する必要がある場合は、このセクションの手順に従ってください。

サービスプリンシパルのクライアントIDとOAuth OAuthシークレットを使用して、アカウントレベルのRESTAPIs とワークスペースレベルの の両方に対する認証のための アクセストークンを要求します。RESTAPIsアクセストークンの有効期限は1時間です。有効期限が切れたら、新しい OAuth アクセス トークンを要求する必要があります。OAuth アクセストークンのスコープは、トークンを作成するレベルによって異なります。トークンは、次のように、アカウントレベルまたはワークスペースレベルで作成できます。

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

アカウントレベルで作成されたOAuthアクセストークンは、アカウント内のDatabricks REST APIと、サービスプリンシパルがアクセスできるすべてのワークスペースに対して使用できます。

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. 右上のユーザー名の横にある下向きの矢印をクリックします。

  3. アカウントIDを コピーしてください。

  4. 次のURLの<my-account-id>をコピーしたアカウントIDに置き換えて、トークンエンドポイントのURLを作成します。

    https://accounts.cloud.databricks.com/oidc/accounts/<my-account-id>/v1/token
  5. curl などのクライアントを使用して、トークン エンドポイント URL、サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます)、および作成したサービスプリンシパルの OAuth シークレットを含む OAuth アクセス トークンを要求します。スコープは、サービスプリンシパルにアクセス権が付与されているすべての all-apisにアクセスするために使用できるOAuth アクセストークンを要求します。DatabricksRESTAPIs

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

    レスポンスからaccess_tokenをコピーします。

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

ワークスペースレベルで作成されたOAuthアクセストークンは、サービスプリンシパルがアカウント管理者であっても、他のワークスペースのメンバーであっても、そのワークスペース内のREST APIにのみアクセスできます。

  1. トークン エンドポイント URL を作成するには、 https://<databricks-instance> を Databricks デプロイの ワークスペース URL に置き換えます。

    https://<databricks-instance>/oidc/v1/token
  2. curl などのクライアントを使用して、トークン エンドポイント URL、サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます)、および作成したサービスプリンシパルの OAuth シークレットを含む OAuth アクセス トークンを要求します。スコープは、トークンを要求しているワークスペース内でサービスプリンシパルにアクセス権が付与されているすべての all-apisにアクセスするために使用できるOAuth アクセストークンを要求します。DatabricksRESTAPIs

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

    レスポンスからaccess_tokenをコピーします。

Databricks REST API を呼び出す

Databricksのアカウントレベル REST APIやワークスペース レベルのREST APIに対する認証を行うために、OAuthのアクセストークンを使うことができます。サービスプリンシパルは、アカウントレベルの REST APIを呼び出すためにアカウント管理者権限を持っている必要があります。

Bearer認証を使用して、認証ヘッダーにアクセス トークンを含めます。このアプローチは、 curl または構築する任意のクライアントで使用できます。

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

この例では、Bearer認証を使用して、アカウントに関連付けられているすべてのワークスペースのリストを取得します。

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

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

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

この例では、Bearer 認証を使用して、指定されたワークスペースで利用可能なすべてのクラスターを一覧表示します。

  • <oauth-access-token> を、前の手順でコピーしたサービスプリンシパルの OAuth アクセス トークンに置き換えます。
  • <workspace-URL>を、 dbc-a1b2345c-d6e7.cloud.databricks.comのような形式のベースとなるワークスペースURLに置き換えます。
Bash
export OAUTH_TOKEN=<oauth-access-token>

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

追加のリソース