Freigeben über


Bereitstellen eines Dienstprinzipals mithilfe von Terraform

Hinweis

Informationen zum Bereitstellen eines verwalteten Dienstprinzipals in Microsoft Entra ID mithilfe des Azure-Portals und der Benutzeroberfläche von Azure Databricks finden Sie stattdessen unter Verwalten von Dienstprinzipalen.

Verwaltete Dienstprinzipale in Microsoft Entra ID unterscheiden sich von verwalteten Identitäten für Azure-Ressourcen, die von Azure Databricks für die Authentifizierung ebenfalls unterstützt werden. Informationen zum Verwenden verwalteter Identitäten für Azure-Ressourcen anstelle von verwalteten Dienstprinzipalen in Microsoft Entra ID für die Azure Databricks-Authentifizierung finden Sie unter Einrichten und Verwenden der Authentifizierung mit von Azure verwalteten Identitäten für die Automatisierung von Azure Databricks.

Ein Dienstprinzipal ist eine Identität für automatisierte Tools und Systeme wie Skripts, Apps und CI/CD-Plattformen. Databricks empfiehlt, einen Dienstprinzipal und seinen OAuth-Token oder persönlichen Zugriffstoken anstelle Ihres Azure Databricks-Benutzerkontos und persönlichen Zugriffstokens zu verwenden. Dies hat unter anderem folgende Vorteile:

  • Gewähren und Einschränken des Zugriffs auf Ressourcen unabhängig von Benutzer*innen.
  • Benutzer*innen ermöglichen, ihre eigenen Zugriffstoken besser zu schützen.
  • Deaktivieren oder Löschen eines Dienstprinzipals, ohne dass sich dies auf andere Benutzer*innen auswirkt.
  • Entfernen von Benutzer*innen, wenn sie die Organisation verlassen, ohne dadurch Dienstprinzipale zu beeinträchtigen.

Befolgen Sie diese Anweisungen, um Terraform zum Erstellen eines verwalteten Microsoft Entra ID-Dienstprinzipals in Azure zu verwenden: Verwenden Sie den Terraform-Anbieter von Databricks, um den Microsoft Entra ID-Dienstprinzipal mit Ihrem Azure Databricks-Arbeitsbereich zu verknüpfen, und erstellen Sie für den Dienstprinzipal anschließend optional ein Token in Microsoft Entra ID oder ein OAuth-Token in Azure Databricks.

Anforderungen

Schritt 1: Erstellen des Dienstprinzipals

Wenn Sie bereits über einen verwalteten Dienstprinzipal in Microsoft Entra ID verfügen, fahren Sie mit Schritt 2 fort.

  1. Erstellen Sie in Ihrem Terminal ein leeres Verzeichnis, und wechseln Sie dann in dieses Verzeichnis. (Jeder separate Satz von Terraform-Konfigurationsdateien muss sich in einem eigenen Verzeichnis befinden.) Beispiel: 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. Erstellen Sie in diesem leeren Verzeichnis eine Datei namens main.tf. Fügen Sie dieser Datei den folgenden Inhalt hinzu, und speichern Sie dann die Datei.

    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. Erstellen Sie im selben Verzeichnis eine Datei namens terraform.tfvars. Fügen Sie den folgenden Inhalt zu dieser Datei hinzu, indem Sie den folgenden Wert ersetzen, und speichern Sie die Datei dann:

    • Ersetzen Sie den azure_service_principal_display_name-Wert durch einen Anzeigenamen für den Microsoft Entra ID-Dienstprinzipal.
    azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
    
  4. Initialisieren Sie das Arbeitsverzeichnis, das die Datei main.tf enthält, indem Sie den Befehl terraform init ausführen. Weitere Informationen finden Sie auf der Terraform-Website unter Befehl: init.

    terraform init
    
  5. Überprüfen Sie, ob Syntaxfehler in der Konfiguration vorhanden sind, indem Sie den Befehl terraform validate ausführen. Weitere Informationen finden Sie auf der Terraform-Website unter Befehl: validate.

    terraform validate
    
  6. Wenden Sie durch Ausführen des Befehls terraform apply die erforderlichen Änderungen an, um den gewünschten Zustand der Konfiguration zu erreichen. Weitere Informationen finden Sie auf der Terraform-Website unter Befehl: apply.

    terraform apply
    

Nachdem Sie den Dienstprinzipal erstellt haben, kopieren Sie die Ausgabewerte azure_client_id und azure_client_secret, da Sie diese später noch benötigen.

Um den azure_client_secret-Wert abzurufen, sehen Sie sich den Wert von outputs.client_secret.value in der Datei terraform.tfstate an, die sich in dem Arbeitsverzeichnis befindet, das die main.tf-Datei enthält.

Schritt 2: Hinzufügen des Dienstprinzipals zum Azure Databricks-Arbeitsbereich

Hinweis

Im Folgenden wird beschrieben, wie ein Dienstprinzipal auf Azure Databricks-Arbeitsbereichsebene hinzugefügt wird. Wenn Ihr Azure Databricks-Arbeitsbereich für den Identitätsverbund aktiviert ist, synchronisiert der folgende Inhalt auch automatisch den Dienstprinzipal mit dem zugehörigen Azure Databricks-Konto.

  1. Erstellen Sie in Ihrem Terminal ein leeres Verzeichnis, und wechseln Sie dann in dieses Verzeichnis. Jeder separate Gruppe von Terraform-Konfigurationsdateien muss sich in einem eigenen Verzeichnis befinden. Beispiel: 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. Erstellen Sie in diesem leeren Verzeichnis eine Datei namens main.tf. Fügen Sie dieser Datei den folgenden Inhalt hinzu, und speichern Sie dann die Datei.

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

    Hinweis

    Informationen zum Hinzufügen dieses Dienstprinzipals zu Gruppen und zum Hinzufügen von Berechtigungen für dieses Dienstprinzipal finden Sie unter databricks_service_principal auf der Terraform-Website.

  3. Erstellen Sie im selben Verzeichnis eine Datei namens terraform.tfvars. Fügen Sie den folgenden Inhalt zu dieser Datei hinzu, indem Sie die folgenden Werte ersetzen, und speichern Sie die Datei dann:

    • Ersetzen Sie den databricks_host-Wert durch die URL des Azure Databricks-Arbeitsbereichs.
    • Ersetzen Sie den azure_client_id-Wert durch den azure_client_id-Wert aus Schritt 1.
    • Ersetzen Sie den databricks_service_principal_display_name-Wert durch einen Arbeitsbereichsanzeigenamen für den Azure Databricks-Dienstprinzipal.
    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. Initialisieren Sie das Arbeitsverzeichnis, das die Datei main.tf enthält, indem Sie den Befehl terraform init ausführen. Weitere Informationen finden Sie auf der Terraform-Website unter Befehl: init.

    terraform init
    
  5. Überprüfen Sie, ob Syntaxfehler in der Konfiguration vorhanden sind, indem Sie den Befehl terraform validate ausführen. Weitere Informationen finden Sie auf der Terraform-Website unter Befehl: validate.

    terraform validate
    
  6. Wenden Sie durch Ausführen des Befehls terraform apply die erforderlichen Änderungen an, um den gewünschten Zustand der Konfiguration zu erreichen. Weitere Informationen finden Sie auf der Terraform-Website unter Befehl: apply.

    terraform apply
    

Nachdem Sie den Dienstprinzipal erstellt haben, kopieren Sie den databricks_service_principal_application_id-Ausgabewert, da Sie ihn benötigen, um ein Microsoft Entra ID-Token für den Dienstprinzipal zu erstellen.

(Optional) Schritt 3: Erstellen eines Microsoft Entra ID-Zugriffstokens für einen Microsoft Entra ID-Dienstprinzipal

Databricks empfiehlt nicht, Microsoft Entra ID-Tokens für Microsoft Entra ID-Dienstprinzipale manuell zu erstellen. Der Grund dafür ist, dass jedes Microsoft Entra ID-Token kurzlebig ist und normalerweise innerhalb einer Stunde abläuft. Nach diesem Zeitpunkt müssen Sie manuell ein Microsoft Entra ID-Ersatztoken generieren. Verwenden Sie stattdessen eines der teilnehmenden Tools oder SDKs, die den Databricks-Clientstandard für die einheitliche Authentifizierung implementieren. Diese Tools und SDKs generieren und ersetzen automatisch abgelaufene Microsoft Entra ID-Tokens für Sie, wobei die folgenden Databricks-Authentifizierungstypen verwendet werden:

Wenn Sie manuell ein Microsoft Entra ID-Token für einen Microsoft Entra ID-Dienstprinzipal erstellen müssen, sammeln Sie die folgenden Informationen, und befolgen Sie dann die Anweisungen unter Abrufen eines Microsoft Entra ID-Zugriffstokens mit der REST-API der Microsoft Identity Platform oder Abrufen eines Microsoft Entra ID-Zugriffstokens mit der Azure CLI:

  • Die Mandanten-ID für Ihren Microsoft Entra ID-Dienstprinzipal, die Sie in den Anweisungen als Mandanten-ID/Verzeichnis-ID (Mandant) / <tenant-id> verwenden werden. Informationen zum Abrufen der Mandanten-ID finden Sie unter Bereitstellen eines Dienstprinzipals im Azure-Portal.
  • Der databricks_service_principal_application_id-Wert aus Schritt 2, den Sie in den Anweisungen als Client-ID/Anwendungs-ID (Client) / <client-id> verwenden.
  • Der azure_client_secret-Wert aus Schritt 1, den Sie in den Anweisungen als geheimen Clientschlüssel/Wert / <client-secret> verwenden werden.

Kopieren Sie nach dem Erstellen des Microsoft Entra ID-Tokens den access_token-Wert, da Sie ihn Ihrem Skript, Ihrer App oder Ihrem System bereitstellen müssen.

(Optional) Schritt 4: Erstellen eines Azure Databricks-OAuth-Tokens für einen Microsoft Entra ID-Dienstprinzipal

Databricks empfiehlt nicht, OAuth-Token in Azure Databricks für verwaltete Dienstprinzipale in Microsoft Entra ID manuell zu erstellen. Dies liegt daran, dass jedes Azure Databricks-OAuth-Token kurzlebig ist und normalerweise innerhalb einer Stunde abläuft. Nach diesem Zeitpunkt müssen Sie manuell ein Azure Databricks-OAuth-Ersatztoken generieren. Verwenden Sie stattdessen eines der teilnehmenden Tools oder SDKs, die den Databricks-Clientstandard für die einheitliche Authentifizierung implementieren. Diese Tools und SDKs generieren und ersetzen abgelaufene Azure Databricks-OAuth-Token automatisch für Sie. Dabei wird Authentifizierung des Zugriffs bei Azure Databricks mit einem Dienstprinzipal unter Verwendung von OAuth (OAuth M2M) verwendet.

Wenn Sie ein OAuth-Token in Azure Databricks für einen Microsoft Entra ID-Dienstprinzipal manuell erstellen müssen, lesen Sie den Artikel Manuelles Generieren und Verwenden von Zugriffstoken für die OAuth-Computer-zu-Computer-Authentifizierung (M2M).