プロビジョニング 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 DEFAULT
の DEFAULT
の部分を、構成プロファイルの別の名前に置き換えてください。
-
Databricks CLI を使用して、Databricks パーソナル アクセス トークン認証を使用する
DEFAULT
という名前の Databricks 構成プロファイルを作成します。これを行うには、次のコマンドを実行します。Bashdatabricks configure --profile DEFAULT
-
プロンプト Databricks Host には、Databricks ワークスペース インスタンスの URL を入力します (例:
https://1234567890123456.7.gcp.databricks.com
)。 -
プロンプトの Personal Access Token に、ワークスペースのDatabricks個人用アクセストークンを入力します。
- Terraform CLIです。 Terraformのダウンロードを参照してください。
Databricks サービスプリンシパルと Databricks personal access トークンを作成する
-
ターミナルで空のディレクトリを作成し、そのディレクトリに切り替えます。 Terraform構成ファイルの各個別のセットは、独自のディレクトリに存在する必要があります。 たとえば、
mkdir terraform_service_principal_demo && cd terraform_service_principal_demo
のようになります。Bashmkdir terraform_service_principal_demo && cd terraform_service_principal_demo
-
この空のディレクトリに、
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 を参照してください。
-
同じディレクトリに、
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 -
terraform init
コマンドを実行して、main.tf
ファイルを含む作業ディレクトリを初期化します。詳細については、Terraform ウェブサイトの「コマンド: 初期化」 を参照してください。
terraform init
-
terraform validate
コマンドを実行して、設定に構文エラーがあるかどうかを確認します。詳細については、 Web サイトの「 コマンド: validate 」を参照してください。TerraformBashterraform validate
-
terraform apply
コマンドを実行して、目的とする状態に構成が達するように必要な変更を適用します。詳細については、Terraform ウェブサイトで 「コマンド: 適用」を参照してください。
terraform apply
databricks_permissions
リソース、databricks_obo_token
リソース、およびservice_principal_access_token
出力のコメントを解除した場合、サービスプリンシパルのアクセストークンを取得するには、main.tf
ファイルを含む作業ディレクトリにあるterraform.tfstate
ファイルのoutputs.service_principal_access_token.value
の値を確認します。