Поделиться через


Подготовка субъекта-службы с помощью Terraform

Примечание.

Чтобы подготовить управляемый субъект-службу идентификатора Microsoft Entra с помощью портал Azure и пользовательского интерфейса Azure Databricks, см. статью "Управление субъектами-службами".

Управляемые субъекты-службы идентификатора Microsoft Entra отличаются от управляемых удостоверений для ресурсов Azure, которые Azure Databricks также поддерживает для проверки подлинности. Сведения об использовании управляемых удостоверений для ресурсов Azure вместо субъектов-служб, управляемых идентификатором Microsoft Entra для проверки подлинности Azure Databricks, см. в статье "Настройка и использование проверки подлинности управляемых удостоверений Azure для автоматизации Azure Databricks".

Субъект-служба — это удостоверение для автоматизированных средств и систем, таких как скрипты, приложения и платформы CI/CD. Databricks рекомендует использовать субъект-службу и его токен OAuth или личный маркер доступа вместо учетной записи пользователя Azure Databricks и личного маркера доступа. Она предлагает следующие преимущества:

  • Предоставление и ограничение доступа к ресурсам независимо от пользователя.
  • Предоставление пользователям более эффективной защиты собственных маркеров доступа.
  • Отключение или удаление субъекта-службы без влияния на других пользователей.
  • Удаление пользователя при выходе из организации без влияния на субъект-службу.

Следуйте этим инструкциям, чтобы использовать Terraform для создания управляемого субъекта-службы Microsoft Entra ID в Azure, используйте поставщик Databricks Terraform, чтобы связать субъект-службу Microsoft Entra ID с рабочей областью Azure Databricks, а затем при необходимости создать маркер идентификатора Microsoft Entra или токен OAuth Azure Databricks для субъекта-службы.

Требования

  • Terraform CLI. См. раздел "Скачать Terraform".
  • Azure CLI, вошедший в целевую подписку Microsoft Entra ID, выполнив az login команду. Сведения о входе с помощью субъекта-службы идентификатора Microsoft Entra см. в статье azure CLI login with a Microsoft Entra ID service principal. Чтобы войти в систему с помощью учетной записи пользователя Azure Databricks, ознакомьтесь с учетной записью пользователя Azure Databricks.

Шаг 1. Создание субъекта-службы

Если у вас уже есть управляемый субъект-служба идентификатора Microsoft Entra, перейдите к шагу 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.
    azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
    
  4. Инициализируйте рабочий каталог с файлом main.tf, выполнив команду terraform init. Дополнительные сведения см. на странице Command: init (Команда: init) на веб-сайте Terraform.

    terraform init
    
  5. Проверьте наличие ошибок синтаксиса в конфигурации, выполнив terraform validate команду. Дополнительные сведения см. в разделе Command: проверка на веб-сайте Terraform.

    terraform validate
    
  6. Примените изменения для достижения требуемого состояния конфигурации, выполнив команду terraform apply. Дополнительные сведения см. на странице Command: apply (Команда: apply) на веб-сайте Terraform.

    terraform apply
    

После создания субъекта-службы скопируйте azure_client_id значения и azure_client_secret выходные значения, как вам потребуется позже.

Чтобы получить значение azure_client_secret, см. значение outputs.client_secret.value в файле terraform.tfstate, которое находится в рабочем каталоге, содержащем файл main.tf.

Шаг 2. Добавление субъекта-службы в рабочую область Azure Databricks

Примечание.

Следующее содержимое добавляет субъект-службу на уровне рабочей области Azure Databricks. Если рабочая область Azure Databricks включена для федерации удостоверений, то следующее содержимое также автоматически синхронизирует субъект-службу с соответствующей учетной записью 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."
    }
    

    Примечание.

    Чтобы добавить этот субъект-службу в группы и добавить права для этого субъекта-службы, см. databricks_service_principal на веб-сайте Terraform.

  3. В том же каталоге создайте файл с именем terraform.tfvars. Добавьте в этот файл следующее содержимое, заменив следующие значения, а затем сохраните файл:

    • Замените значение databricks_host URL-адресом рабочей области Azure Databricks.
    • Замените значение azure_client_id на значение azure_client_id, полученное на шаге 1.
    • Замените значение 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. Дополнительные сведения см. на странице Command: init (Команда: init) на веб-сайте Terraform.

    terraform init
    
  5. Проверьте наличие ошибок синтаксиса в конфигурации, выполнив terraform validate команду. Дополнительные сведения см. в разделе Command: проверка на веб-сайте Terraform.

    terraform validate
    
  6. Примените изменения для достижения требуемого состояния конфигурации, выполнив команду terraform apply. Дополнительные сведения см. на странице Command: apply (Команда: apply) на веб-сайте Terraform.

    terraform apply
    

После создания субъекта-службы скопируйте databricks_service_principal_application_id выходное значение, так как потребуется создать маркер идентификатора Microsoft Entra для субъекта-службы.

(Необязательно) Шаг 3. Создание маркера доступа к идентификатору Microsoft Entra для субъекта-службы идентификатора Microsoft Entra

Databricks не рекомендует создавать маркеры идентификатора Microsoft Entra для субъектов-служб Microsoft Entra ID вручную. Это связано с тем, что каждый маркер идентификатора Microsoft Entra является коротким сроком действия, обычно истекает в течение одного часа. После этого необходимо вручную создать заменяющий маркер идентификатора Microsoft Entra. Вместо этого используйте один из участвующих средств или пакетов SDK, реализующих стандарт унифицированной проверки подлинности клиента Databricks. Эти средства и пакеты SDK автоматически создают и заменяют истекшие маркеры идентификатора Microsoft Entra ID для вас, используя следующие типы проверки подлинности Databricks:

Если вам нужно вручную создать маркер идентификатора Microsoft Entra для субъекта-службы Идентификатора Microsoft Entra, соберите следующие сведения, а затем следуйте инструкциям в статье "Получение маркера доступа к идентификатору Microsoft Entra id с помощью REST API платформа удостоверений Майкрософт" или получения маркера доступа идентификатора Microsoft Entra с помощью Azure CLI:

  • Идентификатор клиента для субъекта-службы Microsoft Entra ID, который будет использоваться в качестве идентификатора клиента или каталога (клиента) / <tenant-id> в инструкциях. Сведения о получении идентификатора клиента см. в разделе Подготовка субъекта-службы на портале Azure.
  • Значение databricks_service_principal_application_id на шаге 2, которое будет использоваться в качестве идентификатора клиента или идентификатора приложения (клиента) / <client-id> в инструкциях.
  • Значение azure_client_secret из шага 1, которое будет использоваться в качестве секрета клиента или значения / <client-secret> в инструкциях.

После создания маркера идентификатора Microsoft Entra скопируйте access_token значение, так как вам потребуется предоставить его скрипту, приложению или системе.

(Необязательно) Шаг 4. Создание маркера OAuth Azure Databricks для субъекта-службы идентификатора Microsoft Entra ID

Databricks не рекомендует создавать маркеры OAuth Azure Databricks для управляемых субъектов-служб Microsoft Entra ID вручную. Это связано с тем, что каждый токен OAuth Azure Databricks является коротким, обычно истекает в течение одного часа. После этого необходимо вручную создать замещающий маркер OAuth Azure Databricks. Вместо этого используйте один из участвующих средств или пакетов SDK, реализующих стандарт унифицированной проверки подлинности клиента Databricks. Эти средства и пакеты SDK автоматически создают и заменяют истекшие маркеры OAuth Azure Databricks, используя доступ к Azure Databricks с субъектом-службой с помощью OAuth (OAuth M2M).

Если вам нужно вручную создать маркер OAuth Azure Databricks для субъекта-службы идентификатора Microsoft Entra ID, см . статью "Вручную создавать и использовать маркеры доступа для проверки подлинности OAuth M2M".