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

注:

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

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

  • ユーザーとは無関係にリソースへのアクセスを許可および制限します。

  • これにより、ユーザーは自分のアクセストークンをより適切に保護できます。

  • 他のユーザーに影響を与えずにサービスプリンシパルを無効化または削除します。

  • ユーザーが組織を離れるときに、サービスプリンシパルに影響を与えることなくユーザーを削除します。

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

要件

  • プロバイダーが ワークスペース内の ユーザー アカウントの代わりに Databricksを呼び出すことができるようにするための personal アクセストークン。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. この を使用して、 個人用アクセストークン認証を使用する DatabricksCLIという名前のDatabricks 構成プロファイル を作成します。DEFAULTDatabricksこれを行うには、次のコマンドを実行します。

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

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

  • Terraform CLIです。 Terraformのダウンロードを参照してください。

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

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

    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 を参照してください。

  3. 同じディレクトリに、 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
    
  4. terraform init コマンドを実行して、main.tf ファイルを含む作業ディレクトリを初期化します。詳細については、Terraform ウェブサイトの「コマンド: 初期化」 を参照してください。

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

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

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