Se connecter à Azure Data Lake Storage Gen2 et au Stockage Blob

Cet article explique comment se connecter à Azure Data Lake Storage Gen2 et au Stockage Blob à partir d’Azure Databricks. Pour découvrir le FAQ Azure Data Lake Storage Gen2 et les problèmes connus, consultez FAQ sur Azure Data Lake Storage Gen2.

Databricks recommande l’utilisation d’emplacements externes Unity Catalog et d’identités managées Azure pour se connecter à Azure Data Lake Storage Gen2. Vous pouvez également définir des propriétés Spark pour configurer des informations d’identification Azure afin d’accéder au stockage Azure. Pour découvrir un tutoriel sur la connexion à Azure Data Lake Storage Gen2 avec un principal de service, consultez Tutoriel : Se connecter à Azure Data Lake Storage Gen2.

Notes

Se connecter à Azure Data Lake Storage Gen2 avec Unity Catalog

Notes

Azure Data Lake Storage Gen2 est le seul type de stockage Azure pris en charge par Unity Catalog.

Les Emplacements externes et les informations d’identification de stockage permettent à Unity Catalog de lire et d’écrire des données dans Azure Data Lake Storage Gen2 à la place des utilisateurs. Les administrateurs utilisent principalement des emplacements externes pour configurer des tables externes Unity Catalog.

Les informations d’identification de stockage sont utilisées pour l’authentification à Azure Data Lake Storage Gen2. Il peut s’agir d’une identité managée ou d’un principal de service. Databricks recommande vivement l’utilisation d’une identité managée Azure. Un emplacement externe est un objet qui combine un chemin d’accès de stockage cloud avec des informations d’identification de stockage.

Qui peut gérer des emplacements externes et des informations d’identification de stockage ?

L’utilisateur Azure qui crée une identité managée Azure pour des informations d’identification de stockage doit :

  • Appartenir à au moins un espace de travail Azure Databricks dans votre tenant (locataire) Azure.
  • Être Contributeur ou Propriétaire d’un groupe de ressources Azure.

Notes

Si vous créez un principal de service pour les informations d’identification de stockage, vous devez disposer du rôle Application Administrator ou de l’autorisation Application.ReadWrite.All dans Azure Active Directory.

L’utilisateur Azure qui accorde l’identité managée au compte de stockage doit :

  • Être Propriétaire ou Utilisateur avec le rôle RBAC Azure Administrateur de l’accès utilisateur sur le compte de stockage.

L’utilisateur Azure Databricks qui crée les informations d’identification de stockage dans Unity Catalog doit :

  • Être un administrateur de compte Azure Databricks.

L’utilisateur Azure Databricks qui crée l’emplacement externe dans Unity Catalog doit :

  • Être un administrateur de metastore ou un utilisateur disposant du privilège CREATE EXTERNAL LOCATION.

Après avoir créé un emplacement externe dans Unity Catalog, vous pouvez lui accorder les autorisations suivantes :

  • CREATE TABLE
  • READ FILES
  • WRITE FILES

Ces autorisations permettent aux utilisateurs d’Azure Databricks d’accéder aux données dans Azure Data Lake Storage Gen2 sans gérer des informations d’identification de stockage cloud pour l’authentification.

Pour plus d’informations, consultez Gérer les emplacements externes et les informations d’identification de stockage.

Accéder à Azure Data Lake Storage Gen2 avec des emplacements externes Unity Catalog

Utilisez l’URI ABFS complet pour accéder aux données sécurisées avec Unity Catalog.

Avertissement

Unity Catalog ignore les paramètres de configuration Spark lorsqu’il accède à des données gérées par des emplacements externes.

Exemples de lecture :

dbutils.fs.ls("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data")

spark.read.format("parquet").load("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data")

spark.sql("SELECT * FROM parquet.`abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data`")

Exemples d’écriture :

dbutils.fs.mv("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data", "abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/new-location")

df.write.format("parquet").save("abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/new-location")

Exemples de création de tables externes :

df.write.option("path", "abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/table").saveAsTable("my_table")

spark.sql("""
  CREATE TABLE my_table
  LOCATION "abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/table"
  AS (SELECT *
    FROM parquet.`abfss://container@storageAccount.dfs.core.windows.net/external-location/path/to/data`)
""")

Se connecter à Azure Data Lake Storage Gen2 ou au Stockage Blob en utilisant des informations d’identification Azure

Les informations d’identification suivantes peuvent être utilisées pour accéder à Azure Data Lake Storage Gen2 ou au Stockage Blob :

  • OAuth 2.0 avec un principal de service Azure : Databricks recommande d’utiliser des principaux de service Azure pour se connecter au stockage Azure. Pour créer un principal de service Azure et lui fournir l’accès aux comptes de stockage Azure, consultez Accéder au stockage avec Azure Active Directory.

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

  • Signatures d’accès partagé (SAP) : vous pouvez utiliser des jetons SAP de stockage pour accéder au stockage Azure. Grâce aux SAP, vous pouvez restreindre l’accès à un compte de stockage à l’aide de jetons temporaires avec un contrôle d’accès affiné.

    Vous pouvez uniquement accorder à un jeton SAP 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 des clés d’accès de compte de stockage pour gérer l’accès au Stockage Azure. Les clés d’accès au compte de stockage fournissent un accès complet à la configuration d’un compte de stockage, ainsi qu’aux données. Databricks recommande d’utiliser un principal de service Azure ou un jeton SAP pour la connexion au stockage Azure au lieu de clés de compte.

    Pour afficher les clés d’accès d’un compte, vous devez disposer du rôle Propriétaire, Contributeur ou Service opérateur de clé de compte de stockage sur le compte de stockage.

Databricks recommande d’utiliser des étendues de secret pour stocker toutes les informations d’identification. Vous pouvez accorder aux utilisateurs, aux principaux de service et aux groupes de votre espace de travail un accès pour lire l’étendue du secret. Cette opération protège les informations d’identification Azure tout en permettant aux utilisateurs d’accéder au stockage Azure. Pour créer une étendue de secret, consultez Étendues de secret.

Définir des propriétés Spark pour configurer des informations d’identification Azure afin d’accéder au stockage Azure

Vous pouvez définir des propriétés Spark pour configurer des informations d’identification Azure afin d’accéder au stockage Azure. Les informations d’identification peuvent être étendues à un cluster ou à un notebook. Utilisez à la fois le contrôle d’accès au cluster et le contrôle d’accès au notebook pour protéger l’accès au stockage Azure. Consultez Contrôle d’accès au cluster et Contrôle d’accès aux objets d’espace de travail.

Notes

Vous pouvez également utiliser des principaux de service Azure pour accéder au stockage Azure à partir d’un entrepôt SQL. Consultez Activer la configuration de l’accès aux données.

Pour définir des propriétés Spark, utilisez l’extrait de code suivant dans la configuration Spark d’un cluster ou un notebook :

Principal de service Azure

service_credential = dbutils.secrets.get(scope="<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")

Replace

  • <scope> par le nom de l’étendue de secrets Databricks.
  • <service-credential-key> par le nom de la clé contenant la clé secrète client.
  • <storage-account> par le nom du compte de stockage Azure.
  • <application-id> par l’ID d’application (client) de votre application Azure Active Directory.
  • <directory-id> par l’ID de répertoire (locataire) de l'application Azure Active Directory.

Jetons SAP

Vous pouvez configurer des jetons SAP pour plusieurs comptes de stockage dans la même session Spark.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Replace

  • <storage-account> par le nom du compte Stockage Azure.
  • <scope> avec le nom de l'étendue secrète d'Azure Databricks.
  • <sas-token-key> avec le nom de la clé contenant le jeton SAP du stockage Azure.

Clé de compte

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Replace

  • <storage-account> par le nom du compte Stockage Azure.
  • <scope> avec le nom de l'étendue secrète d'Azure Databricks.
  • <storage-account-access-key> avec le nom de la clé contenant la clé d'accès au compte de stockage Azure.

Accéder au stockage Azure

Une fois les informations d’identification correctement configurées pour accéder à votre conteneur de stockage Azure, vous pouvez interagir avec des ressources du compte de stockage en utilisant des URI. Databricks recommande d’utiliser le pilote abfss pour plus de sécurité.

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>")
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 bloc-notes

Notebook ADLS Gen2 OAuth 2.0 avec des principaux de service Azure

Obtenir le notebook

Modèles déconseillés pour le stockage des données et l’accès à celles-ci à partir d’Azure Databricks

Modèles de stockage déconseillés :