Geheimnisse

Ein Geheimnis ist ein Schlüssel-Wert-Paar, in dem geheime Informationen gespeichert sind, mit einem Schlüsselnamen, der innerhalb eines Bereichs für Geheimnisse eindeutig ist. Jeder Bereich ist auf 1.000 Geheimnisse beschränkt. Die maximal zulässige Geheimniswertgröße ist 128 KB.

Weitere Informationen finden Sie in der Geheimnisse-API.

Erstellen eines Geheimnisses

Bei Namen von Geheimnissen wird Groß- und Kleinschreibung beachtet.

Die Methode zum Erstellen eines Geheimnisses hängt davon ab, ob Sie einen durch Azure Key Vault oder Databricks unterstützten Bereich verwenden.

Erstellen eines Geheimnisses in einem von Azure Key Vault unterstützten Bereich

Ein Geheimnis in Azure Key Vault kann mithilfe der Azure-REST-API Set Secret oder über die Benutzeroberfläche des Azure-Portals erstellt werden.

Azure Key Vault

Erstellen eines Geheimnisses in einem von Databricks unterstützten Bereich

So erstellen Sie ein Geheimnis in einem von Databricks unterstützten Bereich mithilfe der Databricks CLI (ab Version 0.205)

databricks secrets put-secret --json '{
  "scope": "<scope-name>",
  "key": "<key-name>",
  "string_value": "<secret>"
}'

Wenn Sie ein mehrzeiliges Geheimnis erstellen, können Sie das Geheimnis mithilfe von Standardeingaben übergeben. Beispiel:

(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <secret_scope> <secret_key>

Sie können ein Geheimnis auch aus einer Datei bereitstellen. Weitere Informationen zum Schreiben von Geheimnissen finden Sie unter Was ist die Databricks CLI?.

Auflisten geheimer Schlüssel

So listen Sie Geheimnisse in einem bestimmten Bereich auf

databricks secrets list-secrets <scope-name>

Die Antwort zeigt Metadateninformationen zu den Geheimnissen an, z. B. die Schlüsselnamen der Geheimnisse. Mit dem Hilfsprogramm für Geheimnisse (dbutils.secrets) können Sie diese Metadaten in einem Notebook oder Auftrag auflisten. Beispiel:

dbutils.secrets.list('my-scope')

Lesen eines Geheimnisses

Sie erstellen Geheimnisse mithilfe der REST-API oder CLI, müssen aber in einem Notebook oder Auftrag das Hilfsprogramm für Geheimnisse (dbutils.secrets) verwenden, um ein Geheimnis zu lesen.

Löschen eines Geheimnisses

So löschen Sie ein Geheimnis aus einem Bereich mit der Databricks CLI:

databricks secrets delete-secret <scope-name> <key-name>

Sie können auch die Geheimnisse-API verwenden.

Um ein Geheimnis aus einem von Azure Key Vault unterstützten Bereich zu löschen, verwenden Sie die Azure-REST-API SetSecret oder die Benutzeroberfläche des Azure-Portals.

Verwenden eines Geheimnisses in einer Spark-Konfigurationseigenschaft oder -Umgebungsvariable

Wichtig

Dieses Feature befindet sich in der Public Preview.

Hinweis

Verfügbar ab Databricks Runtime 6.4 Extended Support.

Sie können auf ein Geheimnis in einer Spark-Konfigurationseigenschaft oder -Umgebungsvariable verweisen. Die abgerufenen Geheimnisse werden in der Ausgabe des Notebooks und in den Protokollen von Spark-Treiber und -Executor unkenntlich gemacht.

Wichtig

Beachten Sie die folgenden Sicherheitsaspekte, wenn Sie auf Geheimnisse in einer Spark-Konfigurationseigenschaft oder -Umgebungsvariablen verweisen:

  • Wenn die Tabellenzugriffssteuerung in einem Cluster nicht aktiviert ist, kann jeder Benutzer mit der Berechtigung „Anfügen an“ für einen Cluster oder der Berechtigung „Ausführen“ für ein Notebook die Eigenschaften der Spark-Konfiguration im Notebook lesen. Dies schließt Benutzer ein, die über keine direkte Berechtigung zum Lesen eines Geheimnisses verfügen. Databricks empfiehlt das Aktivieren der Tabellenzugriffssteuerung in allen Clustern oder das Verwalten des Zugriffs auf Geheimnisse über Bereiche für Geheimnisse.

  • Auch wenn die Tabellenzugriffssteuerung aktiviert ist, können Benutzer mit der Berechtigung „Anfügen an“ für einen Cluster oder der Berechtigung „Ausführen“ für ein Notebook die Umgebungsvariablen des Clusters im Notebook lesen. Databricks rät davon ab, Geheimnisse in Clusterumgebungsvariablen zu speichern, sofern sie nicht allen Benutzern des Clusters zur Verfügung stehen sollen.

  • Geheimnisse im Spark-Treiberprotokoll stdout und in stderr-Streams werden nicht unkenntlich gemacht. Um vertrauliche Daten zu schützen, können Spark-Treiberprotokolle standardmäßig nur von Benutzern mit Berechtigung KANN VERWALTEN für Auftrag, Einzelbenutzerzugriffsmodus und Cluster des freigegebenen Zugriffsmodus angezeigt werden. Um Benutzern mit Berechtigung KANN ANFÜGEN AN oder KANN NEU STARTEN das Anzeigen der Protokolle in diesen Clustern zu ermöglichen, legen Sie die folgende Spark-Konfigurationseigenschaft in der Clusterkonfiguration fest: spark.databricks.acl.needAdminPermissionToViewLogs false.

    Auf Clustern des freigegebenen Isolationsmodus können die Spark-Treiberprotokolle von Benutzern mit den Berechtigungen KANN ANFÜGEN AN oder KANN VERWALTEN angezeigt werden. Um die Benutzer, welche die Protokolle lesen können, auf Benutzer mit der Berechtigung KANN VERWALTEN zu beschränken, setzen Sie spark.databricks.acl.needAdminPermissionToViewLogs auf true.

Voraussetzungen und Einschränkungen

Die folgenden Anforderungen und Einschränkungen gelten für das Verweisen auf Geheimnisse in Spark-Konfigurationseigenschaften und -Umgebungsvariablen:

  • Clusterbesitzer und -besitzerinnen benötigen die Berechtigung KANN LESEN für den Geheimnisbereich.
  • Nur Clusterbesitzer können einen Verweis zu einem Geheimnis in einer Spark-Konfigurationseigenschaft oder -Umgebungsvariablen hinzufügen und den vorhandenen Bereich und Namen bearbeiten. Besitzer ändern ein Geheimnis mithilfe der Geheimnisse-API. Sie müssen Ihren Cluster neu starten, um das Geheimnis erneut abrufen zu können.
  • Benutzer und Benutzerinnen mit der Berechtigung KANN VERWALTEN für den Cluster können eine Spark-Konfigurationseigenschaft oder -Umgebungsvariable für ein Geheimnis löschen.

Syntax zum Verweisen auf Geheimnisse in einer Spark-Konfigurationseigenschaft oder -Umgebungsvariable

Sie können mit jedem gültigen Variablennamen oder jeder Spark-Konfigurationseigenschaft auf ein Geheimnis verweisen. Azure Databricks ermöglicht ein spezielles Verhalten für Variablen, die auf Geheimnisse verweisen, basierend auf der Syntax des Werts, der festgelegt wird, und nicht auf dem Variablennamen.

Die Syntax der Spark-Konfigurationseigenschaft oder des Werts der Umgebungsvariablen muss {{secrets/<scope-name>/<secret-name>}} lauten. Der Wert muss mit {{secrets/ beginnen und mit }} enden.

Die variablen Teile der Spark-Konfigurationseigenschaft oder -Umgebungsvariablen sind wie folgt:

  • <scope-name>: der Name des Bereichs, dem das Geheimnis zugeordnet ist.
  • <secret-name>: der eindeutige Name des Geheimnisses im Bereich.

Beispiel: {{secrets/scope1/key1}}.

Hinweis

  • Zwischen den geschweiften Klammern dürfen sich keine Leerzeichen befinden. Wenn Leerzeichen vorhanden sind, werden sie als Teil des Bereichs- oder Geheimnisnamens behandelt.

Verweisen auf ein Geheimnis mit einer Spark-Konfigurationseigenschaft

Sie geben einen Verweis auf ein Geheimnis in einer Spark-Konfigurationseigenschaft im folgenden Format an:

spark.<property-name> {{secrets/<scope-name>/<secret-name>}}

Jeder <property-name> einer Spark-Konfiguration kann auf ein Geheimnis verweisen. Jede Spark-Konfigurationseigenschaft kann nur auf ein Geheimnis verweisen, aber Sie können mehrere Spark-Eigenschaften so konfigurieren, dass sie auf Geheimnisse verweisen.

Zum Beispiel:

Sie legen eine Spark-Konfiguration fest, die auf ein Geheimnis verweist:

spark.password {{secrets/scope1/key1}}

So wird das Geheimnis im Notebook abgerufen und verwendet

Python

spark.conf.get("spark.password")

SQL

SELECT ${spark.password};

Verweisen auf ein Geheimnis in einer Umgebungsvariablen

Sie geben einen Geheimnispfad in einer Umgebungsvariablen im folgenden Format an:

<variable-name>={{secrets/<scope-name>/<secret-name>}}

Sie können einen beliebigen gültigen Variablennamen verwenden, wenn Sie auf ein Geheimnis verweisen. Der Zugriff auf Geheimnisse, auf die in Umgebungsvariablen verwiesen wird, wird durch die Berechtigungen des Benutzers oder der Benutzerin bestimmt, der oder die den Cluster konfiguriert hat. Geheimnisse, die in Umgebungsvariablen gespeichert sind, sind für alle Benutzer des Clusters zugänglich, werden jedoch genauso aus der Klartextanzeige ausgeklammert wie Geheimnisse, auf die an anderer Stelle verwiesen wird.

Umgebungsvariablen, die auf Geheimnisse verweisen, sind von einem clusterspezifischen Initiierungsskript aus zugänglich. Weitere Informationen finden Sie unter Festlegen und Verwenden von Umgebungsvariablen mit Initskripts.

Zum Beispiel:

Sie legen eine Umgebungsvariable so fest, dass sie auf ein Geheimnis verweist:

SPARKPASSWORD={{secrets/scope1/key1}}

Greifen Sie mit dem folgenden Muster auf $SPARKPASSWORD zu, um das Geheimnis in einem Initialisierungsskript abzurufen:

if [ -n "$SPARKPASSWORD" ]; then
  # code to use ${SPARKPASSWORD}
fi

Verwalten von Berechtigungen für Geheimnisse

In diesem Abschnitt wird beschrieben, wie Sie die Zugriffssteuerung für Geheimnisse mithilfe der Databricks-CLI (ab Version 0.205) verwalten. Sie können auch die Secrets-API oder den Databricks-Terraform-Provider verwenden. Weitere Informationen zu Berechtigungsstufen für Geheimnisse finden Sie unter Zugriffssteuerungslisten für Geheimnisse.

Erstellen einer ACL für Geheimnisse

So erstellen Sie mithilfe der Databricks CLI (Legacy) eine ACL für Geheimnisse für einen bestimmten Geheimnisbereich

databricks secrets put-acl <scope-name> <principal> <permission>

Wenn Sie eine PUT-Anforderung für einen Prinzipal stellen, der bereits eine geltende Berechtigung hat, wird die vorhandene Berechtigungsebene überschrieben.

Das Feld principal gibt einen vorhandenen Azure Databricks-Prinzipal an. Ein/e Benutzer*in wird mit seiner E-Mail-Adresse, ein Dienstprinzipal mit seinem applicationId-Wert und eine Gruppe mit ihrem Gruppennamen angegeben.

Anzeigen von ACLs für Geheimnisse

So zeigen Sie alle ACLs für Geheimnisse für einen bestimmten Bereich für Geheimnisse an

databricks secrets list-acls <scope-name>

So rufen Sie die ACL für Geheimnisse auf, die für einen Prinzipal für einen bestimmten Bereich für Geheimnisse gilt

databricks secrets get-acl <scope-name> <principal>

Wenn keine ACL für den angegebenen Prinzipal und Bereich vorhanden ist, schlägt diese Anforderung fehl.

Löschen einer ACL für Geheimnisse

So löschen Sie eine ACL für Geheimnisse, die für einen Prinzipal für einen bestimmten Bereich für Geheimnisse gilt:

databricks secrets delete-acl <scope-name> <principal>