Aller au contenu principal

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.

remarque

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 :

  1. Créer un Secret Scope. Un Secret Scope est une collection de secrets identifiés par un nom.
  2. Ajouter des secrets au scope
  3. Attribuez des autorisations sur le Secret Scope.
  4. 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.

attention

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.

Pour créer une étendue à l'aide de la CLI Databricks :

Bash
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.

Lister les Secret Scope

Pour lister les étendues existantes dans un workspace à l'aide de la CLI :

Bash
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 :

Bash
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.

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 :

Bash
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 :

Bash
(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <scope-name> <key-name>

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).

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 :

Bash
databricks secrets get-secret <scope-name> <key-name> | jq -r .value | base64 --decode

Lister les secrets

Pour lister les secrets dans un périmètre donné :

Bash
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 :

Bash
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 :

Bash
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é :

Bash
databricks secrets list-acls <scope-name>

Pour obtenir les autorisations de Secret Scope appliquées à un principal pour un Secret Scope donné :

Bash
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é :

Bash
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].

attention

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.