다음을 통해 공유


Terraform을 사용하여 서비스 주체 프로비전

참고 항목

대신 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 토큰을 만듭니다.

요구 사항

  • Terraform CLI. Terraform 다운로드를 참조하세요.
  • 명령을 실행 az login 하여 대상 Microsoft Entra ID(이전의 Azure Active Directory) 구독에 로그인한 Azure CLI입니다. Microsoft Entra ID 서비스 주체를 사용하여 로그인하려면 Microsoft Entra ID 서비스 주체를 사용하여 Azure CLI 로그인을 참조하세요. Azure Databricks 사용자 계정을 사용하여 로그인하려면 Azure Databricks 사용자 계정으로 Azure CLI 로그인을 참조 하세요.

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. 명령을 실행하여 main.tf 파일이 포함된 작업 디렉터리를 초기화합니다 terraform init . 자세한 내용은 Terraform 웹 사이트에서 Command: init를 참조하세요.

    terraform init
    
  5. 명령을 실행하여 구성에 구문 오류가 있는지 확인합니다 terraform validate . 자세한 내용은 Command: Terraform 웹 사이트에서 유효성 검사를 참조하세요.

    terraform validate
    
  6. 명령을 실행하여 구성의 원하는 상태에 도달하는 데 필요한 변경 내용을 적용합니다 terraform apply . 자세한 내용은 Terraform 웹 사이트에서 명령: 적용을 참조하세요.

    terraform apply
    

서비스 주체를 만든 후 나중에 필요하므로 값을 복사 azure_client_id 하고 azure_client_secret 출력합니다.

azure_client_secret 값을 가져오려면 main.tf 파일이 포함된 작업 디렉터리에 있는 terraform.tfstate 파일의 outputs.client_secret.value값을 참조하세요.

2단계: Azure Databricks 작업 영역에 서비스 주체 추가

참고 항목

다음 콘텐츠는 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 웹 사이트의 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. 명령을 실행하여 main.tf 파일이 포함된 작업 디렉터리를 초기화합니다 terraform init . 자세한 내용은 Terraform 웹 사이트에서 Command: init를 참조하세요.

    terraform init
    
  5. 명령을 실행하여 구성에 구문 오류가 있는지 확인합니다 terraform validate . 자세한 내용은 Command: Terraform 웹 사이트에서 유효성 검사를 참조하세요.

    terraform validate
    
  6. 명령을 실행하여 구성의 원하는 상태에 도달하는 데 필요한 변경 내용을 적용합니다 terraform apply . 자세한 내용은 Terraform 웹 사이트에서 명령: 적용을 참조하세요.

    terraform apply
    

서비스 주체를 만든 후 서비스 주체에 databricks_service_principal_application_id 대한 Microsoft Entra ID 토큰을 만드는 데 필요하므로 출력 값을 복사합니다.

(선택 사항) 3단계: Microsoft Entra ID 서비스 주체에 대한 Microsoft Entra ID(이전의 Azure Active Directory) 액세스 토큰 만들기

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를 사용하여 Microsoft Entra ID 액세스 토큰 가져오기 또는 Azure CLI를 사용하여 Microsoft Entra ID 액세스 토큰 가져오기의 지침을 따릅니다.

  • 지침에서 테넌트 ID/ 디렉터리(테넌트) ID로 사용할 Microsoft Entra ID 서비스 주체의 테넌트 ID / <tenant-id> 입니다. 테넌트 ID를 가져오려면 Azure Portal에서 서비스 주체 프로비저닝을 참조하세요.
  • 지침에서 클라이언트 ID/애플리케이션(클라이언트) ID / <client-id>로 사용할 2단계의 databricks_service_principal_application_id
  • 지침에서 클라이언트 암호/ / <client-secret>으로 사용할 1단계의 azure_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는 만료된 Azure Databricks OAuth 토큰을 자동으로 생성하고 대체하며, 서비스 주체를 사용하여 Azure Databricks로 인증합니다.

Microsoft Entra ID 서비스 주체에 대한 Azure Databricks OAuth 토큰을 수동으로 만들어야 하는 경우 OAuth M2M 인증에 대한 액세스 토큰 수동 생성 및 사용을 참조하세요.