Partilhar via


Provisionar uma entidade de serviço usando o Terraform

Nota

Para provisionar uma entidade de serviço gerenciado do Microsoft Entra ID usando o portal do Azure e a interface do usuário do Azure Databricks, consulte Gerenciar entidades de serviço.

As entidades de serviço gerenciado do Microsoft Entra ID diferem das identidades gerenciadas para recursos do Azure, que o Azure Databricks também oferece suporte para autenticação. Para saber como usar identidades gerenciadas para recursos do Azure em vez de entidades de serviço gerenciado do Microsoft Entra ID para autenticação do Azure Databricks, consulte Configurar e usar a autenticação de identidades gerenciadas do Azure para automação do Azure Databricks.

Uma entidade de serviço é uma identidade para ferramentas e sistemas automatizados, como scripts, aplicativos e plataformas de CI/CD. O Databricks recomenda usar uma entidade de serviço e seu token OAuth ou token de acesso pessoal em vez de sua conta de usuário e token de acesso pessoal do Azure Databricks. Os benefícios incluem:

  • Conceder e restringir o acesso a recursos independentemente de um utilizador.
  • Permitindo que os usuários protejam melhor seus próprios tokens de acesso.
  • Desativar ou excluir uma entidade de serviço sem afetar outros usuários.
  • Remover um usuário quando ele sai da organização sem afetar nenhuma entidade de serviço.

Siga estas instruções para usar o Terraform para criar uma entidade de serviço gerenciado do Microsoft Entra ID no Azure, use o provedor Databricks Terraform para vincular a entidade de serviço do Microsoft Entra ID ao seu espaço de trabalho do Azure Databricks e, opcionalmente, crie um token Microsoft Entra ID ou token OAuth do Azure Databricks para a entidade de serviço.

Requisitos

Etapa 1: Criar a entidade de serviço

Se você já tiver uma entidade de serviço gerenciada do Microsoft Entra ID disponível, pule para a Etapa 2.

  1. No seu terminal, crie um diretório vazio e, em seguida, mude para ele. (Cada conjunto separado de arquivos de configuração do Terraform deve estar em seu próprio diretório.) Por exemplo: 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. Neste diretório vazio, crie um arquivo chamado main.tf. Adicione o seguinte conteúdo a este ficheiro e, em seguida, guarde o ficheiro.

    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. No mesmo diretório, crie um arquivo chamado terraform.tfvars. Adicione o seguinte conteúdo a este ficheiro, substituindo o seguinte valor e, em seguida, guarde o ficheiro:

    • Substitua o azure_service_principal_display_name valor por um nome de exibição para a entidade de serviço Microsoft Entra ID.
    azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
    
  4. Inicialize o diretório de trabalho que contém o main.tf arquivo executando o terraform init comando. Para obter mais informações, consulte Command: init no site da Terraform.

    terraform init
    
  5. Verifique se há erros de sintaxe na configuração executando o terraform validate comando. Para obter mais informações, consulte Comando: validar no site do Terraform.

    terraform validate
    
  6. Aplique as alterações necessárias para alcançar o estado desejado da configuração executando o terraform apply comando. Para obter mais informações, consulte Comando: aplicar no site da Terraform.

    terraform apply
    

Depois de criar a entidade de serviço, copie os valores e azure_client_secret de azure_client_id saída, pois você precisará deles mais tarde.

Para obter o azure_client_secret valor, consulte o valor de no terraform.tfstate arquivo, que está no diretório de outputs.client_secret.value trabalho que contém o main.tf arquivo.

Etapa 2: Adicionar a entidade de serviço ao espaço de trabalho do Azure Databricks

Nota

O conteúdo a seguir adiciona uma entidade de serviço no nível do espaço de trabalho do Azure Databricks. Se o seu espaço de trabalho do Azure Databricks estiver habilitado para federação de identidades, o conteúdo a seguir também sincronizará automaticamente a entidade de serviço com a conta relacionada do Azure Databricks.

  1. No seu terminal, crie um diretório vazio e, em seguida, mude para ele. Cada conjunto separado de arquivos de configuração do Terraform deve estar em seu próprio diretório. Por exemplo: 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. Neste diretório vazio, crie um arquivo chamado main.tf. Adicione o seguinte conteúdo a este ficheiro e, em seguida, guarde o ficheiro.

    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."
    }
    

    Nota

    Para adicionar essa entidade de serviço a grupos e adicionar direitos a essa entidade de serviço, consulte databricks_service_principal no site da Terraform.

  3. No mesmo diretório, crie um arquivo chamado terraform.tfvars. Adicione o seguinte conteúdo a este ficheiro, substituindo os seguintes valores e, em seguida, guarde o ficheiro:

    • Substitua o databricks_host valor pela URL do espaço de trabalho do Azure Databricks.
    • Substitua o azure_client_id valor pelo azure_client_id valor da Etapa 1.
    • Substitua o databricks_service_principal_display_name valor por um nome de exibição de espaço de trabalho para a entidade de serviço do 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. Inicialize o diretório de trabalho que contém o main.tf arquivo executando o terraform init comando. Para obter mais informações, consulte Command: init no site da Terraform.

    terraform init
    
  5. Verifique se há erros de sintaxe na configuração executando o terraform validate comando. Para obter mais informações, consulte Comando: validar no site do Terraform.

    terraform validate
    
  6. Aplique as alterações necessárias para alcançar o estado desejado da configuração executando o terraform apply comando. Para obter mais informações, consulte Comando: aplicar no site da Terraform.

    terraform apply
    

Depois de criar a entidade de serviço, copie o valor de databricks_service_principal_application_id saída, pois você precisará dele para criar um token de ID do Microsoft Entra para a entidade de serviço.

(Opcional) Etapa 3: Criar um token de acesso do Microsoft Entra ID para uma entidade de serviço do Microsoft Entra ID

O Databricks não recomenda que você crie tokens de ID do Microsoft Entra para entidades de serviço do Microsoft Entra ID manualmente. Isso ocorre porque cada token de ID do Microsoft Entra é de curta duração, normalmente expirando dentro de uma hora. Após esse período, você deve gerar manualmente um token de ID do Microsoft Entra de substituição. Em vez disso, use uma das ferramentas participantes ou SDKs que implementam o padrão de autenticação unificada do cliente Databricks. Essas ferramentas e SDKs geram e substituem automaticamente tokens de ID do Microsoft Entra expirados para você, aproveitando os seguintes tipos de autenticação Databricks:

Se você precisar criar manualmente um token de ID do Microsoft Entra para uma entidade de serviço do Microsoft Entra ID, reúna as seguintes informações e siga as instruções em Obter um token de acesso do Microsoft Entra ID com a API REST da plataforma de identidade da Microsoft ou Obter um token de acesso do Microsoft Entra ID com a CLI do Azure:

  • A ID do locatário para a entidade de serviço do Microsoft Entra ID, que você usará como ID do Locatário / ID / <tenant-id> do Diretório (locatário) nas instruções. Para obter a ID do locatário, consulte Provisionar uma entidade de serviço no portal do Azure.
  • O databricks_service_principal_application_id valor da Etapa 2, que você usará como ID do Cliente / ID / <client-id> do Aplicativo (cliente) nas instruções.
  • O azure_client_secret valor da Etapa 1, que você usará como o segredo do cliente / Valor / <client-secret> nas instruções.

Depois de criar o token de ID do Microsoft Entra, copie o access_token valor, pois você precisará fornecê-lo ao seu script, aplicativo ou sistema.

(Opcional) Etapa 4: Criar um token OAuth do Azure Databricks para uma entidade de serviço Microsoft Entra ID

O Databricks não recomenda que você crie tokens OAuth do Azure Databricks para entidades de serviço gerenciado do Microsoft Entra ID manualmente. Isso ocorre porque cada token OAuth do Azure Databricks é de curta duração, normalmente expirando dentro de uma hora. Após esse período, você deve gerar manualmente um token OAuth do Azure Databricks de substituição. Em vez disso, use uma das ferramentas participantes ou SDKs que implementam o padrão de autenticação unificada do cliente Databricks. Essas ferramentas e SDKs geram e substituem automaticamente tokens OAuth do Azure Databricks expirados para você, aproveitando o acesso Autenticar ao Azure Databricks com uma entidade de serviço usando OAuth (OAuth M2M).

Se você precisar criar manualmente um token OAuth do Azure Databricks para uma entidade de serviço do Microsoft Entra ID, consulte Gerar e usar manualmente tokens de acesso para autenticação OAuth M2M.