Utiliser des identités managées Azure dans Unity Catalog pour accéder au stockage

Cet article explique comment utiliser des identités managées Azure afin de se connecter à des conteneurs de stockage pour le compte d’utilisateurs de Unity Catalog.

Que sont les identités managées Azure ?

Unity Catalog peut être configuré pour utiliser une identité managée Azure afin d’accéder aux conteneurs de stockage au nom des utilisateurs de Unity Catalog. Les identités managées fournissent une identité que les applications utilisent quand elles se connectent à des ressources qui prennent en charge l’authentification Microsoft Entra ID (anciennement Azure Active Directory).

Vous pouvez utiliser des identités managées dans Unity Catalog pour prendre en charge deux cas d’usage principaux :

  • En tant qu’identité pour se connecter aux comptes de stockage managés du metastore (où les tables managées sont stockées).
  • En tant qu’identité pour se connecter à d’autres comptes de stockage externes (pour un accès basé sur des fichiers ou pour accéder à des jeux de données existants via des tables externes).

La configuration de Unity Catalog avec une identité managée présente les avantages suivants par rapport à la configuration de Unity Catalog avec un principal de service :

Configurer une identité managée pour Unity Catalog

Pour configurer une identité managée à utiliser avec Unity Catalog, vous devez d’abord créer un connecteur d’accès pour Azure Databricks dans Azure. Par défaut, le connecteur d’accès se déploie avec une identité managée affectée par le système. Vous pouvez choisir à la place d’attacher une identité managée affectée par l’utilisateur. Vous accordez ensuite à l’identité managée l’accès à votre compte Azure Data Lake Storage Gen2 et utilisez le connecteur d’accès lorsque vous créez un metastore Unity Catalog ou des informations d’identification de stockage.

Spécifications

L’utilisateur ou le principal de service Azure qui crée le connecteur d’accès doit :

  • Être Contributeur ou Propriétaire d’un groupe de ressources Azure.

L’utilisateur ou le principal de service Azure qui octroie 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.

Étape 1 : Créer un connecteur d’accès pour Azure Databricks

Le connecteur d’accès pour Azure Databricks est une ressource Azure interne qui vous permet de connecter des identités managées à un compte Azure Databricks.

Chaque connecteur d’accès pour Azure Databricks peut contenir une identité managée affectée par le système ou une identité managée affectée par l’utilisateur. Si vous souhaitez utiliser plusieurs identités managées, créez un connecteur d’accès distinct pour chacune d’elles.

Utiliser une identité managée affectée par le système

  1. Connectez-vous au portail Azure en tant que Contributeur ou Propriétaire d’un groupe de ressources.

  2. Cliquez sur + Créer ou créer une ressource.

  3. Recherchez connecteur d’accès pour Azure Databricks et sélectionnez-le.

  4. Cliquez sur Créer.

  5. Sous l’onglet De base, acceptez, sélectionnez ou entrez des valeurs pour les champs suivants :

    • Abonnement : il s’agit de l’abonnement Azure dans lequel le connecteur d’accès va être créé. Par défaut, c’est l’abonnement Azure que vous utilisez actuellement. Ce peut être tout abonnement dans le locataire.
    • Groupe de ressources : il s’agit du groupe de ressources Azure dans lequel le connecteur d’accès sera créé.
    • Nom : entrez un nom qui indique la finalité du connecteur.
    • Région : il devrait s’agir de la région dans laquelle se trouve le compte de stockage auquel vous souhaitez vous connecter.
  6. Cliquez sur Vérifier + créer.

  7. Lorsque le message Validation réussie s’affiche, cliquez sur Créer.

    Une fois le déploiement réussi, le connecteur d’accès est déployé avec une identité managée affectée par le système.

  8. Une fois le déploiement terminé, cliquez sur Accéder à la ressource.

  9. Notez l’ID de ressource.

    L’ID de ressource est au format suivant :

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Utiliser une identité managée affectée par l’utilisateur

  1. Si vous n’avez pas encore d’identité managée affectée par l’utilisateur, créez-en une et notez son ID de ressource.

    Consultez Gérer les identités gérées affectées par l’utilisateur.

  2. Connectez-vous au portail Azure en tant que Contributeur ou Propriétaire d’un groupe de ressources.

    Le groupe de ressources doit se trouver dans la même région que le compte de stockage auquel vous souhaitez vous connecter.

  3. Recherchez Déployer un modèle personnalisé et sélectionnez-le.

  4. Sélectionnez Créer votre propre modèle et collez le modèle suivant dans l’éditeur :

    {
     "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
     "contentVersion": "1.0.0.0",
     "parameters": {
         "connectorName": {
             "defaultValue": "testConnector",
             "type": "String",
             "metadata": {
                 "description": "The name of the Azure Databricks Access Connector to create."
             }
         },
         "accessConnectorRegion": {
             "defaultValue": "[resourceGroup().location]",
             "type": "String",
             "metadata": {
                 "description": "Location for the access connector resource."
             }
         },
         "userAssignedManagedIdentiy": {
             "type": "String",
             "metadata": {
                 "description": "The resource Id of the user assigned managed identity."
             }
         }
     },
     "resources": [
         {
             "type": "Microsoft.Databricks/accessConnectors",
             "apiVersion": "2023-05-01",
             "name": "[parameters('connectorName')]",
             "location": "[parameters('accessConnectorRegion')]",
             "identity": {
                 "type": "UserAssigned",
                 "userAssignedIdentities": {
                     "[parameters('userAssignedManagedIdentiy')]": {}
                 }
              }
          }
       ]
    }
    
  5. Sous l’onglet Informations de base, acceptez, sélectionnez ou entrez des valeurs pour les champs suivants :

    • Abonnement : l’abonnement Azure dans lequel le connecteur d’accès va être créé. Par défaut, c’est l’abonnement Azure que vous utilisez actuellement. Ce peut être tout abonnement dans le locataire.
    • Groupe de ressources : un groupe de ressources se trouvant dans la même région que le compte de stockage auquel vous souhaitez vous connecter.
    • Nom : un nom qui indique la finalité du connecteur.
    • Région : il devrait s’agir de la région dans laquelle se trouve le compte de stockage auquel vous souhaitez vous connecter. Vous pouvez choisir la valeur préremplie « [resourceGroup().location] » si le groupe de ressources a été créé dans la même région que le compte de stockage auquel vous allez vous connecter.
    • Identité managée affectée par l’utilisateur : l’ID de ressource de l’identité managée affectée par l’utilisateur que vous souhaitez utiliser.
  6. Cliquez sur Vérifier + créer.

  7. Lorsque le message Validation réussie s’affiche, cliquez sur Créer.

  8. Une fois le déploiement terminé, cliquez sur Accéder à la ressource.

  9. Notez l’ID de ressource.

    L’ID de ressource est au format suivant :

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Étape 2 : Accorder à l’identité managée l’accès au compte de stockage

Pour octroyer les autorisations à cette étape, vous devez disposer du rôle Azure RBAC Propriétaire ou Administrateur de l’accès utilisateur sur votre compte de stockage.

  1. Connectez-vous à votre compte Azure Data Lake Storage Gen2.
  2. Accédez à Contrôle d’accès (IAM), cliquez sur Ajouter, puis sélectionnez Ajouter une attribution de rôle.
  3. Sélectionnez le rôle Contributeur aux données Blob du stockage, puis cliquez sur Suivant.
  4. Sous Attribuer l’accès à, sélectionnez Identité managée.
  5. Cliquez sur +Sélectionner des membres, puis sélectionnez le Connecteur d’accès pour Azure Databricks ou Identité managée affectée par l’utilisateur.
  6. Recherchez le nom de votre connecteur ou l’identité affectée par l’utilisateur, sélectionnez-le, puis cliquez sur Examiner et affecter.

Vous pouvez également limiter l’accès au compte de stockage en accordant l’accès à un conteneur spécifique à l’identité managée. Suivez les mêmes étapes ci-dessus, mais octroyez le rôle de Délégation du Stockage Blob sur le compte de stockage et le rôle Contributeur aux données Blob du stockage sur le conteneur.

Étape 3 : octroyer à l’identité managée l’accès aux événements de fichier

L’octroi de l’accès à votre identité managée aux événements de fichier permet à Azure Databricks de s’abonner aux notifications d’événements de fichier émises par les fournisseurs cloud. Cela rend le traitement des fichiers plus efficace. Pour octroyer les autorisations à cette étape, vous devez disposer du rôle Azure RBAC Propriétaire ou Administrateur de l’accès utilisateur sur votre compte de stockage.

  1. Connectez-vous à votre compte Azure Data Lake Storage Gen2.
  2. Accédez à Contrôle d’accès (IAM), cliquez sur Ajouter, puis sélectionnez Ajouter une attribution de rôle.
  3. Sélectionnez le rôle Contributeur aux données en file d’attente du stockage, puis cliquez sur Suivant.
  4. Sous Attribuer l’accès à, sélectionnez Identité managée.
  5. Cliquez sur +Sélectionner des membres, puis sélectionnez le Connecteur d’accès pour Azure Databricks ou Identité managée affectée par l’utilisateur.
  6. Recherchez le nom de votre connecteur ou l’identité affectée par l’utilisateur, sélectionnez-le, puis cliquez sur Examiner et affecter.

Cette étape permet à Azure Databricks de configurer automatiquement des événements de fichier. Si vous n’accordez pas à Azure Databricks l’accès pour configurer des événements de fichier en votre nom, vous devez configurer manuellement les événements de fichier pour chaque emplacement. Pour octroyer les autorisations de cette étape, vous devez disposer des rôles Azure RBAC Propriétaire ou Administrateur de l’accès utilisateur sur votre identité managée et sur le groupe de ressources dans lequel se trouve votre compte Azure Data Lake Storage Gen2.

  1. Suivez les étapes ci-dessus à l’Étape 3 : octroyer à l’identité managée l’accès aux événements de fichier et attribuez le rôle Contributeur de compte de stockage, en même temps que le rôle Contributeur aux données en file d’attente du stockage, à votre identité managée.
  2. Accédez au groupe de ressources Azure dans lequel se trouve votre compte Azure Data Lake Storage Gen2.
  3. Accédez à Contrôle d’accès (IAM), cliquez sur Ajouter, puis sélectionnez Ajouter une attribution de rôle.
  4. Sélectionnez le rôle Contributeur EventGrid EventSubscription, puis cliquez sur Suivant.
  5. Sous Attribuer l’accès à, sélectionnez Identité managée.
  6. Cliquez sur +Sélectionner des membres, puis sélectionnez le Connecteur d’accès pour Azure Databricks ou Identité managée affectée par l’utilisateur.
  7. Recherchez le nom de votre connecteur ou l’identité affectée par l’utilisateur, sélectionnez-le, puis cliquez sur Examiner et affecter.

Utiliser une identité managée pour accéder au compte de stockage racine Unity Catalog

Cette section explique comment accorder à l’identité managée l’accès au compte de stockage racine lorsque vous créez un metastore Unity Catalog.

Pour découvrir comment mettre à niveau un metastore Unity Catalog existant afin d’utiliser une identité managée, consultez Mettre à niveau votre metastore Unity Catalog existant afin d’utiliser une identité managée pour accéder à son stockage racine.

  1. En tant qu’administrateur de compte Azure Databricks, connectez-vous à la console de compte Azure Databricks.
  2. Cliquez sur Catalog iconCatalogue.
  3. Cliquez sur Create Metastore.
  4. Entrez des valeurs dans les champs suivants :
    • Nom pour le metastore.

    • Région dans laquelle le metastore sera déployé.

      Pour des performances optimales, colocalisez le connecteur d’accès, les espaces de travail, le metastore et l’emplacement de stockage cloud dans la même région cloud.

    • Chemin d’accès d’ADLS Gen 2 : entrez le chemin d’accès du conteneur de stockage que vous allez utiliser comme stockage racine pour le metastore.

      Le préfixe abfss:// est ajouté automatiquement.

    • ID du connecteur d’accès : entrez l’ID de ressource du connecteur d’accès Azure Databricks au format suivant :

      /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
      
    • (Facultatif) ID de l’identité managée : si vous avez créé le connecteur d’accès en utilisant une identité managée affectée par l’utilisateur, entrez l’ID de ressource de l’identité managée.

  5. Cliquez sur Créer.
  6. À l’invite, sélectionnez les espaces de travail à lier au metastore.

Utiliser une identité managée pour accéder à un stockage externe managé dans Unity Catalog

Unity Catalog vous donne la possibilité d’accéder aux données existantes dans des comptes de stockage à l’aide d’informations d’identification de stockage et d’emplacements externes. Les informations d’identification de stockage stockent l’identité managée, et les emplacements externes définissent un chemin d’accès au stockage, ainsi qu’une référence aux informations d’identification de stockage. Vous pouvez adopter cette approche pour octroyer et contrôler l’accès à des données existantes dans un stockage cloud, ainsi que pour inscrire des tables externes dans Unity Catalog.

Des informations d’identification de stockage peuvent contenir une identité managée ou un principal de service. L’utilisation d’une identité managée offre l’avantage de permettre à Unity Catalog d’accéder à des comptes de stockage protégés par des règles de réseau, ce qui n’est pas possible à l’aide de principaux de service. Elle élimine également la nécessité de gérer les secrets et d’assurer leur rotation.

Pour créer des informations d’identification de stockage en utilisant une identité managée, et affecter ces informations d’identification de stockage à un emplacement externe, suivez les instructions fournies dans Connexion au stockage d’objets cloud à l’aide de Unity Catalog.

Si votre espace de travail Azure Databricks est déployé dans votre propre réseau virtuel Azure, ce que l’on appelle également « injection de réseau virtuel », et que vous utilisez un pare-feu de stockage pour protéger un compte Azure Data Lake Storage Gen2, vous devez :

  1. Activer votre espace de travail Azure Databricks pour accéder au stockage Azure.
  2. Activer votre identité managée pour accéder au stockage Azure.

Étape 1. Activer votre espace de travail Azure Databricks pour accéder au Stockage Azure

Vous devez configurer les paramètres réseau pour autoriser votre espace de travail Azure Databricks à accéder à Azure Data Lake Storage Gen2. Vous pouvez configurer des points de terminaison privés ou l’accès à partir de votre réseau virtuel sur Azure Data Lake Storage Gen2 pour autoriser les connexions de vos sous-réseaux à votre compte Azure Data Lake Storage Gen2.

Pour obtenir des instructions, consultez Accorder à votre espace de travail Azure Databricks l’accès à Azure Data Lake Storage Gen2.

Étape 2 : Activer votre identité managée pour accéder au stockage Azure

Cette étape n’est nécessaire que si l’option « Autoriser les services Azure figurant dans la liste des services approuvés à accéder à ce compte de stockage » est désactivée pour votre compte de stockage Azure. Si cette configuration est activée :

  • Tout connecteur d’accès pour Azure Databricks qui se trouve dans le même locataire que le compte de stockage peut accéder à ce compte.
  • Tout service approuvé Azure peut accéder au compte de stockage. Consultez Accorder l’accès aux services Azure approuvés.

Les instructions ci-dessous incluent une étape dans laquelle vous désactivez cette configuration. Vous pouvez utiliser le portail Azure ou l’interface de ligne de commande Azure.

Utiliser le portail Azure

  1. Connectez-vous au portail Azure, recherchez et sélectionnez le compte de stockage Azure, puis accédez à l’onglet Mise en réseau.

  2. Définissez Accès au réseau public sur Activé à partir des réseaux virtuels et adresses IP sélectionnés.

    Au lieu de cela, vous avez la possibilité de définir Accès au réseau public sur Désactivé. L’identité managée peut être utilisée pour contourner la vérification de l’accès au réseau public.

  3. Sous Instances de ressource, sélectionnez un Type de ressourceMicrosoft.Databricks/accessConnectors, puis sélectionnez votre connecteur d’accès Azure Databricks.

  4. Sous Exceptions, désactivez la case à cocher Autoriser les services Azure figurant dans la liste des services approuvés à accéder à ce compte de stockage.

Utilisation de l’interface de ligne de commande Microsoft Azure

  1. Installer Azure CLI et se connecter.

    Pour vous connecter en utilisant un principal de service Microsoft Entra ID, consultez Connexion Azure CLI avec un principal de service Microsoft Entra ID.

    Pour vous connecter à l'aide d'un compte d'utilisateur Azure Databricks, consultez Connexion Azure CLI avec un compte d'utilisateur Azure Databricks.

  2. Ajoutez une règle réseau au compte de stockage :

    az storage account network-rule add \
    -–subscription <subscription id of the resource group> \
    -–resource-id <resource Id of the access connector for Azure Databricks> \
    -–tenant-id <tenant Id> \
    -g <name of the Azure Storage resource group> \
    -–account-name <name of the Azure Storage resource> \
    

    Ajoutez l’ID de ressource au format suivant :

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    
  3. Après avoir créé la règle de réseau, accédez à votre compte stockage Azure dans le portail Azure, puis affichez l’identité managée sous l’onglet Mise en réseau dans Instances de ressources, type de ressource Microsoft.Databricks/accessConnectors.

  4. Sous Exceptions, désactivez la case à cocher Autoriser les services Azure figurant dans la liste des services approuvés à accéder à ce compte de stockage.

  5. Si vous le souhaitez, définissez Accès au réseau public sur Désactivé. L’identité managée peut être utilisée pour contourner la vérification de l’accès au réseau public.

    L’approche standard consiste à conserver cette valeur définie sur Activé à partir des réseaux virtuels et adresses IP sélectionnés.

Les entrepôts SQL serverless sont des ressources de calcul qui s’exécutent dans l’abonnement Azure pour Azure Databricks, et non dans votre abonnement Azure. Si vous configurez un pare-feu sur Azure Data Lake Storage Gen2 et que vous envisagez d’utiliser des entrepôts SQL serverless, vous devez configurer le pare-feu pour autoriser l’accès à partir d’entrepôts SQL serverless.

Pour obtenir des instructions, consultez Configurer un pare-feu pour l’accès au calcul serverless.

Mettre à niveau votre metastore Unity Catalog existant afin d’utiliser une identité managée pour accéder à son stockage racine

Si vous avez un metastore Unity Catalog créé à l’aide d’un principal de service et souhaitez le mettre à niveau pour utiliser une identité managée, vous pouvez le mettre à jour à l’aide d’un appel d’API.

  1. Créez un connecteur d’accès pour Azure Databricks, puis attribuez-lui les autorisations d’accès au conteneur de stockage qui est utilisé pour le stockage racine de votre metastore Unity Catalog. Pour cela, suivez les instructions fournies dans Configurer une identité managée pour Unity Catalog.

    Vous pouvez créer le connecteur d’accès avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur.

    Prenez note de l’ID de ressource du connecteur d’accès. Si vous utilisez une identité managée affectée par l’utilisateur, notez également son ID de ressource.

  2. En tant qu’administrateur de compte, connectez-vous à un espace de travail Azure Databricks affecté au metastore.

    Vous ne devez pas nécessairement être administrateur d’espace de travail.

    Prenez note de l’URL de l’espace de travail, qui est la première partie de l’URL, après https:// (azuredatabricks.net inclus).

  3. Générez un jeton d’accès personnel.

  4. Ajoutez le jeton d’accès personnel au fichier .netrc dans votre répertoire de base. Cela améliore la sécurité en empêchant le jeton d’accès personnel d’apparaître dans l’historique des commandes de votre interpréteur de commandes. Consultez l’API Gestion des jetons.

  5. Exécutez la commande cURL suivante afin de recréer les informations d’identification de stockage.

    Remplacez les valeurs d’espace réservé :

    • <databricks-instance> : L’URL de l’espace de travail dans lequel le jeton d’accès personnel a été généré.
    • <credential-name> : nom des informations d’identification de stockage.
    • <access-connector-id>: ID de ressource pour le connecteur d’accès Azure Databricks au format /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>.
    • <managed-identity-id> : si vous avez créé le connecteur d’accès en utilisant une identité managée affectée par l’utilisateur, spécifiez l’ID de ressource de l’identité managée.
    curl -n -X POST --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/storage-credentials --data "{
      \"name\": \"<credential-name>\",
      \"azure_managed_identity\": {
        \"access_connector_id\": \"<access-connector-id>\",
        \"managed_identity_id\": \"<managed-identity-id>\"
      }
    }"
    
  6. Notez l’ID des informations d’identification de stockage dans la réponse.

  7. Exécutez la commande cURL suivante pour récupérer le metastore_id, où <databricks-instance> se trouve l’URL de l’espace de travail où le jeton d’accès personnel a été généré.

    curl -n GET--header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastore_summary
    
  8. Exécutez la commande cURL suivante pour mettre à jour le metastore avec les nouvelles informations d’identification de stockage racines.

    Remplacez les valeurs d’espace réservé :

    • <databricks-instance> : L’URL de l’espace de travail dans lequel le jeton d’accès personnel a été généré.
    • <metastore-id> : ID du metastore que vous avez récupéré à l’étape précédente.
    • <storage-credential-id> : ID d’informations d’identification de stockage.
    curl -n -X PATCH --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastores/<metastore-id> --data
    "{\"storage_root_credential_id\": \"<storage-credential-id>\"}"