accès Azure Data Lake Storage Gen2 à l’aide d’OAuth 2,0 avec un principal du service Azure

vous pouvez accéder en toute sécurité aux données d’un compte Azure Data Lake Storage Gen2 (ADLS Gen2) à l’aide d’OAuth 2,0 avec un principal de service d’application Azure Active Directory (Azure AD) pour l’authentification. L’utilisation d’un principal de service pour l’authentification fournit deux options pour accéder aux données de votre compte de stockage :

  • Un point de montage vers un fichier ou un chemin d’accès spécifique
  • Accès direct aux données

L’option à sélectionner dépend de la façon dont vous envisagez d’utiliser Databricks avec le stockage ADLS Gen2 :

  • Pour fournir un accès à un chemin ou un fichier spécifique à plusieurs utilisateurs de l’espace de travail, créez un point de montage sur la ressource de stockage et le chemin d’accès requis.
  • Pour fournir un accès à plusieurs utilisateurs de l’espace de travail avec des autorisations différentes, accédez aux données directement par le biais du pilote du système de fichiers BLOB Azure (ABFs).

Les points de montage offrent également l’avantage d’être facilement accessibles dans un espace de travail à l’aide d’une sémantique de système de fichiers standard. En revanche, les chemins d’accès directs doivent être entièrement spécifiés dans vos blocs-notes. Cette fonctionnalité des points de montage peut offrir une meilleure expérience utilisateur pour plusieurs utilisateurs accédant aux ressources communes d’un espace de travail.

cet article décrit la création d’une application Azure AD et d’un principal du service et l’utilisation de ce principal de service pour monter ou accéder directement aux données dans un compte de stockage ADLS Gen2. Voici une vue d’ensemble des tâches présentées dans cet article :

  1. créez une application Azure AD, qui créera un principal de service associé utilisé pour accéder au compte de stockage.
  2. Créer une étendue de secret Azure Key Vaulte. l’étendue du secret stocke en toute sécurité la clé secrète client associée à l’application Azure AD.
  3. enregistrez la clé secrète client associée à l’application Azure AD dans le coffre de clés Azure. La clé secrète client est requise pour l’authentification auprès du compte de stockage. Le coffre de clés fournit un stockage sécurisé du secret et permet de l’utiliser sans le référencer directement dans la configuration.
  4. Affectez des rôles à l’application pour fournir au principal du service les autorisations nécessaires pour accéder au compte de stockage ADLS Gen2.
  5. Créez un ou plusieurs conteneurs dans le compte de stockage. Comme les répertoires dans un système de fichiers, les conteneurs permettent d’organiser les objets dans un compte de stockage Azure. Vous devez créer un ou plusieurs conteneurs pour pouvoir accéder à un compte de stockage ADLS Gen2.
  6. Authentifiez et accédez au compte de stockage ADLS Gen2 via un point de montage ou un accès direct.

Cet article décrit l’utilisation d’une étendue de secret Azure Key Vault, mais vous pouvez également utiliser une étendue de secret Databricks pour stocker la clé secrète client.

Configuration requise

inscrire une application Azure Active Directory

l’inscription d’une application Azure AD et l’attribution des autorisations appropriées créeront un principal de service qui peut accéder aux ressources de stockage ADLS Gen2.

  1. dans le Portail Azure, accédez au service Azure Active Directory .

  2. Sous gérer, cliquez sur inscriptions des applications.

  3. Cliquez sur + nouvel enregistrement. Entrez un nom pour l’application et cliquez sur Inscrire.

  4. Cliquez sur certificats secrets.

  5. Cliquez sur + nouvelle clé secrète client.

  6. Ajoutez une description pour le secret, puis cliquez sur Ajouter.

  7. Copiez et enregistrez la valeur du nouveau secret.

  8. Dans vue d’ensemble de l’inscription de l’application, copiez et enregistrez l’ID de l' application (client) et l' ID du répertoire (locataire).

    Vue d’ensemble de l’inscription de l’application

Créer un coffre de clés Azure et une étendue secrète

Pour créer le coffre de clés Azure et une Azure Databricks étendue secrète sauvegardée par ce coffre de clés :

  1. Créez une instance Azure Key Vault dans le portail Azure.
  2. Créez l’étendue de secrets Azure Databricks étendue reposant sur l’instance Azure Key Vault.

Étape 1 : Créer une instance Azure Key Vault

  1. Dans le Portail Azure, sélectionnez coffres de clés + Ajouter et donnez un nom à votre coffre de clés.

  2. Cliquez sur Vérifier + créer.

  3. Une fois la validation terminée, cliquez sur créer.

  4. Après avoir créé le coffre de clés, accédez à la page Propriétés du nouveau coffre de clés.

  5. Copiez et enregistrez l’URI du coffre et l’ID de la ressource.

    Propriétés du coffre de clés Azure

Étape 2 : créer une étendue du secret sauvegardée par le Azure Key Vault

Les ressources Azure Databricks peuvent faire référence à des secrets stockés dans un coffre de clés Azure en créant une étendue de secrets reposant sur Key Vault. Vous pouvez utiliser l’interface utilisateur Azure Databricks, l’interface CLI Databricks secretsou l' API 2,0 de secrets Databricks pour créer l’étendue du secret sauvegardé Azure Key Vault. Cet article décrit l’utilisation de l’interface utilisateur et de l’interface CLI.

Créer l’étendue du secret Azure Databricks dans l’interface utilisateur Azure Databricks

  1. Accédez à la page Azure Databricks créer une étendue secrète à l’adresse . Remplacez per-workspace-url par l' per-workspace-url pour votre espace de travail Azure Databricks.

  2. Entrez le nom de l’étendue.

  3. Entrez les valeurs URI du coffre et ID de la ressource du coffre de clés Azure que vous avez créé à l’étape 1 : Créer une instance Azure Key Vault.

  4. Cliquez sur Créer.

    Créer une étendue secrète

Créer l’étendue du secret Azure Databricks dans l’interface CLI

Pour créer une étendue secrète sauvegardée par le coffre de clés Azure à l’aide de l’interface CLI Databricks, ouvrez un terminal et exécutez la commande suivante :

databricks secrets create-scope \
--scope <scope-name> \
--scope-backend-type AZURE_KEYVAULT \
--resource-id <azure-keyvault-resource-id> \
--dns-name <azure-keyvault-dns-name>

Replace

  • <scope-name> avec un nom pour la nouvelle étendue.
  • <azure-keyvault-resource-id> avec l’ID de <azure-keyvault-resource-id>du coffre de clés.
  • <azure-keyvault-dns-name> avec l' <azure-keyvault-dns-name>.

Un exemple utilisant les valeurs de l' étape 1 : créer une instance Azure Key Vault:

databricks secrets create-scope \
--scope example-akv-scope \
--scope-backend-type AZURE_KEYVAULT \
--resource-id /subscriptions/… \
--dns-name https://example-akv.vault.azure.net/

Enregistrer la clé secrète client dans le coffre de clés Azure

  1. Dans le portail Azure, accédez au service Key Vault.

  2. Sélectionnez le coffre de clés créé à l’étape 1 : Créer une instance Azure Key Vault.

  3. sous Paramètres Secrets, cliquez sur générer/importer.

  4. Sélectionnez l’option de chargement Manuel, puis entrez le secret client dans le champ Valeur.

    Créer une clé secrète

Utilisez l' interface CLI de secrets pour vérifier que la clé secrète a été créée correctement :

databricks secrets list --scope example-akv-scope
Key name               Last updated
--------------------   --------------
example-adls2-secret   1605122724000

Attribuer des rôles

vous contrôlez l’accès aux ressources de stockage en affectant des rôles à un Azure AD l’inscription d’application associée au compte de stockage. cet exemple affecte l' Stockage contributeur de données Blob au compte de stockage ADLS Gen2. Vous devrez peut-être affecter d’autres rôles en fonction des exigences spécifiques.

  1. Dans le portail Azure, accédez au service Comptes de stockage.

  2. Sélectionnez le compte ADLS Gen2 à utiliser avec cette inscription d’application.

  3. Cliquez sur Contrôle d’accès (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 Azure AD nom de l’application et définissez rôle sur Stockage contributeur de données d’objet Blob.

  6. Cliquez sur Enregistrer.

    Affecter des rôles d’application

Créer un conteneur

Comme les répertoires dans un système de fichiers, les conteneurs permettent d’organiser les objets dans un compte de stockage Azure. Vous devez créer un ou plusieurs conteneurs pour pouvoir accéder à un compte de stockage ADLS Gen2. Vous pouvez créer un conteneur directement dans un Azure Databricks Notebook ou via l’interface de ligne de commande Azure, l’API Azure ou le portail Azure. Pour créer un conteneur via le portail :

  1. dans le Portail Azure, accédez à Stockage comptes.

  2. Sélectionnez votre compte ADLS Gen2, puis cliquez sur conteneurs.

  3. Cliquez sur + conteneur.

  4. Entrez un nom pour votre conteneur, puis cliquez sur créer.

    Créez un conteneur.

Monter le stockage ADLS Gen2

Pour monter le stockage ADLS Gen2 :

  1. Configurez l’authentification OAuth 2,0 sur le compte de stockage ADLS Gen2, en utilisant le principal du service comme informations d’identification.
  2. Créez le point de montage via l’API Databricks.

Important

  • Tous les utilisateurs de l’espace de travail Azure Databricks ont accès au compte ADLS Gen2 monté. Le principal de service que vous utilisez pour accéder au compte de ADLS Gen2 doit être autorisé à accéder uniquement à ce compte ADLS Gen2 ; il ne doit pas être autorisé à accéder à d’autres ressources Azure.
  • Lorsque vous créez un point de montage via un cluster, les utilisateurs du cluster peuvent accéder immédiatement au point de montage. Pour utiliser le point de montage dans un autre cluster en cours d’exécution, vous devez exécuter dbutils.fs.refreshMounts() sur ce cluster en cours d’exécution pour rendre le point de montage nouvellement créé disponible.
  • Le démontage d’un point de montage pendant l’exécution des travaux peut entraîner des erreurs. Assurez-vous que les tâches de production ne démontent pas le stockage dans le cadre du traitement.

Exécutez la commande suivante dans votre bloc-notes pour vous authentifier et créer un point de montage.

configs = {"fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

Replace

  • <application-id>avec l' <application-id> pour l’application Azure Active Directory.
  • <scope-name> avec le nom de l’étendue du secret Databricks.
  • <service-credential-key-name> par le nom de la clé contenant la clé secrète client.
  • <directory-id>avec l' <directory-id> pour l’application Azure Active Directory.
  • <container-name> par le nom d’un conteneur dans le compte de stockage ADLS Gen2.
  • <storage-account-name> par le nom du compte de stockage ADLS Gen2.
  • <mount-name> par le nom du point de montage prévu dans DBFS.

Accédez aux fichiers de votre système de fichiers ADLS Gen2 comme s’il s’agissait de fichiers dans DBFS :

df = spark.read.text("/mnt/%s/...." % <mount-name>)
df = spark.read.text("dbfs:/mnt/<mount-name>/....")
val df = spark.read.text("/mnt/<mount-name>/....")
val df = spark.read.text("dbfs:/mnt/<mount-name>/....")

Pour démonter un point de montage, utilisez la commande suivante :

dbutils.fs.unmount("/mnt/<mount-name>")

Accéder directement à ADLS Gen2

La façon dont vous transmettez les informations d’identification pour accéder aux ressources de stockage directement varie selon que vous prévoyez d’utiliser l’API tableau ou DataSet, ou l’API RDD.

API tableau ou DataSet

Si vous utilisez Spark tableau ou des API DataSet, Databricks vous recommande de définir les informations d’identification de votre compte dans les configurations de session de votre bloc-notes :

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

Replace

  • <storage-account-name> par le nom du compte de stockage ADLS Gen2.
  • <application-id>avec l' <application-id> pour l’application Azure Active Directory.
  • <scope-name> avec le nom de l’étendue du secret Databricks.
  • <service-credential-key-name> par le nom de la clé contenant la clé secrète client.
  • <directory-id>avec l' <directory-id> pour l’application Azure Active Directory.

API pour le jeu de donnée distribué résilient

Si vous utilisez l’API RDD pour accéder à ADLS Gen2, vous ne pouvez pas accéder aux options de configuration de Hadoop définies à l’aide de spark.conf.set(...) . Au lieu de cela, spécifiez les options de configuration de Hadoop en tant que configurations Spark lors de la création du cluster. Vous devez ajouter le spark.hadoop. préfixe aux clés de configuration Hadoop pour les propager aux configurations Hadoop utilisées par vos travaux RDD.

Avertissement

Ces informations d’identification sont accessibles à tous les utilisateurs qui accèdent au cluster.

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

Replace

  • <storage-account-name> par le nom du compte de stockage ADLS Gen2.
  • <application-id>avec l' <application-id> pour l’application Azure Active Directory.
  • <service-credential> avec la valeur de la clé secrète client.
  • <service-credential-key-name> par le nom de la clé contenant la clé secrète client.
  • <directory-id>avec l' <directory-id> pour l’application Azure Active Directory.

Utilisez les API Spark et Databricks standard pour lire à partir du compte de stockage :

val df = spark.read.parquet("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<directory-name>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<directory-name>")

Replace

  • <container-name> par le nom d’un conteneur dans le compte de stockage ADLS Gen2.
  • <storage-account-name> par le nom du compte de stockage ADLS Gen2.
  • <directory-name> avec un chemin d’accès facultatif dans le compte de stockage.

Exemple de bloc-notes

Ce bloc-notes montre comment utiliser un principal de service pour :

  1. Authentifiez-vous auprès d’un compte de stockage ADLS Gen2.
  2. Montez un système de fichiers dans le compte de stockage.
  3. Écrire un fichier JSON contenant les données de l’Internet des objets (IoT) dans le nouveau conteneur.
  4. Répertoriez les fichiers à l’aide d’un accès direct et du point de montage.
  5. Lisez et affichez le fichier IoT à l’aide d’un accès direct et du point de montage.

ADLS Gen2 le bloc-notes OAuth 2,0 avec les principaux de service Azure

Obtenir le notebook