Aller au contenu principal

Se connecter à Azure Data Lake Storage et au stockage Blob

attention

Cet article décrit un modèle hérité pour l'accès à Azure Data Lake Storage (ADLS) et Blob Storage à partir d'un Workspace Databricks non-Azure qui contourne la gouvernance d'Unity Catalog. Utilisez-le uniquement si la gouvernance de Unity Catalog n'est pas requise pour les données de ce compte de stockage.

Cet article explique comment se connecter à Azure Data Lake Storage et à Blob Storage à partir de Databricks.

remarque

Le Driver Windows Azure Blob Storage (WASB) hérité a été déprécié. ABFS présente de nombreux avantages par rapport à WASB. Voir la documentation Azure sur ABFS. Pour la documentation sur l'utilisation du Driver WASB hérité, voir Se connecter à Azure Blob Storage avec WASB (hérité).

Étape 1 : Enregistrer une application Microsoft Entra ID

L’enregistrement d’une application auprès de Microsoft Entra ID crée un service principal que vous pouvez utiliser pour fournir l’accès aux comptes de stockage Azure.

Pour enregistrer une application Microsoft Entra ID, vous devez avoir le rôle Application Administrator ou l'autorisation Application.ReadWrite.All dans Microsoft Entra ID.

  1. Dans le portail Azure, accédez au service **Microsoft Entra ID**.
  2. Sous **Gérer**, cliquez sur **Enregistrements d'applications**.
  3. Cliquez sur + Nouvelle inscription . Saisissez un nom pour l'application et cliquez sur S'inscrire .
  4. Cliquez sur Certificats et secrets .
  5. Cliquez sur + Nouveau secret client .
  6. Ajoutez une description pour le secret et cliquez sur Ajouter .
  7. Copiez et enregistrez la valeur du nouveau secret.
  8. Dans la vue d'ensemble de l'enregistrement de l'application, copiez et enregistrez l'**ID d'application (client)** et l'**ID de répertoire (tenant)**.

Étape 2 : Attribuer des rôles au Service Principal

Vous contrôlez l'accès aux ressources de stockage en attribuant des rôles à un enregistrement d'application Microsoft Entra ID associé au compte de stockage. Vous pourriez avoir besoin d'attribuer d'autres rôles en fonction de vos besoins spécifiques.

Pour attribuer des rôles sur un compte de stockage, vous devez disposer du rôle Azure RBAC Propriétaire ou Administrateur de l'accès utilisateur sur le compte de stockage.

  1. Dans le portail Azure, accédez au service Comptes de stockage .
  2. Sélectionnez un compte de stockage Azure à utiliser avec cet enregistrement d'application.
  3. Cliquez sur Accès conditionnel (IAM) .
  4. Cliquez sur **+ Ajouter** et sélectionnez **Ajouter une attribution de rôle** dans le menu déroulant.
  5. Définissez le champ Sélectionner sur le nom de l'application Microsoft Entra ID et définissez Rôle sur Contributeur aux données de blob de stockage .
  6. Cliquez sur Enregistrer .

Étape 3 : Configurer les informations d'identification Azure dans Databricks

Configurez votre cluster Databricks ou votre Notebook avec les identifiants du compte de stockage Azure auquel vous souhaitez accéder.

Types d'identifiants pris en charge et stockage des secrets

Les identifiants suivants peuvent être utilisés pour accéder à Azure Data Lake Storage ou à Stockage Blob Azure :

  • **OAuth 2.0 avec un service principal Microsoft Entra ID** : Databricks recommande d'utiliser les services principaux Microsoft Entra ID pour se connecter à Azure Data Lake Storage. Pour créer un service principal Microsoft Entra ID et lui donner accès aux comptes de stockage Azure, suivez les étapes 1 et 2 ci-dessus.

    Pour créer un service principal Microsoft Entra ID, vous devez disposer du rôle Application Administrator ou de l'autorisation Application.ReadWrite.All dans Microsoft Entra ID. Pour attribuer des rôles sur un compte de stockage, vous devez être Propriétaire ou un utilisateur ayant le rôle Administrateur de l'accès utilisateur Azure RBAC sur le compte de stockage.

important

Le stockage Blob ne prend pas en charge les Service Principal Microsoft Entra ID.

  • Signatures d'accès partagé (SAS) : Vous pouvez utiliser des jetons SAS de stockage pour accéder au stockage Azure. Avec les SAS, vous pouvez restreindre l'accès à un compte de stockage à l'aide de jetons temporaires avec un contrôle d'accès à granularité fine.

    Vous ne pouvez accorder à un jeton SAS que les autorisations dont vous disposez vous-même sur le compte de stockage, le conteneur ou le fichier.

  • Clés de compte : Vous pouvez utiliser les clés d'accès au compte de stockage pour gérer l'accès au stockage Azure. Les clés d’accès au compte de stockage offrent un accès complet à la configuration d’un compte de stockage, ainsi qu’aux données. Databricks recommande d'utiliser un Service Principal Microsoft Entra ID ou un jeton SAS pour se connecter au stockage Azure au lieu de clés de compte.

    Pour afficher les clés d'accès d'un compte, vous devez avoir le rôle de Propriétaire, de Contributeur ou d'Opérateur de clés de compte de stockage sur le compte de stockage.

Databricks recommande d’utiliser des Secret Scopes pour stocker tous les identifiants. Vous pouvez accorder l’accès aux utilisateurs, aux Service Principal et aux groupes de votre Workspace pour lire le Secret Scope. Cela protège les identifiants Azure tout en permettant aux utilisateurs d'accéder au stockage Azure. Pour créer un Secret Scope, consultez Gérer les Secret Scope.

Définir les propriétés Spark pour configurer les identifiants Azure

Vous pouvez définir les propriétés Spark pour configurer les identifiants Azure afin d'accéder au stockage Azure. Les informations d'identification peuvent être limitées à un cluster ou à un notebook. Utilisez le contrôle d'accès aux clusters et le contrôle d'accès aux Notebook ensemble pour protéger l'accès au stockage Azure. Consultez les autorisations de compute et collaborer à l'aide de notebooks Databricks.

Pour définir les propriétés Spark, utilisez l'extrait de code suivant dans la configuration Spark d'un cluster ou dans un Notebook :

Utilisez le format suivant pour définir la configuration Spark du cluster :

ini
spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

Vous pouvez utiliser spark.conf.set dans les notebooks, comme dans l’exemple suivant :

Python
service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Remplacer

  • <secret-scope> avec le nom du Secret Scope Databricks.
  • <service-credential-key> avec le nom de la clé contenant le secret client.
  • <storage-account> avec le nom du compte de stockage Azure.
  • <application-id> avec le ID d’application (client) de l’application Microsoft Entra ID.
  • <directory-id> avec l'**ID de répertoire (tenant)** pour l'application Microsoft Entra ID.

Étape 4 : Accéder au stockage Azure

Une fois que vous avez correctement configuré les informations d'identification pour accéder à votre conteneur de stockage Azure, vous pouvez interagir avec les ressources du compte de stockage à l'aide d'URI. Databricks recommande d'utiliser le driver abfss pour une sécurité accrue.

Python
spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
SQL
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Exemple de Notebook

Notebook ADLS OAuth 2.0 avec les service principals Microsoft Entra ID (anciennement Azure Active Directory)

Problèmes connus d’Azure Data Lake Storage

Si vous tentez d’accéder à un conteneur de stockage créé via le portail Azure, vous pourriez recevoir l’erreur suivante :

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Lorsqu'un espace de noms hiérarchique est activé, vous n'avez pas besoin de créer de conteneurs via le portail Azure. Si vous rencontrez ce problème, supprimez le conteneur Blob via le portail Azure. Après quelques minutes, vous pouvez accéder au conteneur. Alternativement, vous pouvez modifier votre URI abfss pour utiliser un conteneur différent, à condition que ce conteneur ne soit pas créé via le portail Azure.

Consultez Problèmes connus avec Azure Data Lake Storage dans la documentation Microsoft.

Modèles dépréciés pour le stockage et l'accès aux données depuis Databricks

Les modèles de stockage suivants sont obsolètes :