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, consultare Gestire le entità servizio.

Le entità di servizio gestite di Microsoft Entra ID si differenziano dalle risorse identità gestite per Azure che sono supportate anche da Azure Databricks 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, consultare 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 dell'app

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. Creare un nuovo file denominato main.tf nella directory vuota. Aggiungere il contenuto seguente al file e quindi salvarlo.

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

    • Sostituire il valore azure_service_principal_display_name 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 file main.tf eseguendo il comando terraform init. Per altre informazioni, consultare Comando: init sul sito Web Terraform.

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

    terraform validate
    
  6. Applica le modifiche richieste per raggiungere lo stato desiderato della configurazione eseguendo il comando terraform apply. Per altre informazioni, consultare Comando: applica al sito Web Terraform.

    terraform apply
    

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

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

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. Creare un nuovo file denominato main.tf nella directory vuota. Aggiungere il contenuto seguente al file e quindi salvarlo.

    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, consultare databricks_service_principal sul sito Web Terraform.

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

    • Sostituire il valore databricks_host con l'URL dell'area di lavoro di Azure Databricks.
    • Sostituire il valore azure_client_id con il valore azure_client_id del passaggio 1.
    • Sostituire il valore databricks_service_principal_display_name 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 file main.tf eseguendo il comando terraform init. Per altre informazioni, consultare Comando: init sul sito Web Terraform.

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

    terraform validate
    
  6. Applica le modifiche richieste per raggiungere lo stato desiderato della configurazione eseguendo il comando terraform apply. Per altre informazioni, consultare Comando: applica al sito Web Terraform.

    terraform apply
    

Dopo aver creato l'entità servizio, copiare il valore di output databricks_service_principal_application_id, 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 per un'entità servizio Microsoft Entra ID

Databricks non consiglia di creare manualmente token di Microsoft Entra ID per le entità servizio di Microsoft Entra ID. Ciò è dovuto al fatto che ogni token di Microsoft Entra ID è di breve durata e scade in genere entro un'ora. Dopo la scadenza è necessario generare manualmente un token di Microsoft Entra ID 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 directory (tenant) / <tenant-id> nelle istruzioni. Per ottenere l'ID tenant, consultare Effettuare il provisioning di un'entità servizio in portale di Azure.
  • Il valore databricks_service_principal_application_id del passaggio 2, che verrà usato come ID client/ ID applicazione (client) / <client-id> 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 valore access_token, 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. Ciò è dovuto al fatto che ogni token OAuth di Azure Databricks è di breve durata e scade in genere entro un'ora. Dopo la scadenza è 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'autenticazione dell'accesso ad Azure Databricks con un'entità servizio usando OAuth (OAuth M2M).

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