Didacticiel : Utiliser une identité managée attribuée par le système de la machine virtuelle Windows pour accéder à Azure Data Lake Store

Les identités managées pour les ressources Azure sont une fonctionnalité de Microsoft Entra ID. Les services Azure prenant en charge les identités managées pour ressources Azure sont soumis à leur propre chronologie. Assurez-vous de passer en revue l’état Disponibilité des identités gérées pour votre ressource et les problèmes connus avant de commencer.

Ce didacticiel vous indique comment utiliser une identité managée attribuée par le système pour une machine virtuelle Windows afin d’accéder à Azure Data Lake Store. Les identités managées sont gérées automatiquement par Azure. Elles permettent à votre application de s’authentifier auprès de services prenant en charge l’authentification Microsoft Entra, sans avoir recours à des informations d’identification dans votre code.

Dans cet article, vous apprendrez comment :

  • Accorder à votre machine virtuelle l’accès à Azure Data Lake Store
  • Obtenir un jeton d’accès à l’aide de l’identité de machine virtuelle, et l’utiliser pour accéder à Azure Data Lake Store

Prérequis

Activer

L’activation d’une identité managée affectée par le système s’effectue en un seul clic. Vous pouvez l’activer au moment de la création d’une machine virtuelle ou plus tard dans les propriétés d’une machine virtuelle existante.

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

Pour activer une identité managée affectée par le système sur une nouvelle machine virtuelle :

  1. Connectez-vous au portail Azure

  2. Créer une machine virtuelle avec une identité affectée par le système activée

Accorder l'accès

Maintenant, vous pouvez accorder à votre machine virtuelle l’accès à des fichiers et des dossiers dans un Azure Data Lake Store. Pour cette étape, vous pouvez utiliser un Data Lake Store existant ou bien en créer un. Pour créer un nouveau Data Lake Store via le portail Azure, suivez ce Démarrage rapide de Azure Data Lake Store. Des procédures de démarrage rapide utilisant Azure CLI et Azure PowerShell sont également décrites dans la Documentation Azure Data Lake Store.

Dans votre Data Lake Store, créez un dossier et accordez l’autorisation d’identité affectée par le système de votre machine virtuelle. L’identité a besoin de droits de lecture, d’écriture et d’exécution de fichiers dans ce dossier :

  1. Dans le portail Azure, sélectionnez Data Lake Store dans le volet de navigation gauche.
  2. Sélectionnez le Data Lake Store que vous souhaitez utiliser pour ce didacticiel.
  3. Sélectionnez Explorateur de données dans la barre de commandes.
  4. Le dossier racine du Data Lake Store est sélectionné. Dans la barre de commandes, sélectionnez Accès.
  5. Sélectionnez Ajouter. Dans le champ Sélectionner, saisissez le nom de votre machine virtuelle, par exemple DevTestVM. Sélectionnez votre machine virtuelle à partir des résultats de recherche, puis Sélectionner.
  6. Sélectionnez Sélectionner les autorisations. Sélectionnez Lire et Exécuter, ajoutez à Ce dossier et ajoutez en tant qu’une Autorisation d’accès uniquement. Sélectionnez OK. L’autorisation doit être ajoutée avec succès.
  7. Fermez le panneau Accès.
  8. Pour ce didacticiel, créons un nouveau dossier. Sélectionnez Nouveau dossier dans la barre de commandes et donnez-lui un nom, par exemple TestFolder. Sélectionnez OK.
  9. Sélectionnez le dossier créé, puis Accès dans la barre de commandes.
  10. Semblable à l’étape 5, sélectionnez Ajouter, saisissez le nom de votre machine virtuelle dans le champ Sélectionner, sélectionnez-la puis choisissez Sélectionner.
  11. Semblable à l’étape 6, sélectionnez Sélectionner les autorisations, sélectionnez Lire, Écrire, et Exécuter, ajoutez à Ce dossier et ajoutez en tant qu’une entrée d’autorisation accès et une entrée d’autorisation par défaut. Sélectionnez OK. L’autorisation doit être ajoutée avec succès.

Votre identité managée attribuée par le système de la machine virtuelle peut désormais effectuer toutes les opérations sur les fichiers du dossier que vous avez créé. Pour plus d’informations sur la gestion de l’accès à Data Lake Store, lisez cet article sur le Contrôle d’accès dans Data Lake Store.

Accéder aux données

Azure Data Lake Storage prenant en charge l’authentification Microsoft Entra en mode natif, il peut accepter directement des jetons d’accès obtenus à l’aide d’identités managées pour les ressources Azure. Pour s’authentifier sur le système de fichiers de Data Lake Storage, vous envoyez un jeton d’accès émis par Microsoft Entra ID au point de terminaison de votre système de fichiers Data Lake Storage dans un en-tête d’autorisation. L’en-tête a le format « Bearer <ACCESS_TOKEN_VALUE> ». Pour en savoir plus sur la prise en charge de Data Lake Storage pour l’authentification Microsoft Entra, consultez Authentification auprès de Data Lake Storage à l’aide de Microsoft Entra ID

Remarque

Les kits de développement logiciel clients du système de fichiers de Data Lake Store ne gèrent pas encore les identités managées pour les ressources Azure. Ce didacticiel sera mis à jour lorsque cette prise en charge sera ajoutée aux kits de développements logiciel.

Dans ce didacticiel, vous vous authentifiez sur l’API REST du système de fichiers de Data Lake Store à l’aide de PowerShell pour effectuer des requêtes REST. Pour utiliser l’identité managée attribuée par le système de la machine virtuelle pour l’authentification, vous devez effectuer les requêtes à partir de la machine virtuelle.

  1. Dans le portail, accédez à Machines virtuelles et accédez à votre machine virtuelle Windows puis, dans Vue d’ensemble, sélectionnez Connecter.

  2. Entrez le Nom d’utilisateur et le Mot de passe que vous avez ajoutés lorsque vous avez créé la machine virtuelle Windows.

  3. Maintenant que vous avez créé une Connexion Bureau à distance avec la machine virtuelle, ouvrez PowerShell dans la session à distance.

  4. À l’aide de Invoke-WebRequest de Powershell, adressez une requête au point de terminaison des identités managées locales pour les ressources Azure pour obtenir un jeton d’accès pour Azure Data Lake Store. L’identificateur de ressources pour Data Lake Store est https://datalake.azure.net/. Data Lake effectue une correspondance exacte sur l’identificateur de ressource et la barre oblique est importante.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Convertissez la réponse d’objet JSON en objet PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extrayez le jeton d’accès de la réponse.

    $AccessToken = $content.access_token
    
  5. Vérifiez que tout est correctement configuré. À l’aide « Invoke-WebRequest » de PowerShell, faites une requête au point de terminaison REST de votre Data Lake Store pour répertorier les dossiers dans le dossier racine. Il est important de que la chaîne « Porteur » dans l’en-tête d’autorisation ait un « P » majuscule. Vous pouvez rechercher le nom de votre Data Lake Store dans la section Vue d’ensemble de votre Data Lake Store.

    Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -Headers @{Authorization="Bearer $AccessToken"}
    

    Une réponse correcte se présente ainsi :

    StatusCode        : 200
    StatusDescription : OK
    Content           : {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY", "blockSize":0,"accessTime":1507934941392, "modificationTime":1507944835699,"replication":0, "permission":"770","ow..."
    RawContent        : HTTP/1.1 200 OK
                        Pragma: no-cache
                        x-ms-request-id: b4b31e16-e968-46a1-879a-3474aa7d4528
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict-Transport-Security: ma...
    Forms             : {}
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b4b31e16-e968-46a1-879a-3474aa7d4528],
                        [x-ms-webhdfs-version, 17.04.22.00], [Status, 0x0]...}
    Images            : {}
    InputFields       : {}
    Links             : {}
    ParsedHtml        : System.__ComObject
    RawContentLength  : 556
    
  6. Vous pouvez maintenant essayer de charger un fichier sur votre Data Lake Store. Commencez par créer un fichier à charger.

    echo "Test file." > Test1.txt
    
  7. À l’aide de Invoke-WebRequest de PowerShell, faites une requête au point de terminaison REST de votre Data Lake Store pour charger le fichier dans le dossier créé précédemment. Cette requête prend deux étapes. Dans la première étape, vous faites une requête et vous obtenez une redirection vers l’emplacement où le fichier doit être téléchargé. Dans la deuxième étape, vous chargez réellement le fichier. N’oubliez pas définir le nom du dossier et du fichier de façon appropriée si vous avez utilisé des valeurs différentes de celles du didacticiel.

    $HdfsRedirectResponse = Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Si vous examinez la valeur de $HdfsRedirectResponse, elle doit ressembler à la réponse suivante :

    PS C:\> $HdfsRedirectResponse
    
    StatusCode        : 307
    StatusDescription : Temporary Redirect
    Content           : {}
    RawContent        : HTTP/1.1 307 Temporary Redirect
                        Pragma: no-cache
                        x-ms-request-id: b7ab492f-b514-4483-aada-4aa0611d12b3
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosn...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b7ab492f-b514-4483-aada-4aa0611d12b3], 
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

    Terminez le chargement en envoyant une requête au point de terminaison de redirection :

    Invoke-WebRequest -Uri $HdfsRedirectResponse.Headers.Location -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Une réponse correcte se présente ainsi :

    StatusCode        : 201
    StatusDescription : Created
    Content           : {}
    RawContent        : HTTP/1.1 201 Created
                        Pragma: no-cache
                        x-ms-request-id: 1e70f36f-ead1-4566-acfa-d0c3ec1e2307
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, 1e70f36f-ead1-4566-acfa-d0c3ec1e2307],
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

À l’aide d’autres API de système de fichiers de Data Lake Store, vous pouvez ajouter à des fichiers, télécharger des fichiers et bien plus encore.

Disable

Pour désactiver l’identité affectée par le système sur votre machine virtuelle, définissez son état sur Off.

Screenshot shows the System assigned tab for a virtual machine where you can turn off the System assigned status.

Étapes suivantes

Dans ce didacticiel, vous avez appris à utiliser une identité managée attribuée par le système pour une machine virtuelle Windows afin d’accéder à Azure Data Lake Store. Pour en savoir plus sur Azure Data Lake Store, consultez :