次の方法で共有


Terraform を使用してサービス プリンシパルをプロビジョニングする

Note

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

Microsoft Entra ID マネージド サービス プリンシパルは、Azure Databricks でも認証をサポートする Azure リソース用マネージド ID とは異なります。 Azure Databricks 認証に Microsoft Entra ID マネージドサービス プリンシパルではなく Azure リソース用マネージド ID を使用する方法については、「Azure Databricks の自動化のための Azure マネージド ID 認証の設定と使用」を参照してください。

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

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

Terraform を使用して Azure で Microsoft Entra ID マネージド サービス プリンシパルを作成し、Databricks Terraform プロバイダー を使用して Microsoft Entra ID サービス プリンシパルを Azure Databricks ワークスペースにリンクし、必要に応じてサービス プリンシパルの Microsoft Entra ID トークンまたは Azure Databricks OAuth トークンを作成します。

要件

手順 1: サービス プリンシパルを作成する

Microsoft Entra ID マネージド サービス プリンシパルを既にお持ちの場合は、手順 2 に進んでください。

  1. ターミナルで空のディレクトリを作成し、それに切り替えます。 (Terraform 構成ファイルの各個別セットは、それぞれ独自のディレクトリに配置する必要があります)。例: mkdir terraform_azure_service_principal_demo && cd terraform_azure_service_principal_demo

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

    variable "azure_service_principal_display_name" {
      description = "A display name for the <entra-service-principal>."
      type        = string
    }
    
    terraform {
      required_providers {
        azuread = {
          source  = "hashicorp/azuread"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    resource "azuread_application" "this" {
      display_name = var.azure_service_principal_display_name
    }
    
    resource "azuread_service_principal" "this" {
      application_id = azuread_application.this.application_id
    }
    
    resource "time_rotating" "month" {
      rotation_days = 30
    }
    
    resource "azuread_service_principal_password" "this" {
      service_principal_id = azuread_service_principal.this.object_id
      rotate_when_changed  = { rotation = time_rotating.month.id }
    }
    
    output "azure_client_id" {
      description = "The Azure AD service principal's application (client) ID."
      value       = azuread_application.this.application_id
    }
    
    output "azure_client_secret" {
      description = "The Azure AD service principal's client secret value."
      value       = azuread_service_principal_password.this.value
      sensitive   = true
    }
    
  3. 同じディレクトリに、terraform.tfvars という名前のファイルを作成します。 次の内容をこのファイルに追加し、次の値を置き換えてから、ファイルを保存します。

    • azure_service_principal_display_name の値を、Microsoft Entra ID サービス プリンシパルの表示名に置き換えます。
    azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
    
  4. terraform init コマンドを実行して、main.tf ファイルを含む作業ディレクトリを初期化します。 詳細については、Terraform Web サイトのコマンド: init に関する記事を参照してください。

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

    terraform validate
    
  6. terraform apply コマンドを実行して、構成が目的の状態になるように必要な変更を適用します。 詳細については、Terraform Web サイトのコマンド: apply に関する記事を参照してください。

    terraform apply
    

サービス プリンシパルを作成した後、azure_client_idazure_client_secret の出力値をコピーします。これらは後で必要になります。

azure_client_secret の値を取得するには、main.tf ファイルを含む作業ディレクトリにある terraform.tfstate ファイルで outputs.client_secret.value の値を確認します。

手順 2: サービス プリンシパルを Azure Databricks ワークスペースに追加する

Note

次のコンテンツでは、Azure Databricks ワークスペース レベルでサービス プリンシパルを追加します。 Azure Databricks ワークスペースで ID フェデレーション が有効になっている場合、次のコンテンツもサービス プリンシパルを関連する Azure Databricks アカウントに自動的に同期します。

  1. ターミナルで空のディレクトリを作成し、それに切り替えます。 Terraform 構成ファイルの各個別セットは、それぞれ独自のディレクトリに配置する必要があります。 (例: mkdir terraform_databricks_service_principal_demo && cd terraform_databricks_service_principal_demo)。

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

    variable "databricks_host" {
      description = "The Azure Databricks workspace URL."
      type = string
    }
    
    variable "azure_client_id" {
      type        = string
      description = "The application (client) ID of the <entra-service-principal> to link to an Azure Databricks service principal. This application (client) ID will be the application ID of the Azure Databricks service principal."
    }
    
    variable "databricks_service_principal_display_name" {
      type        = string
      description = "A workspace display name for the Azure Databricks service principal."
    }
    
    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
    provider "databricks" {
      host = var.databricks_host
    }
    
    resource "databricks_service_principal" "sp" {
      application_id = var.azure_client_id
      display_name   = var.databricks_service_principal_display_name
    }
    
    output "databricks_service_principal_application_id" {
      value       = databricks_service_principal.sp.application_id
      description = "Application ID of the Azure Databricks service principal."
    }
    
    output "databricks_service_principal_display_name" {
      value       = databricks_service_principal.sp.display_name
      description = "Workspace display name of the Azure Databricks service principal."
    }
    
    output "databricks_workspace_service_principal_id" {
      value       = databricks_service_principal.sp.id
      description = "Workspace ID of the Azure Databricks service principal. This ID is generated by Azure Databricks for this workspace."
    }
    

    注意

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

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

    • databricks_host の値を、Azure Databricks ワークスペースの URL に置き換えます。
    • azure_client_id の値を、ステップ 1 の azure_client_id の値に置き換えます。
    • databricks_service_principal_display_name の値を、Azure Databricks サービス プリンシパルのワークスペース表示名に置き換えます。
    databricks_host                           = "<The Azure Databricks workspace URL, starting with https://>"
    azure_client_id                           = "<The Azure client ID of the Azure Active AD service principal>"
    databricks_service_principal_display_name = "<A workspace display name for the Azure Databricks service principal>"
    
  4. terraform init コマンドを実行して、main.tf ファイルを含む作業ディレクトリを初期化します。 詳細については、Terraform Web サイトのコマンド: init に関する記事を参照してください。

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

    terraform validate
    
  6. terraform apply コマンドを実行して、構成が目的の状態になるように必要な変更を適用します。 詳細については、Terraform Web サイトのコマンド: apply に関する記事を参照してください。

    terraform apply
    

サービス プリンシパルを作成したら、databricks_service_principal_application_id の出力値をコピーします。これは、このサービス プリンシパル用の Microsoft Entra ID トークンを作成するときに必要になります。

(省略可能) 手順 3: Microsoft Entra ID (旧称 Azure Active Directory) サービス プリンシパルの Microsoft Entra ID アクセス トークンを作成する

Databricks では、Microsoft Entra ID サービス プリンシパルの Microsoft Entra ID (旧称 Azure Active Directory) トークンを手動で作成することはお勧めしません。 これは、各 Microsoft Entra ID トークンは有効期間が短く、通常は 1 時間以内に期限切れになるためです。 この時間が経過したら、代わりの Microsoft Entra ID トークンを手動で生成する必要があります。 代わりに、Databricks クライアント統合認証標準を実装している関係ツールまたは SDK のいずれかを使用してください。 これらのツールと SDK は、次の Databricks 認証の種類を利用して、期限切れの Microsoft Entra ID トークンを自動的に生成して置き換えます。

Microsoft Entra ID サービス プリンシパル用の Microsoft Entra ID トークンを手動で作成する必要性がある場合、次の情報を集めてから、「Microsoft ID プラットフォーム REST API を使用して Azure AD アクセス トークンを取得する」または「Azure CLI を使用して Azure AD アクセス トークンを取得する」の手順に従ってください:

  • Microsoft Entra ID サービス プリンシパルのテナント ID。これは、手順でテナント ID / ディレクトリ (テナント) ID / <tenant-id> として使います。 テナント ID を取得するには、「Azure portal でサービス プリンシパルをプロビジョニングする」をご覧ください。
  • ステップ 2 の databricks_service_principal_application_id の値。これは、手順でクライアント ID / アプリケーション (クライアント) ID / <client-id> として使います。
  • ステップ 1 の azure_client_secret の値。これは、手順でクライアント シークレット / / <client-secret> として使います。

Microsoft Entra ID トークンを作成したら、スクリプト、アプリ、またはシステムに指定する必要がある access_token 値をコピーします。

(省略可能) 手順 4: Microsoft Entra ID サービス プリンシパルの Azure Databricks OAuth トークンを作成する

Databricks では、Microsoft Entra ID マネージド サービス プリンシパルの Azure Databricks OAuth トークンを手動で作成することはお勧めしません。 これは、各 Azure Databricks OAuth トークンは有効期間が短く、通常は 1 時間以内に期限切れになるためです。 この時間が経過したら、代わりの Azure Databricks OAuth トークンを手動で生成する必要があります。 代わりに、Databricks クライアント統合認証標準を実装している関係ツールまたは SDK のいずれかを使用してください。 これらのツールと SDK は、OAuth マシン間 (M2M) 認証を利用して、期限切れの Azure Databricks OAuth トークンを自動的に生成して置き換えます。

Microsoft Entra ID サービス プリンシパル用の Azure Databricks OAuth トークンを手動で作成する必要がある場合は、「OAuth マシン間 (M2M) 認証用のアクセス トークンを手動で生成して使用する」を参照してください。