Databricks 自動化のためのサービスプリンシパルのプロビジョニング - Terraform

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

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

  • ユーザーとは別にリソースへのアクセスを許可および制限する。

  • ユーザーが自分のアクセストークンをより適切に保護できるようにします。

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

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

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

要件

  • Databricks Terraform プロバイダーが Databricks ワークスペース内の Databricks ユーザー アカウントの代わりに Databricks APIs を呼び出すことを許可する Databricks 個人用アクセストークン。 個人用アクセストークンを作成するには、次の操作を行います。

    1. Databricksワークスペースで、上部バーにあるDatabricksユーザー名をクリックし、ドロップダウンから [ユーザー設定] を選択します。

    2. [ 開発者] をクリックします。

    3. [アクセストークン] の横にある [管理] をクリックします。

    4. [ 新しいトークンの生成] をクリックします。

    5. (任意)今後このトークンを識別するのに役立つコメントを入力し、トークンのデフォルトの有効期間である90日を変更します。有効期間のないトークンを作成するには(非推奨)、[有効期間 (日) ] ボックスを空白のままにしてください。

    6. [生成] をクリックします。

    7. 表示されたトークンを安全な場所にコピーし、[完了] をクリックします。

    コピーしたトークンは、必ず安全な場所に保存してください。 コピーしたトークンを他のユーザーと共有しないでください。 コピーしたトークンを紛失した場合、まったく同じトークンを再生成することはできません。 代わりに、この手順を繰り返して新しいトークンを作成する必要があります。 コピーしたトークンを紛失した場合、またはトークンが侵害されたと思われる場合は、アクセストークン ページでトークンの横にあるごみ箱 (取り消し) アイコンをクリックして、ワークスペースからそのトークンをすぐに削除することを強くお勧めします。

    ワークスペースでトークンを作成または使用できない場合は、ワークスペース管理者がトークンを無効にしたか、トークンを作成または使用する権限を与えていないことが原因である可能性があります。ワークスペース管理者に問い合わせるか、以下をご覧ください。

  • Databricks CLI バージョン 0.205 以降で、対応する Databricks personal アクセストークンを参照する 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 構成プロファイルを作成します。これを行うには、次のコマンドを実行します。

      databricks configure --profile DEFAULT
      
    2. プロンプト Databricks Host の場合は、Databricks ワークスペース インスタンスの URL を入力します (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com)。

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

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

Databricks サービスプリンシパルを作成し、アクセストークン Databricks

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

    次のリソースと出力のコメントを解除することを選択すると、個人用アクセストークンも生成されます。 この個人用アクセス トークンは、指定された 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 コマンドを実行して、構成に構文エラーがあるかどうかを確認します。詳細については、Terraform Web サイトの 「コマンド: 検証 」を参照してください。

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