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
- A CLI do Terraform. Confira Baixar o Terraform.
- A CLI do Azure, conectada à assinatura de destino do Microsoft Entra ID por meio da execução do comando
az login
. Para se conectar usando uma entidade de serviço do Microsoft Entra ID, confira Login da CLI do Azure com uma entidade de serviço do Microsoft Entra ID. Para fazer logon usando uma conta de usuário do Azure Databricks, confira Logon da CLI do Azure com uma conta de usuário do Azure Databricks.
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.
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
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 }
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>>"
- Substitua o valor
Inicialize o diretório de trabalho que contém o arquivo
main.tf
executando o comandoterraform init
. Para obter mais informações, confira Command: init (Comando: init) no site do Terraform.terraform init
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
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.
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
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.
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 deazure_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>"
- Substitua o valor de
Inicialize o diretório de trabalho que contém o arquivo
main.tf
executando o comandoterraform init
. Para obter mais informações, confira Command: init (Comando: init) no site do Terraform.terraform init
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
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:
- Autenticação de identidades gerenciadas do Azure
- Autenticação da entidade de serviço do MS Entra
- Autenticação da CLI do Azure
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.