Freigeben über


Ausführen eines Auftrags mit einem Microsoft Entra ID-Dienstprinzipal

Mithilfe von Aufträgen können Anwendungen ohne Interaktion in einem Azure Databricks-Cluster ausgeführt werden. Ein Beispiel wären etwa ETL-Aufträge oder Datenanalyseaufgaben, die nach einem Zeitplan ausgeführt werden sollen. Diese Aufträge werden in der Regel als Benutzer*in ausgeführt, der bzw. die sie erstellt hat. Hierbei kann es jedoch Einschränkungen geben:

  • Um Aufträge erstellen und ausführen zu können, muss der Benutzer über die entsprechenden Berechtigungen verfügen.
  • Nur der Benutzer, der den Auftrag erstellt hat, hat Zugriff auf den Auftrag.
  • Der Benutzer kann aus dem Azure Databricks-Arbeitsbereich entfernt werden.

Die Verwendung eines Dienstkontos (also eines Kontos, das nicht einem bestimmten Benutzer, sondern einer Anwendung zugeordnet ist) ist eine gängige Methode, um diesen Einschränkungen zu begegnen. In Azure können Sie eine Microsoft Entra ID-Anwendung (früher Azure Active Directory) und einen Dienstprinzipal verwenden, um ein Dienstkonto zu erstellen.

Dies ist beispielsweise wichtig, wenn der Zugriff auf Daten, die in einem Azure Data Lake Storage Gen2-Konto gespeichert sind, durch Dienstprinzipale gesteuert wird. Aufträge, die mit diesen Dienstprinzipalen ausgeführt werden, haben Zugriff auf Daten im Speicherkonto. Außerdem ist so die Steuerung des Datenzugriffsbereichs möglich.

In diesem Tutorial erfahren Sie, wie Sie eine Microsoft Entra ID-Anwendung und einen Dienstprinzipal erstellen und diesen Dienstprinzipal zum Besitzer eines Auftrags machen. Außerdem erfahren Sie, wie Sie anderen Gruppen, die den Auftrag nicht besitzen, Berechtigungen zum Ausführen des Auftrags erteilen. Im Anschluss finden Sie eine Übersicht über die allgemeinen Aufgaben in diesem Tutorial:

  1. Erstellen Sie einen Dienstprinzipal in Microsoft Entra ID.
  2. Erstellen eines persönlichen Zugriffstokens (Personal Access Token, PAT) in Azure Databricks. Das PAT wird für die Authentifizierung bei der Databricks-REST-API verwendet.
  3. Hinzufügen des Dienstprinzipals als Benutzer ohne Administratorrechte zu Azure Databricks über die Databricks-SCIM-API
  4. Erstellen eines von Azure Key Vault unterstützten Geheimnisbereichs in Azure Databricks
  5. Erteilen von Lesezugriff auf den Geheimnisbereich für den Dienstprinzipal
  6. Erstellen eines Auftrags in Azure Databricks und Konfigurieren des Auftragsclusters zum Lesen von Geheimnissen aus dem Geheimnisbereich
  7. Übertragen des Auftragsbesitzes auf den Dienstprinzipal
  8. Testen des Auftrags durch Ausführen als Dienstprinzipal

Sollten Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Hinweis

Sie können keinen Cluster mit aktivierter Passthrough für Anmeldeinformationen verwenden, um einen Auftrag auszuführen, der einem Dienstprinzipal gehört. Wenn Auftrag einen Dienstprinzipal für den Zugriff auf Azure Storage erfordert, lesen Sie „Herstellen einer Verbindung mit Azure Data Lake Storage Gen2“ oder „Blob Storage mit Azure-Anmeldeinformationen“.

Anforderungen

Für dieses Tutorial benötigen Sie Folgendes:

  • Ein Benutzerkonto mit den erforderlichen Berechtigungen zum Registrieren einer Anwendung in Ihrem Microsoft Entra ID-Mandanten
  • Administratorrechte im Azure Databricks-Arbeitsbereich, in dem Sie Aufträge ausführen möchten
  • Ein Tool zum Übermitteln von API-Anforderungen an Azure Databricks. In diesem Tutorial wird cURL verwendet. Sie können aber auch ein anderes Tool verwenden, das die Übermittlung von REST-API-Anforderungen ermöglicht.

Erstellen eines Dienstprinzipals in Microsoft Entra ID

Ein Dienstprinzipal ist die Identität einer Microsoft Entra-ID-Anwendung. Gehen Sie zum Erstellen des Dienstprinzipals für die Auftragsausführung wie folgt vor:

  1. Wählen Sie im Azure-Portal Microsoft Entra ID > App-Registrierungen > Neue Registrierung aus. Geben Sie einen Namen für die Anwendung ein, und klicken Sie auf Registrieren.
  2. Navigieren Sie zu Zertifikate und Geheimnisse, klicken Sie auf Neuer geheimer Clientschlüssel, und generieren Sie einen neuen geheimen Clientschlüssel. Kopieren Sie das Geheimnis, und speichern Sie es an einem sicheren Ort.
  3. Navigieren Sie zu Übersicht, und notieren Sie sich die Werte für Anwendungs-ID (Client) und Verzeichnis-ID (Mandant).

Erstellen des persönlichen Azure Databricks-Zugriffstokens

Sie verwenden ein persönliches Azure Databricks-Zugriffstoken (Personal Access Token, PAT), um sich bei der Databricks-REST-API zu authentifizieren. Gehen Sie wie folgt vor, um ein PAT zu erstellen, das zum Übermitteln von API-Anforderungen verwendet werden kann:

  1. Navigieren Sie zu Ihrem Azure Databricks-Arbeitsbereich.
  2. Klicken Sie in der oberen rechten Ecke des Bildschirms auf Ihren Benutzernahmen und anschließend auf Einstellungen.
  3. Klicken Sie auf Entwickler.
  4. Klicken Sie neben Zugriffstoken auf Verwalten.
  5. Klicken Sie auf Neues Token generieren.
  6. Kopieren Sie den Tokenwert, und speichern Sie ihn.

Tipp

In diesem Beispiel wird ein persönliches Zugriffstoken verwendet. Für die meisten APIs kann aber auch ein Microsoft Entra ID-Token verwendet werden. PATs werden für gewöhnlich für administrative Konfigurationsaufgaben verwendet, während Microsoft Entra ID-Token vorzugsweise für Produktionsworkloads genutzt werden.

Die Generierung von PATs kann aus Sicherheitsgründen auf Administratoren beschränkt werden. Weitere Informationen finden Sie unter Überwachen und Verwalten persönlicher Zugriffstoken.

Hinzufügen des Dienstprinzipals zum Azure Databricks-Arbeitsbereich

Sie fügen den Microsoft Entra ID-Dienstprinzipal einem Arbeitsbereich mithilfe der Dienstprinzipal-API hinzu. Darüber hinaus muss dem Dienstprinzipal die Berechtigung zum Starten automatisierter Auftragscluster erteilt werden. Hierzu können Sie die Berechtigung allow-cluster-create verwenden. Öffnen Sie ein Terminal, und verwenden Sie die Databricks CLI-, um den folgenden Befehl auszuführen, um den Dienstprinzipal hinzuzufügen und die erforderlichen Berechtigungen zu erteilen:

databricks service-principals create --json '{
  "schemas":[
    "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
  ],
  "applicationId":"<application-id>",
  "displayName": "test-sp",
  "entitlements":[
    {
      "value":"allow-cluster-create"
    }
  ]
}'

Ersetzen Sie <application-id> durch Application (client) ID für die Microsoft Entra-ID-Anwendungsregistrierung.

Erstellen eines von Azure Key Vault unterstützten Geheimnisbereichs in Azure Databricks

Geheimnisbereiche ermöglichen die sichere Speicherung und Verwaltung von Geheimnissen. Das dem Dienstprinzipal zugeordnete Geheimnis wird von Ihnen in einem Geheimnisbereich gespeichert. Sie können Geheimnisse in einem Azure Databricks-Geheimnisbereich oder in einem von Azure Key Vault unterstützten Geheimnisbereich speichern. In der folgenden Anleitung wird die von Azure Key Vault unterstützte Option beschrieben:

  1. Erstellen Sie über das Azure-Portal eine Azure Key Vault-Instanz.
  2. Erstellen Sie den von der Azure Key Vault-Instanz unterstützten Azure Databricks-Geheimnisbereich.

Schritt 1: Erstellen einer Azure Key Vault-Instanz

  1. Wählen Sie im Azure-Portal Schlüsseltresore > +Hinzufügen aus, und geben Sie dem Key Vault einen Namen.

  2. Klicken Sie auf Überprüfen + erstellen.

  3. Klicken Sie nach Abschluss der Prüfung auf Erstellen.

  4. Wechseln Sie nach dem Erstellen des Key Vault zur Seite Eigenschaften für den neuen Key Vault.

  5. Kopieren Sie den Tresor-URI und die Ressourcen-ID, und speichern Sie sie.

    Azure Key Vault-Eigenschaften

Schritt 2: Erstellen eines von Azure Key Vault unterstützten Geheimnisbereichs

Azure Databricks-Ressourcen können auf Geheimnisse verweisen, die in einem Azure Key Vault gespeichert sind, indem sie einen von Key Vault unterstützten Geheimnisbereich erstellen. Gehen Sie zum Erstellen des Azure Databricks Geheimnisbereichs wie folgt vor:

  1. Navigieren Sie unter https://<per-workspace-url>/#secrets/createScope zur Azure Databricks-Seite für die Geheimnisbereichserstellung. Ersetzen Sie per-workspace-url durch die eindeutige arbeitsbereichsspezifische URL für Ihren Azure Databricks-Arbeitsbereich.

  2. Geben Sie unter Scope Name (Bereichsname) einen Bereichsnamen ein.

  3. Geben Sie unter Vault-URI und Ressourcen-ID die entsprechenden Werte für den Azure Key Vault ein, den Sie in Schritt 1: Erstellen einer Azure Key Vault-Instanz erstellt haben.

  4. Klicken Sie auf Erstellen.

    Erstellen eines Geheimnisbereichs

Speichern des geheimen Clientschlüssels in Azure Key Vault

  1. Navigieren Sie im Azure-Portal zum Dienst Schlüsseltresore.

  2. Wählen Sie den in Schritt 1: Erstellen einer Azure Key Vault-Instanz erstellten Key Vault aus.

  3. Klicken Sie unter Einstellungen > Geheimnisse auf Generieren/Importieren.

  4. Wählen Sie die Uploadoption Manuell aus, und geben Sie den geheimen Clientschlüssel in das Feld Wert ein.

    Erstellen eines Geheimnisses

  5. Klicken Sie auf Erstellen.

Erteilen von Lesezugriff auf den Geheimnisbereich für den Dienstprinzipal

Sie haben einen Geheimnisbereich erstellt und den geheimen Clientschlüssel des Dienstprinzipals in diesem Bereich gespeichert. Als Nächstes gewähren Sie dem Dienstprinzipal Lesezugriff auf das Geheimnis aus dem Geheimnisbereich.

Öffnen Sie ein Terminal, und verwenden Sie die Databricks CLI, um den folgenden Befehl auszuführen:

databricks secrets put-acl <scope-name> <application-id> READ
  • Ersetzen Sie <scope-name> durch den Namen des Azure Databricks-Geheimnisbereichs, der den geheimen Clientschlüssel enthält.
  • Ersetzen Sie <application-id> durch Application (client) ID für die Microsoft Entra-ID-Anwendungsregistrierung.

Erstellen eines Auftrags in Azure Databricks und Konfigurieren des Clusters zum Lesen von Geheimnissen aus dem Geheimnisbereich

Sie können nun einen Auftrag erstellen, der als der neuen Dienstprinzipal ausgeführt werden kann. Dazu verwenden Sie ein Notebook, das über die Benutzeroberfläche von Azure Databricks erstellt wird, und fügen die Konfiguration hinzu, damit das Geheimnis des Dienstprinzipals durch den Auftragscluster abgerufen werden kann.

  1. Navigieren Sie zu Ihrer Landing Page für Azure Databricks, und wählen Sie Neu > Notebook aus. Geben Sie Ihrem Notebook einen Namen, und wählen Sie als Standardsprache SQL aus.

  2. Geben Sie SELECT 1 in die erste Zelle des Notebooks ein. Hierbei handelt es sich um einen einfachen Befehl, durch den bei erfolgreicher Ausführung einfach „1“ angezeigt wird. Wenn Sie Ihrem Dienstprinzipal Zugriff auf bestimmte Dateien oder Pfade in Azure Data Lake Storage Gen2 gewährt haben, können Sie stattdessen diese Pfade für Lesevorgänge verwenden.

  3. Wechseln Sie zu Workflows, und klicken Sie auf Auftrag erstellen. Geben Sie dem Auftrag und der Aufgabe einen Namen, klicken Sie auf Notebook auswählen, und wählen Sie das soeben erstellte Notebook aus.

  4. Klicken Sie neben den Clusterinformationen auf Bearbeiten.

  5. Klicken Sie auf der Seite Configure Cluster (Cluster konfigurieren) auf Advanced Options (Erweiterte Optionen).

  6. Geben Sie auf der Registerkarte Spark die folgende Spark-Konfiguration ein:

    fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
    fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
    fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope-name>/<secret-name>}}
    fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token
    
    • Ersetzen Sie <storage-account> durch den Namen des Speicherkontos, das Ihre Daten enthält.
    • Ersetzen Sie <secret-scope-name> durch den Namen des Azure Databricks-Geheimnisbereichs, der den geheimen Clientschlüssel enthält.
    • Ersetzen Sie <application-id> durch Application (client) ID für die Microsoft Entra-ID-Anwendungsregistrierung.
    • Ersetzen Sie <secret-name> durch den Namen, der dem Wert des geheimen Clientschlüssels im Geheimnisbereich zugeordnet ist.
    • Ersetzen Sie <directory-id> durch Directory (tenant) ID für die Microsoft Entra-ID-Anwendungsregistrierung.

Übertragen des Eigentums auf den Dienstprinzipal

Ein Auftrag kann immer nur genau einen Besitzer haben. Daher muss der Besitz des Auftrags von Ihnen auf den Dienstprinzipal übertragen werden. Sie können auch einer Gruppe die Berechtigungen KANN VERWALTEN zuweisen, um sicherzustellen, dass der Auftrag von anderen Benutzern verwaltet werden kann. In diesem Beispiel wird die Berechtigungs-API verwendet, um diese Berechtigungen festzulegen.

Öffnen Sie ein Terminal, und verwenden Sie die Databricks CLI, um den folgenden Befehl auszuführen:

databricks permissions set jobs <job-id> --json '{
  "access_control_list": [
    {
      "service_principal_name": "<application-id>",
      "permission_level": "IS_OWNER"
    },
    {
      "group_name": "admins",
      "permission_level": "CAN_MANAGE"
    }
  ]
}'
  • Ersetzen Sie <job-id> durch den eindeutigen Bezeichner des Auftrags. Um die Auftrags-ID zu finden, klicken Sie in der Seitenleiste auf Workflows, und klicken Sie dann auf den Auftragsnamen. Die Auftrags-ID befindet sich im Seitenbereich Auftragsdetails.
  • Ersetzen Sie <application-id> durch Application (client) ID für die Microsoft Entra-ID-Anwendungsregistrierung.

Der Auftrag benötigt zudem Leseberechtigungen für das Notebook. Verwenden Sie die Databricks CLI, um den folgenden Befehl auszuführen, um die erforderlichen Berechtigungen zu erteilen:

databricks permissions set notebooks <notebook-id> --json '{
  "access_control_list": [
    {
      "service_principal_name": "<application-id>",
      "permission_level": "CAN_READ"
    }
  ]
}'
  • Ersetzen Sie <notebook-id> durch die ID des Notebooks, das dem Auftrag zugeordnet ist. Navigieren Sie zum Ermitteln der ID im Azure Databricks-Arbeitsbereich zu dem Notebook, und suchen Sie nach der numerischen ID, die in der URL des Notebooks nach notebook/ angegeben ist.
  • Ersetzen Sie <application-id> durch Application (client) ID für die Microsoft Entra-ID-Anwendungsregistrierung.

Testen des Auftrags

Aufträge werden mit einem Dienstprinzipal auf die gleiche Weise ausgeführt wie als Benutzer – also entweder über die Benutzeroberfläche, per API oder über die CLI. So testen Sie den Auftrag mithilfe der Azure Databricks-Benutzeroberfläche:

  1. Navigieren Sie auf der Azure Databricks-Benutzeroberfläche zu Workflows, und wählen Sie den Auftrag aus.
  2. Klicken Sie auf Jetzt ausführen.

Wenn alles ordnungsgemäß funktioniert, wird der Status Erfolgreich für den Auftrag angezeigt. Sie können den Auftrag auf der Benutzeroberfläche auswählen, um die Ausgabe zu überprüfen:

Auftragsausgabe

Weitere Informationen

Weitere Informationen zum Erstellen und Ausführen von Aufträgen finden Sie unter Erstellen und Ausführen von Azure Databricks-Aufträgen.