Partage via


Secrets

Un secret est une paire clé-valeur qui stocke le matériel secret, avec un nom de clé unique au sein d’une étendue secrète. Chaque étendue est limitée à 1000 secrets. La taille maximale autorisée pour la valeur du secret est de 128 ko.

Consultez également l’API Secrets.

Créer un secret

Les noms de secrets ne respectent pas la casse.

La méthode de création d'un secret dépend de l'utilisation d'une portée adossée à Azure Key Vault ou d'une portée adossée à Databricks.

Créer un secret dans une étendue Azure Key Vault

Pour créer un secret dans Azure Key Vault, vous utilisez l’API REST Définir le secret Azure ou l’interface utilisateur du portail Azure.

Azure Key Vault

Créer un secret dans une étendue Databricks

Pour créer un secret dans une portée soutenue par Databricks en utilisant la CLI de Databricks (version 0.205 et supérieure) :

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

Si vous créez un secret sur plusieurs lignes, vous pouvez transmettre le secret à l’aide d’une entrée standard. Par exemple :

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

Vous pouvez également fournir un secret à partir d’un fichier. Pour plus d'informations sur l'écriture de secrets, consultez Qu'est-ce que la Databricks CLI ?.

List secrets (Afficher la liste des secrets)

Pour répertorier les secrets dans une étendue donnée :

databricks secrets list-secrets <scope-name>

La réponse affiche des métadonnées sur les secrets, notamment les noms de clés des secrets. Vous utilisez l’utilitaire de secrets (dbutils.secrets) dans un notebook ou un travail pour répertorier cette métadonnée. Par exemple :

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

lire un secret

Vous créez des secrets à l'aide de l'API REST ou du CLI, mais vous devez utiliser l'utilitaire Secrets (dbutils.secrets) dans un notebook ou un job pour lire un secret.

supprimer un secret

Pour supprimer un secret d’une étendue avec l’interface de ligne de commande Databricks :

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

Vous pouvez également utiliser l’API Secrets.

Pour supprimer un secret d'une portée soutenue par Azure Key Vault, utilisez l'API REST Azure SetSecret ou l'interface utilisateur du portail Azure.

Utiliser un secret dans une propriété de configuration Spark ou une variable d’environnement

Important

Cette fonctionnalité est disponible en préversion publique.

Notes

Disponible en support étendu Databricks Runtime 6.4 et versions ultérieures.

Vous pouvez référencer un secret dans une propriété de configuration Spark ou une variable d’environnement. Les secrets récupérés sont expurgés de la sortie du bloc-notes et des journaux du pilote et de l'exécuteur Spark.

Important

Gardez à l’esprit les implications de sécurité suivantes lorsque vous référencez des secrets dans une propriété de configuration Spark ou une variable d’environnement :

  • Si le contrôle d’accès à la table n’est pas activé sur un cluster, tout utilisateur disposant d’autorisations d’attachement à un cluster ou d’exécuter des autorisations sur un ordinateur portable peut lire les propriétés de configuration Spark à partir du bloc-notes. Cela comprend les utilisateurs qui n’ont pas d’autorisation directe pour lire une clé secrète. Databricks recommande l’activation du contrôle d’accès aux tables sur tous les clusters ou la gestion de l’accès aux secrets à l’aide d' étendues secrètes.

  • Même lorsque le contrôle d’accès aux tables est activé, les utilisateurs disposant de l’autorisation de joindre des autorisations sur un cluster ou d’exécuter des autorisations sur un Notebook peuvent lire les variables d’environnement du cluster à partir du bloc-notes. Databricks ne recommande pas de stocker les secrets dans les variables d’environnement de cluster s’ils ne doivent pas être disponibles pour tous les utilisateurs sur le cluster.

  • Les secrets ne sont pas expurgés du journal stdout et des flux stderr du pilote Spark. Pour protéger des données sensibles, les journaux de pilote Spark sont affichables par défaut uniquement par des utilisateurs ayant une autorisation PEUT GÉRER sur un travail, un mode d’accès utilisateur unique et des clusters en mode d’accès partagé. Pour autoriser des utilisateurs avec l’autorisation PEUT ATTACHER À ou PEUT REDÉMARRER à afficher les journaux sur ces clusters, définissez la propriété de configuration Spark suivante dans la configuration de cluster : spark.databricks.acl.needAdminPermissionToViewLogs false.

    Sur des clusters en mode d’accès Aucune isolation partagée, les utilisateurs peuvent afficher des journaux de pilote Spark avec l’autorisation PEUT ATTACHER À ou PEUT GÉRER. Pour limiter les utilisateurs qui peuvent lire les journaux aux seuls utilisateurs avec l’autorisation PEUT GÉRER, définissez spark.databricks.acl.needAdminPermissionToViewLogs sur true.

Exigences et limitations

Les exigences et limitations suivantes s’appliquent au référencement des secrets dans les propriétés de configuration Spark et les variables d’environnement :

  • Les propriétaires du cluster doivent disposer de l’autorisation de CAN READ (autorisation de lecture) sur l’étendue du secret.
  • Seuls les propriétaires de cluster peuvent ajouter une référence à un secret dans une propriété de configuration Spark ou une variable d’environnement et modifier l’étendue et le nom existants. Les propriétaires modifient un secret à l’aide de l’API Secrets. Vous devez redémarrer votre cluster pour récupérer à nouveau le secret.
  • Les utilisateurs qui disposent du droit CAN MANAGE (autorisation de gestion) sur le cluster peuvent supprimer une propriété de configuration ou une variable d’environnement secrète de Spark.

Syntaxe pour référencer des secrets dans une propriété de configuration Spark ou une variable d’environnement

Vous pouvez faire référence à un secret à l’aide d’un nom de variable valide ou d’une propriété de configuration Spark. Azure Databricks permet un comportement spécial pour les variables faisant référence à des secrets en fonction de la syntaxe de la valeur définie, et non du nom de la variable.

La syntaxe de la valeur de la propriété de configuration Spark ou de la variable d’environnement doit être {{secrets/<scope-name>/<secret-name>}}. La valeur doit commencer par {{secrets/ et se terminer par }}.

Les parties variables de la propriété de configuration Spark ou de la variable d’environnement sont les suivantes :

  • <scope-name>: Nom de l’étendue à laquelle le secret est associé.
  • <secret-name>: Nom unique du secret dans l’étendue.

Par exemple : {{secrets/scope1/key1}}.

Notes

  • Il ne doit y avoir aucun espace entre les accolades. S’il y a des espaces, ils sont traités dans le cadre de l’étendue ou du nom de la clé secrète.

Référencer un secret avec une propriété de configuration Spark

Vous spécifiez une référence à un secret dans une propriété de configuration Spark au format suivant :

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

Toute <property-name> de configuration Spark peut référencer un secret. Chaque propriété de configuration Spark ne peut référencer qu’un seul secret, mais vous pouvez configurer plusieurs propriétés Spark pour référencer des secrets.

Par exemple :

Vous définissez une configuration Spark pour référencer un secret :

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

Pour extraire le secret dans le bloc-notes et l’utiliser :

Python

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

SQL

SELECT ${spark.password};

Référencer un secret dans une variable d'environnement

Vous spécifiez un chemin d’accès de secret dans une variable d’environnement au format suivant :

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

Vous pouvez utiliser n’importe quel nom de variable valide lorsque vous référencez un secret. L’accès aux secrets référencés dans les variables d’environnement est déterminé par les autorisations de l’utilisateur qui a configuré le cluster. Les secrets stockés dans les variables d’environnement sont accessibles par tous les utilisateurs du cluster, mais ils sont supprimés de l’affichage en texte clair, comme les secrets référencés ailleurs.

Les variables d’environnement qui référencent des secrets sont accessibles à partir d’un script init étendu au cluster. Voir Définir et utiliser des variables d'environnement avec des scripts d'initialisation.

Par exemple :

Vous définissez une variable d’environnement pour référencer un secrets :

SPARKPASSWORD={{secrets/scope1/key1}}

Pour extraire le secret dans un script init, accédez $SPARKPASSWORD à l’aide du modèle suivant :

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

Gérer les autorisations des secrets

Cette section explique comment gérer le contrôle d’accès aux secrets à l’aide de Qu’est-ce que l’interface CLI Databricks ? (version 0.205 et versions ultérieures). Vous pouvez également utiliser les API Secrets ou le fournisseur Databricks Terraform. Pour les niveaux d’autorisation des secrets, consultez Listes de contrôle d’accès (ACL) secrètes

Créer une liste de contrôle d’accès aux secrets

Pour créer une liste de contrôle d’accès aux secrets pour une étendue de secrets donnée à l’aide de l’interface CLI Databricks (héritée)

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

Le fait de faire une demande pour un principal qui a déjà une autorisation appliquée remplace le niveau d’autorisation existant.

Le champ principal spécifie un principal Azure Databricks existant. Un utilisateur est spécifié à l’aide de son adresse e-mail, un principal de service à l’aide de sa valeur applicationId et un groupe à l’aide de son nom de groupe.

Afficher les listes de contrôle d’accès aux secrets

Pour afficher toutes les listes de contrôle d’accès aux secrets pour une étendue secrète donnée :

databricks secrets list-acls <scope-name>

Pour obtenir la liste de contrôle d’accès aux secrets appliquée à un principal pour une étendue secrète donnée :

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

Si aucune liste de contrôle d’accès n’existe pour le principal et l’étendue donnés, cette demande échoue.

Supprimer une liste de contrôle d’accès aux secrets

Pour supprimer la liste de contrôle d’accès aux secrets appliquée à un principal pour une étendue secrète donnée :

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