Compartilhar via


Provisionar uma entidade de serviço usando o Terraform

Observação

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

As entidades de serviço gerenciadas do Microsoft Entra ID são distintas das identidades gerenciadas para recursos do Azure, às quais o Azure Databricks também dá suporte para autenticação. Para saber como usar identidades gerenciadas para recursos do Azure em vez de entidades de serviço gerenciadas do Microsoft Entra ID para autenticação do Azure Databricks, confira 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 o token de acesso pessoal em vez de sua conta de usuário do Azure Databricks e o token de acesso pessoal. Os benefícios incluem:

  • Conceder e restringir o acesso a recursos independentemente de um usuário.
  • Permitindo que os usuários protejam melhor seus próprios tokens de acesso.
  • Desabilitar ou excluir uma entidade de serviço sem afetar outros usuários.
  • Remover um usuário quando ele sair 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 gerenciada do Microsoft Entra ID no Azure, usar o provedor Terraform do Databricks para vincular a entidade de serviço do Microsoft Entra ID ao workspace do Azure Databricks e, opcionalmente, criar um token do Microsoft Entra ID ou um token OAuth do Azure Databricks para a entidade de serviço.

Requisitos

Etapa 1: Criar a entidade de serviço

Caso já tenha uma entidade de serviço gerenciada do Microsoft Entra ID disponível, vá para a Etapa 2.

  1. No seu terminal, crie um diretório vazio e alterne para ele. (Cada conjunto separado de arquivos de configuração do Terraform precisa estar no 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. Nesse diretório vazio, crie um arquivo chamado main.tf. Adicione o conteúdo a seguir ao arquivo e salve-o.

    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 arquivo, substituindo o seguinte valor e salve o arquivo:

    • Substitua o valor azure_service_principal_display_name por um nome de exibição para a entidade de serviço do 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 arquivo main.tf executando o comando terraform init. Para obter mais informações, confira Command: init (Comando: init) no site do Terraform.

    terraform init
    
  5. Verifique se há algum erro de sintaxe na configuração executando o comando terraform validate. Para obter mais informações, confira Command: validate no site do Terraform.

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

    terraform apply
    

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

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

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

Observação

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

  1. No seu terminal, crie um diretório vazio e alterne para ele. Cada conjunto separado de arquivos de configuração do Terraform precisa estar em um diretório próprio. 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. Nesse diretório vazio, crie um arquivo chamado main.tf. Adicione o conteúdo a seguir ao arquivo e salve-o.

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

    Observação

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

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

    • Substitua o valor de databricks_host pela URL do workspace do Azure Databricks.
    • Substitua o valor de azure_client_id pelo valor de azure_client_id da Etapa 1.
    • Substitua o valor databricks_service_principal_display_name por um nome de exibição de workspace 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 arquivo main.tf executando o comando terraform init. Para obter mais informações, confira Command: init (Comando: init) no site do Terraform.

    terraform init
    
  5. Verifique se há algum erro de sintaxe na configuração executando o comando terraform validate. Para obter mais informações, confira Command: validate no site do Terraform.

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

    terraform apply
    

Depois de criar a entidade de serviço, copie o valor de saída databricks_service_principal_application_id, 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 criar manualmente tokens do Microsoft Entra ID para entidades de serviço do Microsoft Entra ID. Isso ocorre porque cada token do Microsoft Entra ID tem curta duração, normalmente expirando em uma hora. Após esse tempo, você precisará gerar manualmente um token de substituição do Microsoft Entra ID. Em vez disso, use uma das ferramentas ou SDKs participantes que implementam o padrão de autenticação unificada do cliente Databricks. Essas ferramentas e SDKs geram e substituem automaticamente os tokens expirados do Microsoft Entra ID, aproveitando os seguintes tipos de autenticação do Databricks:

Se você precisar criar manualmente um token do Microsoft Entra ID para uma entidade de serviço do Microsoft Entra ID, colete 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 da entidade de serviço do Microsoft Entra ID, que você usará como a ID do Locatário/ID do Diretório (locatário) / <tenant-id> nas instruções. Para obter a ID do locatário, consulte Provisionar uma entidade de serviço no portal do Azure.
  • O valor databricks_service_principal_application_id da Etapa 2, que você usará como a ID do cliente/ID ID do Aplicativo (cliente) / <client-id> nas instruções.
  • O valor azure_client_secret da Etapa 1, que você usará como o segredo do cliente/ valor / <client-secret> nas instruções.

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

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

O Databricks não recomenda criar manualmente tokens OAuth do Azure Databricks para entidades de serviço gerenciadas do Microsoft Entra ID. Isso ocorre porque cada token OAuth do Azure Databricks tem vida curta, normalmente expirando em uma hora. Após esse período, você deve gerar manualmente um token OAuth do Azure Databricks substituto. Em vez disso, use uma das ferramentas ou SDKs participantes 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ê utilizando Autenticar o acesso 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 a autenticação M2M do OAuth.