LoginSignup
3
0

More than 1 year has passed since last update.

Databricksオートメーションのためのサービスプリンシパル

Posted at

Service principals for Databricks automation | Databricks on AWS [2022/7/8時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

サービスプリンシパルはスクリプト、アプリケーション、CI/CDプラットフォームのような自動化ツール、自動化システムで使用するために作成されるアイデンティティです。

セキュリティのベストプラクティスとして、自動化ツールやサービスにDatabricksリソースへのアクセスを許可する際、DatabricksユーザーやあなたのワークスペースのDatabricksアクセストークンではなく、DatabricksのサービスプリンシパルとDatabricksアクセストークンを使用することをお勧めします。このアプローチには以下のメリットがあります。

  • ユーザーと独立したDatabricksサービスプリンシパルにDatabricksリソースへのアクセスを許可、制限することができます。例えば、Databricksサービスプリンシパルがお使いのDatabricksワークスペースの管理者として振る舞うことを禁止しつつも、特定の他のユーザーは管理者としてあり続けられるようにできます。
  • 自動化ツールやシステムによる自分のアクセストークンへのアクセスを防御することができます。
  • 他のユーザーに影響を与えることなしに、Databricksサービスプリンシパルを一時的に無効化、あるいは恒久的に削除することができます。例えば、これによって、不正な方法で使用していると疑わしいDatabricksサービスプリンシパルからのアクセスを停止、削除することができます。
  • ユーザーが皆様の組織を去った際、いかなるDatabricksサービスプリンシパルに影響を与えることなしにそのユーザーを削除することができます。

Databricksサービスプリンシパルを作成するには、以下のツールやAPIを使用します。

これらのAPIを呼び出すために、curlやPostmanのようなツールを利用できます。Databricksユーザーインタフェースを使うことはできません。

本書では以下を説明します。

  1. DatabricksワークスペースでDatabricksサービスプリンシパルを作成する方法
  2. Databricksサービスプリンシパル向けのDatabricksアクセストークンを作成する方法

要件

  • あなたのDatabricksワークスペースユーザーのDatabricksパーソナルアクセストークン。これによってDatabricks APIを呼び出せるようになります。
  • curlPostmanのようなDatabricks APIを呼び出すためのツール。

PostmanでDatabricks APIを呼び出す際には、本文の例のようにワークスペースのインスタンス名、例えばdbc-a1b2345c-d6e7.cloud.databricks.comやワークスペースユーザーのDatabriksパーソナルアクセストークンを入力するのではなく、Postmanで変数を定義し、利用することもできることに注意してください。

curlを用いてDatabricks APIを呼び出す場合、本書のcurlのサンプルでは、お使いのDatabricksワークスペースのインスタンスURL、例えばhttps://dbc-a1b2345c-d6e7.cloud.databricks.comとワークスペースユーザーのDatabricksパーソナルアクセストークンを表す環境変数DATABRICKS_HOSTDATABRICKS_TOKENを使用しています。これらの環境変数を設定するには、以下の操作を行なってください。

Unix、Linux、macOS

現在のターミナルセッションのみの環境変数を設定するには、以下のコマンドを実行します。すべてのターミナルセッションの環境変数を設定するには、シェルのスタートアップファイルに以下のコマンドを入力し、ターミナルを再起動します。サンプルの値をご自身の環境の値で置き換えてください。

export DATABRICKS_HOST="https://dbc-a1b2345c-d6e78.cloud.databricks.com"
export DATABRICKS_TOKEN="dapi1234567890b2cd34ef5a67bc8de90fa12b"

Windows

現在のコマンドプロンプトセッションのみの環境変数を設定するには、以下のコマンドを実行してください。サンプルの値をご自身の環境の値で置き換えてください。

set DATABRICKS_HOST="https://dbc-a1b2345c-d6e78.cloud.databricks.com"
set DATABRICKS_TOKEN="dapi1234567890b2cd34ef5a67bc8de90fa12b"

すべてのコマンドプロンプトのセッションの環境変数を設定するには、以下のコマンドを実行しコマンドプロンプトを再起動してください。サンプルの値をご自身の環境の値で置き換えてください。

setx DATABRICKS_HOST "https://dbc-a1b2345c-d6e78.cloud.databricks.com"
setx DATABRICKS_TOKEN "dapi1234567890b2cd34ef5a67bc8de90fa12b"

curlでDatabricks APIを呼び出す際には、以下のことにも注意してください。

  • 本書のcurlのサンプルではUnix、Linux、macOSフォーマットを使用しています。Windowsのコマンドシェルでは、\^${...}%...%で置き換えてください。

  • curlの結果を読みやすくするために、JSONフォーマットの出力を整形するjqのようなツールを使用することができます。本書のcurlサンプルでは、JSON出力をフォーマッティングするためにjqを使用しています。

  • 複数のワークスペースを操作する際、DATABRICKS_HOSTDATABRICKS_TOKENを変更し続けるのではなく、.netrcファイルを使用することができます。.netrcファイルを使っている場合には、以下のように本書のcurlサンプルを変更してください。

    • curl -Xcurl --netrc -Xに変更します。
    • ${DATABRICKS_HOST}をお使いのDatabricksワークスペースインスタンスURL、例えばhttps://dbc-a1b2345c-d6e7.cloud.databricks.comに置き換えます。
    • --header "Authorization: Bearer ${DATABRICKS_TOKEN}" \を削除します。

Databricksサービスプリンシパルの作成

すでにDatabricksサービスプリンシパルがある場合には、DatabricksサービスプリンシパルのためのDatabricksアクセストークンを作成するために次のセクションにスキップしてください。

DatabricksワークスペースにDatabricksサービスプリンシパルを追加するために、curlやPostmanのようなツールを使うことができます。以下の指示では、下の置き換えを行なってください。

  • <display-name>をDatabricksサービスプリンシパルの表示名で置き換えてください。
  • entitlementsの配列を、Databricksサービスプリンシパルに追加する任意のエンタイトルメントで置き換えてください。このサンプルでは、Databricksサービスプリンシパルにクラスターを作成する権限を許可します。DatabricksサービスプリンシパルにはデフォルトでワークスペースへのアクセスとDatabricks SQLへのアクセスが許可されています。
  • <group-id>をDatabricksサービスプリンシパルを属させたいDatabricksワークスペースのグループIDで置き換えてください。(それぞれのDatabricksサービスプリンシパルではなく、グループにアクセス権を設定する方が容易です)
    • グループを追加するには、groups配列にグループIDを追加します。
    • グループIDを取得するにはGet groupsを呼び出します。
    • グループを作成するには、ユーザーインタフェースでグループを追加するか、Create group APIをコールします。
    • グループにアクセス権を追加するには、ユーザーインタフェースのオプションのManage workspace-level groupsをご覧いただくか、Permissions API 2.0を呼び出してください。
    • Databricksサービスプリンシパルがグループに属さないようにするには、groups配列を削除します。

Curl

以下のコマンドを実行します。create-service-principal.jsonがコマンドを実行する場所と同じディレクトリに存在するようにしてください。

DatabricksサービスプリンシパルのDatabricksアクセストークンを作成する際に必要になるので、コマンドのアウトプットのapplicationIdの値をコピーしておきます。

curl -X POST \
${DATABRICKS_HOST}/api/2.0/preview/scim/v2/ServicePrincipals \
--header "Content-type: application/scim+json" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data @create-service-principal.json \
| jq .
create-service-principal.json
{
  "displayName": "<display-name>",
  "entitlements": [
    {
      "value": "allow-cluster-create"
    }
  ],
  "groups": [
    {
      "value": "<group-id>"
    }
  ],
  "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal" ],
  "active": true
}

Postman

  1. 新規HTTPリクエストを作成します(File > New > HTTP Request)。

  2. HTTP verbドロップダウンリストでPOSTを選択します。

  3. Enter request URLhttps://<databricks-instance-name>/api/2.0/preview/scim/v2/ServicePrincipalsを入力します。ここでは、<databricks-instance-name>は、dbc-a1b2345c-d6e7.cloud.databricks.comのようなお使いのDatabricksワークスペースインスタンス名です。

  4. AuthorizationタブのTypeリストでBearer Tokenを選択します。

  5. Tokenには、あなたのDatabricksユーザーのDatabricksパーソナルアクセストークンを入力します。

  6. HeadersタブでContent-Typeapplication/scim+jsonKeyValueのペアを追加します。

  7. BodyタブでrawJSONを選択します。

  8. 以下のbodyペイロードを入力します。

    JSON
    {
      "displayName": "<display-name>",
      "entitlements": [
        {
          "value": "allow-cluster-create"
        }
      ],
      "groups": [
        {
          "value": "<group-id>"
        }
      ],
      "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal" ],
      "active": true
    }
    
  9. Sendをクリックします。

  10. DatabricksサービスプリンシパルのDatabricksアクセストークンを作成する際に必要になるので、responseペイロードのapplicationIdの値をコピーしておきます。

Databricksサービスプリンシパル向けのDatabricksアクセストークンの作成

ステップ1: DatabricksサービスプリンシパルのIDの取得

すでにDatabricksサービスプリンシパルのIDを取得しているのであればステップ2にスキップしてください。

DatabricksサービスプリンシパルのIDを取得するために、curlやPostmanのようなツールを使うことができます。IDを取得するには以下を実行します。

Curl

以下のコマンドを実行します。コマンドのアウトプットでDatabricksサービスプリンシパルのapplicationIdをコピーします。

curl -X GET \
${DATABRICKS_HOST}/api/2.0/preview/scim/v2/ServicePrincipals \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
| jq .

Postman

  1. 新規HTTPリクエストを作成します(File > New > HTTP Request)。
  2. HTTP verbドロップダウンリストでGETを選択します。
  3. Enter request URLhttps://<databricks-instance-name>/api/2.0/preview/scim/v2/ServicePrincipalsを入力します。ここでは、<databricks-instance-name>は、dbc-a1b2345c-d6e7.cloud.databricks.comのようなお使いのDatabricksワークスペースインスタンス名です。
  4. AuthorizationタブのTypeリストでBearer Tokenを選択します。
  5. Tokenには、あなたのDatabricksユーザーのDatabricksパーソナルアクセストークンを入力します。
  6. Sendをクリックします。
  7. responseペイロードでDatabricksサービスプリンシパルのapplicationIdをコピーします。

ステップ2: Databricksサービスプリンシパル向けのDatabricksアクセストークンの作成

DatabricksサービスプリンシパルのDatabricksアクセストークンを作成するためにcurlかPostmanを使うことができます。以下の手順では下の置き換えを行なってください。

  • <application-id>をDatabricksサービスプリンシパルのapplicationIdで置き換えてください。
  • <comment>を任意のDatabricksアクセストークンのコメントで置き換えてください。コメントを追加しない場合には、commentオブジェクトを削除してください。
  • 1209600をDatabricksアクセストークンの有効期限の秒数で置き換えてください。この例では14日を指定しています。

重要!
上の時間を経過すると、このDatabricksアクセストークンは無効化され、このDatabricksアクセストークンに依存しているいかなるCI/CDプラットフォームは動作しなくなります。このような状況を回避するためには、有効期限が切れる前に新たなDatabricksアクセストークンを作成し、CI/CDプラットフォームに割り当てる必要があります。

Curl

以下のコマンドを実行します。create-service-principal-token.jsonがコマンドを実行する場所と同じディレクトリに存在するようにしてください。

CI/CDプラットフォームのセットアップに必要になるので、コマンドの出力からtoken_valueの値をコピーしておきます。

注意
アクセスが拒否されたメッセージを受け取る場合には、DatabricksサービスプリンシパルにDatabricksアクセストークンの使用を許可するCan Use権限を許可するために、Manage token permissions using the admin consoleをご覧ください。

curl -X POST \
${DATABRICKS_HOST}/api/2.0/token-management/on-behalf-of/tokens \
--header "Content-type: application/json" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data @create-service-principal-token.json \
| jq .
create-service-principal-token.json
{
  "application_id": "<application-id>",
  "comment": "<comment>",
  "lifetime_seconds": 1209600
}

Postman

  1. 新規HTTPリクエストを作成します(File > New > HTTP Request)。

  2. HTTP verbドロップダウンリストでPOSTを選択します。

  3. Enter request URLhttps://<databricks-instance-name>/api/2.0/token-management/on-behalf-of/tokensを入力します。ここでは、<databricks-instance-name>は、dbc-a1b2345c-d6e7.cloud.databricks.comのようなお使いのDatabricksワークスペースインスタンス名です。

  4. AuthorizationタブのTypeリストでBearer Tokenを選択します。

  5. Tokenには、あなたのDatabricksユーザーのDatabricksパーソナルアクセストークンを入力します。

  6. HeadersタブでContent-Typeapplication/scim+jsonKeyValueのペアを追加します。

  7. BodyタブでrawJSONを選択します。

  8. 以下のbodyペイロードを入力します。

    JSON
    {
      "application_id": "<application-id>",
      "comment": "<comment>",
      "lifetime_seconds": 1209600
    }
    
  9. Sendをクリックします。

  10. CI/CDプラットフォームのセットアップに必要になるので、responsペイロードからtoken_valueの値をコピーしておきます。

注意
アクセスが拒否されたメッセージを受け取る場合には、DatabricksサービスプリンシパルにDatabricksアクセストークンの使用を許可するCan Use権限を許可するために、Manage token permissions using the admin consoleをご覧ください。その後に再度Sendをクリックしてください。

Databricks 無料トライアル

Databricks 無料トライアル

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0