Gestion des secrets
De nombreux workflows nécessitent des informations sensibles telles que des identifiants, des clés API et des jetons. Plutôt que de saisir ces valeurs directement dans des notebooks ou de les stocker en texte brut, vous pouvez les stocker en toute sécurité à l'aide des secrets Databricks et les référencer dans vos notebooks et jobs. Cette approche renforce la sécurité et simplifie la gestion des identifiants. Cette page fournit une vue d'ensemble des secrets Databricks.
Databricks recommande d'utiliser Unity Catalog pour configurer l'accès aux données dans le stockage cloud. Voir Se connecter au stockage d'objets cloud à l'aide de Unity Catalog.
Pour stocker et gouverner des secrets en tant qu'objets sécurisables Unity Catalog à l'aide de l'espace de noms à trois niveaux, consultez Secrets dans Unity Catalog.
Présentation des secrets
Pour configurer et utiliser les secrets, vous :
- Créer un Secret Scope. Un Secret Scope est une collection de secrets identifiés par un nom.
- Ajouter des secrets au scope
- Attribuez des autorisations sur le Secret Scope.
- Référencer les secrets dans votre code.
Pour un exemple de bout en bout sur l'utilisation des secrets dans vos workflows, consultez Tutoriel : Créer et utiliser un secret Databricks. Pour utiliser un secret dans une propriété de configuration Spark ou une variable d'environnement, consultez Utiliser un secret dans une propriété de configuration Spark ou une variable d'environnement.
Les administrateurs de Workspace, les créateurs de secrets et les utilisateurs ayant reçu l'autorisation peuvent accéder et lire les secrets Databricks. Bien que Databricks tente de masquer les valeurs secrètes dans les sorties de notebook, il n'est pas possible d'empêcher entièrement ces utilisateurs de visualiser le contenu secret. Attribuez toujours les permissions d'accès aux secrets avec soin pour protéger les informations sensibles.
Gérer les Secret Scope
Un Secret Scope est une collection de secrets identifiés par un nom. Databricks recommande d'aligner les périmètres secrets sur les rôles ou les applications plutôt que sur des individus.
Les Secret Scopes sont stockés dans une base de données chiffrée détenue et gérée par Databricks.
Après avoir créé un Secret Scope, vous pouvez attribuer des autorisations pour accorder aux utilisateurs l'accès en lecture, écriture et gestion des Secret Scopes.
Créer un Secret Scope
Cette section explique comment créer un Secret Scope à l'aide de l'Databricks CLI (version 0.205 et ultérieures) ou de l'interface utilisateur du Workspace Databricks. Vous pouvez également utiliser l’ API Secrets.
Noms des Secret Scope :
- Doit être unique dans un Workspace.
- Doit être composé de caractères alphanumériques, de tirets, de traits de soulignement, de
@et de points, et ne peut pas dépasser 128 caractères. - Ne sont pas sensibles à la casse.
Les noms des Secret Scope sont considérés comme non sensibles et sont lisibles par tous les utilisateurs dans le Workspace.
- Databricks CLI
- Databricks workspace UI
Pour créer une étendue à l'aide de la CLI Databricks :
databricks secrets create-scope <scope-name>
By default, les scopes sont créés avec l’autorisation MANAGE pour l’utilisateur qui a créé le scope. Une fois que vous avez créé un Secret Scope pris en charge par Databricks, vous pouvez y ajouter des secrets.
-
Accédez à
https://<databricks-instance>#secrets/createScope. Remplacez<databricks-instance>par l'URL du Workspace de votre déploiement Databricks. Cette URL est sensible à la casse. Par exemple,scopedanscreateScopedoit utiliser une majusculeS). -
Saisissez le nom du Secret Scope. Les noms de Secret Scope ne sont pas sensibles à la casse.
-
Dans Manage Principal , sélectionnez Creator ou All workspace users pour spécifier quels utilisateurs disposent de l'autorisation MANAGE sur le Secret Scope du Workspace.
L'autorisation MANAGE permet aux utilisateurs de lire, d'écrire et d'accorder des autorisations sur l'étendue. Votre compte doit avoir le plan Premium ou supérieur pour choisir Créateur .
-
Cliquez sur Créer .
-
Utilisez la commande
databricks secrets list-scopesde la CLI Databricks pour vérifier que l'étendue a bien été créée.
Lister les Secret Scope
Pour lister les étendues existantes dans un workspace à l'aide de la CLI :
databricks secrets list-scopes
Vous pouvez également lister les périmètres secrets à l'aide de l'API Secrets.
Supprimer un Secret Scope
La suppression d'un Secret Scope supprime tous les secrets et les listes de contrôle d'accès (ACL) appliqués au périmètre. Pour supprimer un périmètre à l'aide de la CLI, exécutez la commande suivante :
databricks secrets delete-scope <scope-name>
Vous pouvez également supprimer un Secret Scope à l’aide de l’ API Secrets.
Gérer les secrets
Un secret est une paire clé-valeur qui stocke des informations sensibles à l'aide d'un nom de clé unique au sein d'un Secret Scope.
Cette section décrit comment créer un secret scope à l'aide de la CLI Databricks (version 0.205 et supérieure). Vous pouvez également utiliser l'API Secrets. Les noms de secrets ne sont pas sensibles à la casse.
Créer un secret
Cette section explique comment créer un secret à l'aide de l'interface de ligne de commande Databricks (version 0,205 et ultérieure) ou dans un Notebook à l'aide du SDK Databricks pour Python. Vous pouvez également utiliser l'API Secrets. Les noms de secrets ne sont pas sensibles à la casse.
- Databricks CLI
- Databricks SDK for Python
Lorsque vous créez un secret dans un périmètre sécurisé par Databricks, vous pouvez spécifier la valeur du secret de l'une des trois manières suivantes :
- Spécifiez la valeur comme une chaîne à l'aide de l'indicateur --string-value.
- Saisissez le secret lorsque vous y êtes invité de manière interactive (secrets sur une seule ligne).
- Transmettez le secret à l'aide de l'entrée standard (secrets multilignes).
Par exemple :
databricks secrets put-secret --json '{
"scope": "<scope-name>",
"key": "<key-name>",
"string_value": "<secret>"
}'
Si vous créez un secret multiligne, vous pouvez transmettre le secret à l'aide de l'entrée standard. Par exemple :
(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <scope-name> <key-name>
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.secrets.put_secret("<secret_scope>","<key-name>",string_value ="<secret>")
Lire un secret
Cette section explique comment lire un secret à l'aide de la CLI Databricks (version 0.205 et supérieure) ou dans un Notebook à l'aide de l'utilitaire Secrets (dbutils.secrets).
- Databricks CLI
- Secrets utility (dbutils.secrets)
Afin de lire la valeur d'un secret à l'aide de la CLI Databricks, vous devez décoder la valeur encodée en base64. Vous pouvez utiliser jq pour extraire la valeur et base --decode pour le décoder :
databricks secrets get-secret <scope-name> <key-name> | jq -r .value | base64 --decode
password = dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
Lister les secrets
Pour lister les secrets dans un périmètre donné :
databricks secrets list-secrets <scope-name>
La réponse affiche les informations de métadonnées sur les secrets, telles que les noms de clés des secrets. Vous utilisez l'utilitaire Secrets (dbutils.secrets) dans un notebook ou un job pour répertorier ces métadonnées. Par exemple :
dbutils.secrets.list('my-scope')
Supprimer un secret
Pour supprimer un secret d’un périmètre avec la CLI Databricks :
databricks secrets delete-secret <scope-name> <key-name>
Vous pouvez également utiliser l’ API Secrets.
Gérer les autorisations du Secret Scope
Par default, l'utilisateur qui crée les Secret Scope se voit accorder la permission MANAGE. Cela permet au créateur de périmètre de lire les secrets dans le périmètre, d'écrire des secrets dans le périmètre et de gérer les autorisations sur le périmètre.
Cette section décrit comment gérer le contrôle d'accès aux secrets à l'aide de la CLI Databricks (version 0.205 et supérieure). Vous pouvez également utiliser l'API Secrets. Pour les niveaux d'autorisation des secrets, consultez les ACLs des secrets.
Accorder des autorisations à un utilisateur sur un Secret Scope
Pour accorder à un utilisateur des autorisations sur un Secret Scope à l'aide de la CLI Databricks :
databricks secrets put-acl <scope-name> <principal> <permission>
L'exécution d'une requête PUT pour un principal qui dispose déjà d'une autorisation appliquée écrase le niveau d'autorisation existant.
Le champ principal spécifie un principal Databricks existant. Un utilisateur est spécifié en utilisant son adresse e-mail, un service principal en utilisant sa valeur applicationId, et un groupe en utilisant son nom de groupe. Pour plus d'informations, consultez Principal.
Afficher les autorisations de Secret Scope
Pour afficher toutes les permissions de Secret Scope pour un Secret Scope donné :
databricks secrets list-acls <scope-name>
Pour obtenir les autorisations de Secret Scope appliquées à un principal pour un Secret Scope donné :
databricks secrets get-acl <scope-name> <principal>
Si aucune ACL n'existe pour le principal et l'étendue donnés, cette requête échoue.
Supprimer une autorisation de Secret Scope
Pour supprimer une autorisation de Secret Scope appliquée à un principal pour un Secret Scope donné :
databricks secrets delete-acl <scope-name> <principal>
Rédaction de secrets
Le stockage des informations d'identification sous forme de secrets Databricks facilite la protection de vos informations d'identification lorsque vous exécutez des Notebooks et des Jobs. Cependant, il est facile d'imprimer accidentellement un secret dans les tampons de sortie standard ou d'afficher la valeur lors de l'affectation de variable.
Pour éviter cela, **Databricks** masque toutes les valeurs secrètes qui sont lues à l’aide de dbutils.secrets.get() et référencées dans une propriété de configuration **Spark**. Lorsqu’elles sont affichées, les valeurs secrètes sont remplacées par [REDACTED].
Par exemple, si vous définissez une variable sur une valeur secrète à l'aide de dbutils.secrets.get() et que vous affichez ensuite cette variable, celle-ci est remplacée par [REDACTED].
La rédaction s’applique uniquement aux valeurs secrètes littérales. La fonctionnalité de rédaction des secrets n’empêche pas les transformations délibérées et arbitraires d’un secret littéral. Pour assurer le contrôle approprié des secrets, vous devriez utiliser des listes de contrôle d'accès afin de limiter les autorisations pour exécuter des commandes. Cela empêche l’accès non autorisé aux contextes de Notebook partagés.
Rédaction de secrets dans SQL
Databricks tente de masquer toutes les commandes SQL DQL (Data Query Language) qui invoquent la fonction secrète, y compris les vues référencées et les fonctions définies par l'utilisateur. Lorsque la fonction secret est utilisée, la sortie est remplacée par [REDACTED] dans la mesure du possible. Comme la rédaction de notebook, cela s'applique uniquement aux valeurs littérales, et non aux secrets transformés ou indirectement référencés.
Pour les commandes SQL DML (Data Manipulation Language), Databricks autorise les recherches de secrets si le secret est considéré comme sûr — par exemple, lorsqu'il est encapsulé dans une fonction cryptographique telle que sha() ou aes_encrypt(), qui empêchent le stockage non chiffré des valeurs brutes.
Validation des secrets dans SQL
Databricks applique également une validation pour bloquer les commandes SQL DML qui pourraient entraîner l'enregistrement de secrets non chiffrés dans les tables. L'analyseur de query tente d'identifier et de prévenir ces scénarios, ce qui permet d'éviter le stockage accidentel d'informations sensibles en clair.