provisionamento de uma entidade de serviço para automação de Databricks - Terraform

Observação

Para provisionar uma entidade de serviço da Databricks usando a interface de usuário da Databricks, consulte gerenciar princípios de serviço.

Uma entidade de serviço é uma identidade para ferramentas e sistemas automatizados, como scripts, aplicativos e plataformas de CI/CD. Databricks recomenda usar uma entidade de serviço e seus tokens OAuth ou access tokens pessoal em vez de sua account de usuário Databricks e access tokens pessoal. Os benefícios incluem:

  • Conceder e restringir o acesso a recursos independentemente de um usuário.

  • Permitir que os usuários protejam melhor seu próprio access token.

  • Desabilitar 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 provedor Databricks Terraform para criar uma entidade de serviço Databricks em seu workspace Databricks e, em seguida, criar access tokens Databricks para a entidade de serviço Databricks.

Requisitos

  • Um access token pessoal do Databricks para permitir que o provedor Databricks Terraform chame as APIs do Databricks em nome da sua account de usuário do Databricks no workspace do Databricks. Para criar um access token pessoal, faça o seguinte:

    1. No workspace do Databricks, clique no nome de usuário do Databricks na barra superior e selecione Configurações do usuário na lista suspensa.

    2. Clique em Desenvolvedor.

    3. Ao lado do access token, clique em gerenciar.

    4. Clique em Gerar novos tokens.

    5. (Opcional) Insira um comentário que o ajude a identificar esse token no futuro e altere o tempo de vida padrão do token de 90 dias. Para criar um token sem vida útil (não recomendado), deixe a caixa Duração (dias) vazia (em branco).

    6. Clique em Gerar.

    7. Copie o token exibido em um local seguro e clique em Concluído.

    Observação

    Certifique-se de salvar os tokens copiados em um local seguro. Não compartilhe seus tokens copiados com outras pessoas. Se você perder os tokens copiados, não poderá regenerar exatamente os mesmos tokens. Em vez disso, você deve repetir este procedimento para criar novos tokens. Se você perder os tokens copiados ou acreditar que os tokens foram comprometidos, o Databricks recomenda fortemente que você exclua imediatamente esses tokens do seu workspace clicando no ícone da lixeira (Revogar) ao lado dos tokens na página access tokens .

    Se não for possível criar ou usar tokens no seu workspace, isso pode ocorrer porque o administrador do workspace desativou os tokens ou não lhe deu permissão para criar ou usar tokens. Consulte o administrador do workspace ou o seguinte:

  • CLI do Databricks versão 0.205 ou acima, configurado com um perfil de configuração de autenticação do Databricks que faz referência ao access token pessoal do Databricks correspondente. Para criar este perfil de configuração, faça o seguinte:

    Observação

    O procedimento a seguir usa a CLI do Databricks para criar um perfil de configuração do Databricks com o nome DEFAULT. Se você já tiver um perfil de configuração DEFAULT , este procedimento substituirá seu perfil de configuração DEFAULT existente.

    Para verificar se você já tem um perfil de configuração DEFAULT e para view as configurações desse perfil, se existir, use a CLI do Databricks para executar o comando databricks auth env --profile DEFAULT.

    Para criar um perfil de configuração com um nome diferente de DEFAULT, substitua a parte DEFAULT de --profile DEFAULT no comando databricks configure a seguir por um nome diferente para o perfil de configuração.

    1. Use a CLI do Databricks para criar um perfil de configuração do Databricks chamado DEFAULT que usa a autenticação access token pessoal do Databricks. Para fazer isso, execute o seguinte comando:

      databricks configure --profile DEFAULT
      
    2. Para o prompt Databricks Host, insira a URL da instância do espaço de trabalho do Databricks , por exemplo https://dbc-a1b2345c-d6e7.cloud.databricks.com.

    3. Para o prompt access tokenpessoal, insira o access token pessoal do Databricks para seu workspace.

  • A CLI do Terraform. Consulte Baixar Terraform.

Crie a entidade de serviço do Databricks e access tokensdo Databricks

  1. No seu terminal, crie um diretório vazio e 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_service_principal_demo && cd terraform_service_principal_demo.

    mkdir terraform_service_principal_demo && cd terraform_service_principal_demo
    
  2. Nesse diretório vazio, crie um arquivo chamado main.tf. Adicione o seguinte conteúdo a este arquivo e salve o arquivo.

    Aviso

    O conteúdo a seguir contém a instrução authorization = "tokens". Pode haver apenas um recurso de permissões authorization = "tokens" por workspace do Databricks. Depois de aplicar as seguintes alterações, os usuários que anteriormente tinham permissão CAN_USE ou CAN_MANAGE terão seu acesso à autenticação baseada em tokensrevogado. Seus tokens ativos também são imediatamente excluídos (revogados). Devido à natureza potencialmente perturbadora dessas operações, a configuração relacionada é comentada no arquivo main.tf .

    Como alternativa, você pode usar a interface de usuário do Databricks para permitir que a entidade de serviço do Databricks use access tokens do Databricks. Consulte gerenciar o acesso à automação do Databricks. Você também pode usar a interface de usuário do Databricks para gerar access tokens do Databricks para a entidade de serviço do Databricks. Consulte gerenciar tokens para uma entidade de serviço.

    Observação

    O conteúdo a seguir cria uma entidade de serviço no nível do workspace Databricks. Se seu espaço de trabalho Databricks estiver habilitado para federação de identidade, o conteúdo a seguir também sincroniza automaticamente a entidade de serviço com a account Databricks relacionada (consulte Como os administradores atribuem usuários a espaços de trabalho?). Para criar uma entidade de serviço apenas no nível account do Databricks, em vez de no nível workspace , consulte a seção “Criando a entidade de serviço na account do AWS Databricks” do Recurso databricks_service_principal na documentação do provedor Databricks Terraform.

    Se você optar por remover o comentário dos seguintes recursos e resultados, um access tokens pessoal também será gerado. Esses access tokens pessoal podem ser usados pela entidade de serviço para automação somente no workspace Databricks especificado.

    Você não pode usar access token pessoal com entidade de serviço para automação em nível de accountDatabricks. Se você tentar gerar access tokens pessoal para uma entidade de serviço no nível da account Databricks, a tentativa falhará.

    variable "databricks_connection_profile" {
      description = "The name of the Databricks authentication configuration profile to use."
      type        = string
    }
    
    variable "service_principal_display_name" {
      description = "The display name for the service principal."
      type        = string
    }
    
    variable "service_principal_access_token_lifetime" {
      description = "The lifetime of the service principal's access token, in seconds."
      type        = number
      default     = 3600
    }
    
    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
    provider "databricks" {
      profile = var.databricks_connection_profile
    }
    
    resource "databricks_service_principal" "sp" {
      provider     = databricks
      display_name = var.service_principal_display_name
    }
    
    # Uncomment the following "databricks_permissions" resource
    # if you want to enable the service principal to use
    # personal access tokens.
    #
    # Warning: uncommenting the following "databricks_permissions" resource
    # causes users who previously had either CAN_USE or CAN_MANAGE permission
    # to have their access to token-based authentication revoked.
    # Their active tokens are also immediately deleted (revoked).
    #
    # Alternatively, you can enable this later through the Databricks user interface.
    #
    # resource "databricks_permissions" "token_usage" {
    #   authorization    = "tokens"
    #   access_control {
    #     service_principal_name = databricks_service_principal.sp.application_id
    #     permission_level       = "CAN_USE"
    #   }
    # }
    #
    # Uncomment the following "databricks_obo_token" resource and
    # "service_principal_access_token" output if you want to generate
    # a personal access token for service principal and then see the
    # generated personal access token.
    #
    # If you uncomment the following "databricks_obo_token" resource and
    # "service_principal_access_token" output, you must also
    # uncomment the preceding "databricks_permissions" resource.
    #
    # Alternatively, you can generate a personal access token later through the
    # Databricks user interface.
    #
    # resource "databricks_obo_token" "this" {
    #   depends_on       = [databricks_permissions.token_usage]
    #   application_id   = databricks_service_principal.sp.application_id
    #   comment          = "Personal access token on behalf of ${databricks_service_principal.sp.display_name}"
    #   lifetime_seconds = var.service_principal_access_token_lifetime
    # }
    
    output "service_principal_name" {
      value = databricks_service_principal.sp.display_name
    }
    
    output "service_principal_id" {
      value = databricks_service_principal.sp.application_id
    }
    
    # Uncomment the following "service_principal_access_token" output if
    # you want to see the generated personal access token for the service principal.
    #
    # If you uncomment the following "service_principal_access_token" output, you must
    # also uncomment the preceding "service_principal_access_token" resource and
    # "databricks_obo_token" resource.
    #
    # output "service_principal_access_token" {
    #   value     = databricks_obo_token.this.token_value
    #   sensitive = true
    # }
    

    Observação

    Para adicionar esta entidade de serviço aos grupos workspace do Databricks e adicionar direitos de workspace do Databricks a esta entidade de serviço, 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 databricks_connection_profile pelo nome do seu perfil de configuração de autenticação dos requisitos.

    • Substitua o valor service_principal_display_name por um nome de exibição para a entidade de serviço.

    • Substitua o valor service_principal_access_token_lifetime pelo número de segundos para o tempo de vida dos access tokens para a entidade de serviço.

    databricks_connection_profile           = "<Databricks authentication configuration profile name>"
    service_principal_display_name          = "<Service principal display name>"
    service_principal_access_token_lifetime = 3600
    
  4. Inicialize o diretório de trabalho que contém o arquivo main.tf executando o comando terraform init. Para obter mais informações, consulte 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, consulte comando: validar no site do Terraform.

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

    terraform apply
    
  7. Se você descomentou o recurso databricks_permissions, o recurso databricks_obo_token e a saída service_principal_access_token, para obter os access tokens da entidade de serviço, consulte o valor de outputs.service_principal_access_token.value no arquivo terraform.tfstate, que está no trabalho diretório que contém o arquivo main.tf.