Condividi tramite


Effettuare il provisioning di un'entità servizio usando Terraform

Nota

Per effettuare il provisioning di un'entità servizio gestita di Microsoft Entra ID usando la portale di Azure e l'interfaccia utente di Azure Databricks, vedere Gestire le entità servizio.

Le entità servizio gestite da Microsoft Entra ID differiscono dalle identità gestite per le risorse di Azure, che Azure Databricks supporta anche per l'autenticazione. Per informazioni su come usare le identità gestite per le risorse di Azure anziché le entità servizio gestite con ID Entra di Microsoft per l'autenticazione di Azure Databricks, vedere Configurare e usare l'autenticazione delle identità gestite di Azure per l'automazione di Azure Databricks.

Un'entità servizio è un'identità per strumenti e sistemi automatizzati, ad esempio script, app e piattaforme CI/CD. Databricks consiglia di usare un'entità servizio e il token di accesso OAuth o il token di accesso personale anziché l'account utente di Azure Databricks e il token di accesso personale. I vantaggi includono:

  • Concessione e limitazione dell'accesso alle risorse indipendentemente da un utente.
  • Consentire agli utenti di proteggere meglio i propri token di accesso.
  • Disabilitazione o eliminazione di un'entità servizio senza influire sugli altri utenti.
  • Rimozione di un utente quando lascia l'organizzazione senza alcun impatto sull'entità servizio.

Seguire queste istruzioni per usare Terraform per creare un'entità servizio gestita di Microsoft Entra ID in Azure, usare il provider Databricks Terraform per collegare l'entità servizio Microsoft Entra ID all'area di lavoro di Azure Databricks e quindi, facoltativamente, creare un token ID Microsoft Entra o un token OAuth di Azure Databricks per l'entità servizio.

Requisiti

Passaggio 1: Creare l'entità servizio

Se è già disponibile un'entità servizio gestita di Microsoft Entra ID, passare al passaggio 2.

  1. Nel terminale creare una directory vuota e quindi passare a essa. Ogni set separato di file di configurazione terraform deve trovarsi nella propria directory. Ad esempio: 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. In questa directory vuota creare un file denominato main.tf. Aggiungere il contenuto seguente a questo file e quindi salvare il file.

    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. Nella stessa directory creare un file denominato terraform.tfvars. Aggiungere il contenuto seguente a questo file, sostituendo il valore seguente e quindi salvare il file:

    • Sostituire il azure_service_principal_display_name valore con un nome visualizzato per l'entità servizio Microsoft Entra ID.
    azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
    
  4. Inizializzare la directory di lavoro contenente il main.tf file eseguendo il terraform init comando . Per altre informazioni, vedere Comando: init nel sito Web terraform.

    terraform init
    
  5. Verificare se sono presenti errori di sintassi nella configurazione eseguendo il terraform validate comando . Per altre informazioni, vedere Comando: validate nel sito Web Terraform.

    terraform validate
    
  6. Applicare le modifiche necessarie per raggiungere lo stato desiderato della configurazione eseguendo il terraform apply comando . Per altre informazioni, vedere Command: apply on the Terraform website (Comando: apply on the Terraform website).

    terraform apply
    

Dopo aver creato l'entità servizio, copiare i azure_client_id valori di output e azure_client_secret , perché saranno necessari in un secondo momento.

Per ottenere il azure_client_secret valore, vedere il valore di outputs.client_secret.value nel terraform.tfstate file , che si trova nella directory di lavoro contenente il main.tf file.

Passaggio 2: Aggiungere l'entità servizio all'area di lavoro di Azure Databricks

Nota

Il contenuto seguente aggiunge un'entità servizio a livello di area di lavoro di Azure Databricks. Se l'area di lavoro di Azure Databricks è abilitata per la federazione delle identità, il contenuto seguente sincronizza automaticamente l'entità servizio con l'account Azure Databricks correlato.

  1. Nel terminale creare una directory vuota e quindi passare a essa. Ogni set separato di file di configurazione terraform deve trovarsi nella propria directory. Ad esempio: 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. In questa directory vuota creare un file denominato main.tf. Aggiungere il contenuto seguente a questo file e quindi salvare il file.

    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

    Per aggiungere questa entità servizio ai gruppi e per aggiungere diritti a questa entità servizio, vedere databricks_service_principal nel sito Web Terraform.

  3. Nella stessa directory creare un file denominato terraform.tfvars. Aggiungere il contenuto seguente a questo file, sostituendo i valori seguenti e quindi salvare il file:

    • Sostituire il databricks_host valore con l'URL dell'area di lavoro di Azure Databricks.
    • Sostituire il azure_client_id valore con il valore del azure_client_id passaggio 1.
    • Sostituire il databricks_service_principal_display_name valore con un nome visualizzato dell'area di lavoro per l'entità servizio di 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. Inizializzare la directory di lavoro contenente il main.tf file eseguendo il terraform init comando . Per altre informazioni, vedere Comando: init nel sito Web terraform.

    terraform init
    
  5. Verificare se sono presenti errori di sintassi nella configurazione eseguendo il terraform validate comando . Per altre informazioni, vedere Comando: validate nel sito Web Terraform.

    terraform validate
    
  6. Applicare le modifiche necessarie per raggiungere lo stato desiderato della configurazione eseguendo il terraform apply comando . Per altre informazioni, vedere Command: apply on the Terraform website (Comando: apply on the Terraform website).

    terraform apply
    

Dopo aver creato l'entità servizio, copiare il databricks_service_principal_application_id valore di output, perché sarà necessario per creare un token ID Microsoft Entra per l'entità servizio.

(Facoltativo) Passaggio 3: Creare un token di accesso Microsoft Entra ID (in precedenza Azure Active Directory) per un'entità servizio Microsoft Entra ID

Databricks non consiglia di creare manualmente i token microsoft Entra ID (in precedenza Azure Active Directory) per le entità servizio Microsoft Entra ID. Ciò è dovuto al fatto che ogni token ID di Microsoft Entra è di breve durata, in genere scaduto entro un'ora. Dopo questa volta, è necessario generare manualmente un token ID Microsoft Entra sostitutivo. Usare invece uno degli strumenti o degli SDK partecipanti che implementano lo standard di autenticazione unificata del client Databricks. Questi strumenti e SDK generano e sostituiscono automaticamente i token ID Microsoft Entra scaduti, sfruttando i tipi di autenticazione di Databricks seguenti:

Se è necessario creare manualmente un token ID Microsoft Entra per un'entità servizio Microsoft Entra ID, raccogliere le informazioni seguenti e quindi seguire le istruzioni in Ottenere un token di accesso microsoft Entra ID con l'API REST di Microsoft Identity Platform o Ottenere un token di accesso microsoft Entra ID con l'interfaccia della riga di comando di Azure:

  • ID tenant per l'entità servizio Microsoft Entra ID, che verrà usato come ID tenant/ ID / <tenant-id> directory (tenant) nelle istruzioni. Per ottenere l'ID tenant, vedere Effettuare il provisioning di un'entità servizio in portale di Azure.
  • Valore databricks_service_principal_application_id del passaggio 2, che verrà usato come ID client/ ID / <client-id> applicazione (client) nelle istruzioni.
  • Valore azure_client_secret del passaggio 1, che verrà usato come segreto client/ valore / <client-secret> nelle istruzioni.

Dopo aver creato il token ID Microsoft Entra, copiare il access_token valore, perché sarà necessario specificarlo nello script, nell'app o nel sistema.

(Facoltativo) Passaggio 4: Creare un token OAuth di Azure Databricks per un'entità servizio Microsoft Entra ID

Databricks non consiglia di creare manualmente i token OAuth di Azure Databricks per le entità servizio gestite da Microsoft Entra ID. Questo avviene perché ogni token OAuth di Azure Databricks è di breve durata, in genere scaduto entro un'ora. Dopo questa volta, è necessario generare manualmente un token OAuth di Azure Databricks sostitutivo. Usare invece uno degli strumenti o degli SDK partecipanti che implementano lo standard di autenticazione unificata del client Databricks. Questi strumenti e SDK generano e sostituiscono automaticamente i token OAuth di Azure Databricks scaduti, sfruttando l'uso di un'entità servizio per l'autenticazione con Azure Databricks.

Se è necessario creare manualmente un token OAuth di Azure Databricks per un'entità servizio Microsoft Entra ID, vedere Generare e usare manualmente i token di accesso per l'autenticazione OAuth M2M.