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

プロビジョニング a サービスプリンシパル by using Terraform

注記

代わりに Databricks ユーザー インターフェイスを使用して Databricks サービスプリンシパルをプロビジョニングするには、「サービス プリンシパルの管理」を参照してください。

サービスプリンシパルは、スクリプト、アプリ、CI/CDプラットフォームなどの自動化されたツールとシステムのIDです。Databricks、OAuth user アカウントと personal access token の代わりに、サービスプリンシパルとその トークンまたはDatabricks personal access token を使用することをお勧めします。次のような利点があります。

  • ユーザーとは無関係にリソースへのアクセスを許可および制限します。
  • これにより、ユーザーは自分のアクセストークンをより適切に保護できます。
  • 他のユーザーに影響を与えずにサービスプリンシパルを無効化または削除します。
  • ユーザーが組織を離れるときに、サービスプリンシパルに影響を与えることなくユーザーを削除します。

次の手順に従って、Databricks Terraform プロバイダーを使用して Databricks ワークスペースに Databricks サービスプリンシパルを作成し、Databricks サービスプリンシパルの Databricks 個人用アクセス トークンを作成します。

必要条件

  • プロバイダーが ワークスペース内の ユーザー アカウントの代わりに Databricksを呼び出すことができるようにするための 個人用アクセス トークン。DatabricksTerraformDatabricksAPIsDatabricksDatabricks個人用アクセス トークンを作成するには、「 Databricks 個人用アクセス トークン認証」を参照してください。

  • Databricks CLI バージョン 0.205 以降で、対応する Databricks 個人用アクセス トークンを参照する Databricks 認証構成プロファイルで構成されます。 この設定プロファイルを作成するには、次の手順を実行します。

注記

次の手順では、Databricks CLI を使用して、DEFAULTという名前で Databricks 構成プロファイルを作成します。DEFAULT構成プロファイルが既にある場合は、この手順によって既存のDEFAULT構成プロファイルが上書きされます。

DEFAULT構成プロファイルが既に存在するかどうかを確認し、存在する場合にこのプロファイルの設定を表示するには、Databricks CLIを使用してコマンドdatabricks auth env --profile DEFAULTを実行します。

DEFAULT以外の名前の構成プロファイルを作成するには、次のdatabricks configureコマンドの --profile DEFAULTDEFAULT の部分を、構成プロファイルの別の名前に置き換えてください。

  1. Databricks CLI を使用して、Databricks パーソナル アクセス トークン認証を使用する DEFAULT という名前の Databricks 構成プロファイルを作成します。これを行うには、次のコマンドを実行します。

    Bash
    databricks configure --profile DEFAULT
  2. プロンプト Databricks Host には、Databricks ワークスペース インスタンスの URL を入力します (例: https://1234567890123456.7.gcp.databricks.com)。

  3. プロンプトの Personal Access Token に、ワークスペースのDatabricks個人用アクセストークンを入力します。

Databricks サービスプリンシパルと Databricks personal access トークンを作成する

  1. ターミナルで空のディレクトリを作成し、そのディレクトリに切り替えます。 Terraform構成ファイルの各個別のセットは、独自のディレクトリに存在する必要があります。 たとえば、 mkdir terraform_service_principal_demo && cd terraform_service_principal_demoのようになります。

    Bash
    mkdir terraform_service_principal_demo && cd terraform_service_principal_demo
  2. この空のディレクトリに、 main.tfという名前のファイルを作成します。 このファイルに次の内容を追加し、ファイルを保存します。

警告

次の内容には、 authorization = "tokens"の文が含まれています。 Databricks ワークスペースごとに存在できる authorization = "tokens" アクセス許可リソースは 1 つだけです。 次の変更を適用すると、以前に CAN_USE または CAN_MANAGE のアクセス許可を持っていたユーザーは、トークンベースの認証へのアクセスが取り消されます。 それらのアクティブなトークンもすぐに削除されます(取り消されます)。 この操作は破壊的な性質を持つ可能性があるため、関連する設定は main.tf ファイルでコメント アウトされています。

または、 Databricks ユーザー インターフェイスを使用して、 Databricks サービスプリンシパルが Databricks 個人用アクセス トークンを使用できるようにすることもできます。 「個人用アクセス トークンのアクセス許可を管理する」を参照してください。また、Databricks ユーザー インターフェイスを使用して、Databricks サービス プリンシパルのDatabricks個人用アクセス トークンを生成することもできます。「サービスプリンシパルのトークンの管理」を参照してください。

注記

次のコンテンツでは、 Databricks ワークスペース レベルでサービスプリンシパルを作成します。 DatabricksワークスペースでIDフェデレーションが有効になっている場合、次のコンテンツもサービスプリンシパルを関連するDatabricksアカウントに自動的に同期します(「ワークスペースへのユーザーの割り当て」を参照)。ワークスペース レベルではなく、 アカウント レベルのみでサービスプリンシパルを作成するには、DatabricksAWSDatabricks DatabricksTerraformプロバイダーのドキュメントの サービス リソース の「 アカウントでのサービスプリンシパルの作成」セクションを参照してください。

次のリソースと出力のコメントを解除することを選択した場合、パーソナルアクセストークンも生成されます。 この個人用アクセス トークンは、指定された Databricks ワークスペース内でのみ、サービスプリンシパルが自動化に使用できます。

パーソナルアクセストークンをサービスプリンシパルと一緒に使用して Databricks アカウントレベルの自動化には使用できません。 Databricks アカウント レベルでサービスプリンシパルの個人用アクセス トークンを生成しようとすると、試行は失敗します。

variable "databricks_connection_profile" {
description = "The name of the Databricks authentication configuration profile to use."
type = string
}

variable "service_principal_display_name" {
description = "The display name for the service principal."
type = string
}

variable "service_principal_access_token_lifetime" {
description = "The lifetime of the service principal's access token, in seconds."
type = number
default = 3600
}

terraform {
required_providers {
databricks = {
source = "databricks/databricks"
}
}
}

provider "databricks" {
profile = var.databricks_connection_profile
}

resource "databricks_service_principal" "sp" {
provider = databricks
display_name = var.service_principal_display_name
}

# Uncomment the following "databricks_permissions" resource
# if you want to enable the service principal to use
# personal access tokens.
#
# Warning: uncommenting the following "databricks_permissions" resource
# causes users who previously had either CAN_USE or CAN_MANAGE permission
# to have their access to token-based authentication revoked.
# Their active tokens are also immediately deleted (revoked).
#
# Alternatively, you can enable this later through the Databricks user interface.
#
# resource "databricks_permissions" "token_usage" {
# authorization = "tokens"
# access_control {
# service_principal_name = databricks_service_principal.sp.application_id
# permission_level = "CAN_USE"
# }
# }
#
# Uncomment the following "databricks_obo_token" resource and
# "service_principal_access_token" output if you want to generate
# a personal access token for service principal and then see the
# generated personal access token.
#
# If you uncomment the following "databricks_obo_token" resource and
# "service_principal_access_token" output, you must also
# uncomment the preceding "databricks_permissions" resource.
#
# Alternatively, you can generate a personal access token later through the
# Databricks user interface.
#
# resource "databricks_obo_token" "this" {
# depends_on = [databricks_permissions.token_usage]
# application_id = databricks_service_principal.sp.application_id
# comment = "Personal access token on behalf of ${databricks_service_principal.sp.display_name}"
# lifetime_seconds = var.service_principal_access_token_lifetime
# }

output "service_principal_name" {
value = databricks_service_principal.sp.display_name
}

output "service_principal_id" {
value = databricks_service_principal.sp.application_id
}

# Uncomment the following "service_principal_access_token" output if
# you want to see the generated personal access token for the service principal.
#
# If you uncomment the following "service_principal_access_token" output, you must
# also uncomment the preceding "service_principal_access_token" resource and
# "databricks_obo_token" resource.
#
# output "service_principal_access_token" {
# value = databricks_obo_token.this.token_value
# sensitive = true
# }
注記

このサービスプリンシパルを Databricks ワークスペース グループに追加し、Databricks ワークスペースのエンタイトルメントをこのサービスプリンシパルに追加するには、Terraform Web サイトの databricks_service_principal を参照してください。

  1. 同じディレクトリに、 terraform.tfvarsという名前のファイルを作成します。 次の内容をこのファイルに追加し、次の値を置き換えてから、ファイルを保存します。

    • databricks_connection_profile の値を、要件の認証構成プロファイルの名前に置き換えます。
    • service_principal_display_name値をサービスプリンシパルの表示名に置き換えます。
    • service_principal_access_token_lifetime 値を、サービスプリンシパルのアクセス トークンの有効期間の秒数に置き換えます。
    databricks_connection_profile           = "<Databricks authentication configuration profile name>"
    service_principal_display_name = "<Service principal display name>"
    service_principal_access_token_lifetime = 3600
  2. terraform init コマンドを実行して、main.tf ファイルを含む作業ディレクトリを初期化します。詳細については、Terraform ウェブサイトの「コマンド: 初期化」 を参照してください。

Bash
terraform init
  1. terraform validate コマンドを実行して、設定に構文エラーがあるかどうかを確認します。詳細については、 Web サイトの「 コマンド: validate 」を参照してください。Terraform

    Bash
    terraform validate
  2. terraform apply コマンドを実行して、目的とする状態に構成が達するように必要な変更を適用します。詳細については、Terraform ウェブサイトで 「コマンド: 適用」を参照してください。

Bash
terraform apply
  1. databricks_permissionsリソース、databricks_obo_tokenリソース、およびservice_principal_access_token出力のコメントを解除した場合、サービスプリンシパルのアクセストークンを取得するには、main.tfファイルを含む作業ディレクトリにあるterraform.tfstateファイルのoutputs.service_principal_access_token.valueの値を確認します。