Tutoriel : Utiliser une identité managée affectée par le système de machine virtuelle Windows pour accéder au Stockage Azure via des informations d’identification SAP

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 tutoriel vous indique comment utiliser une identité affectée par le système pour une machine virtuelle Windows afin d’obtenir des informations d’identification SAP (signature d’accès partagé) de stockage. Plus précisément, des informations d’identification SAP de service.

Une SAP de service offre la possibilité d’accorder un accès limité à des objets dans un compte de stockage, pendant une durée limitée et pour un service spécifique (en l’occurrence, le service BLOB), sans exposer de clé d’accès de compte. Vous pouvez utiliser des informations d’identification SAP comme d’habitude lors de l’exécution d’opérations de stockage, par exemple, lors de l’utilisation du SDK Stockage Azure. Ce didacticiel montre le chargement et le téléchargement d’un objet blob à l’aide de Stockage Azure PowerShell. Vous apprendrez à :

  • Créez un compte de stockage.
  • Autoriser votre machine virtuelle à accéder à la SAP d’un compte stockage dans le Gestionnaire des ressources
  • Obtenir un jeton d’accès à l’aide de l’identité de votre machine virtuelle et l’utiliser pour récupérer la SAP à partir du Gestionnaire des ressources

Prérequis

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Créez un compte de stockage.

Si vous n’en avez pas déjà un, vous allez maintenant créer un compte de stockage. Vous pouvez également ignorer cette étape, et autoriser votre identité managée affectée par le système de la machine virtuelle à accéder aux informations d’identification SAP d’un compte de stockage existant.

  1. Sélectionnez le bouton +/Créer un service dans l’angle supérieur gauche du portail Azure.

  2. Sélectionnez Stockage, puis Compte de stockage, et un nouveau panneau « Créer un compte de stockage » s’affiche.

  3. Entrez un nom pour le compte de stockage que vous utilisez dans ce tutoriel.

  4. Modèle de déploiement et Type de compte doivent être respectivement définis sur « Gestionnaire de ressources » et « Usage général ».

  5. Assurez-vous que les champs Abonnement et Groupe de ressources correspondent à ceux que vous avez spécifiés lorsque vous avez créé votre machine virtuelle à l’étape précédente.

  6. Sélectionnez Créer.

    Capture d’écran montrant comment créer un compte de stockage.

Création d’un conteneur d’objets blob dans le compte de stockage

Plus tard, nous chargerons et téléchargerons un fichier vers le nouveau compte de stockage. Étant donné que les fichiers nécessitent un stockage d’objets blob, nous devons créer un conteneur d’objets blob dans lequel stocker le fichier.

  1. Revenez à votre compte de stockage nouvellement créé.

  2. Sélectionnez le lien Conteneurs dans le panneau gauche, sous « Service BLOB ».

  3. Sélectionnez + Conteneur en haut de la page et un panneau « Nouveau conteneur » apparaît.

  4. Nommez le conteneur, sélectionnez un niveau d’accès, puis sélectionnez OK. Le nom spécifié sera utilisé plus loin dans le didacticiel.

    Capture d’écran montrant comment créer un conteneur de stockage.

Autoriser votre identité managée affectée par le système de machine virtuelle à utiliser une SAP de stockage

Le service Stockage Azure ne prend pas en charge de manière native l’authentification Microsoft Entra. Toutefois, vous pouvez utiliser une identité managée pour récupérer une SAP de stockage à partir du Gestionnaire des ressources, puis utiliser cette SAP pour accéder au stockage. Dans cette étape, vous autorisez votre identité managée affectée par le système de machine virtuelle à accéder à la SAP de votre compte de stockage.

  1. Revenez à votre compte de stockage nouvellement créé.  

  2. Sélectionnez Contrôle d’accès (IAM) .

  3. Sélectionnez Ajouter>Ajouter une attribution de rôle pour ouvrir la page Ajouter une attribution de rôle.

  4. Attribuez le rôle suivant. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

    Paramètre Valeur
    Role Contributeur de compte de stockage
    Attribuer l’accès à Identité managée
    Attribué par le système Machine virtuelle
    Sélectionnez <votre machine virtuelle Windows>

    Capture d’écran montrant la page d’ajout d’une attribution de rôle.

Obtenir un jeton d’accès à l’aide de l’identité de la machine virtuelle et l’utiliser pour appeler Azure Resource Manager

Pour le reste du tutoriel, nous allons utiliser votre machine virtuelle.

Dans cette partie, vous devez utiliser les cmdlets PowerShell d’Azure Resource Manager. Si vous ne l’avez pas installé, téléchargez la dernière version avant de continuer.

  1. Dans le portail Azure, accédez à Machines virtuelles, accédez à votre machine virtuelle Windows, puis en haut de la page Vue d’ensemble, sélectionnez Se 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.

  4. Ouvrez PowerShell dans la session à distance et utilisez Invoke-WebRequest pour obtenir un jeton Azure Resource Manager à partir de l’identité managée locale pour le point de terminaison des ressources Azure.

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

    Remarque

    La valeur du paramètre « ressource » doit correspondre exactement à ce qui est attendu par Microsoft Entra ID. Lorsque vous utilisez l’ID de ressource Azure Resource Manager, vous devez inclure la barre oblique de fin à l’URI.

    Ensuite, extrayez l’élément « Content » qui est stocké sous forme de chaîne au format JSON (JavaScript Objet Notation) dans l’objet $response.

    $content = $response.Content | ConvertFrom-Json
    

    Ensuite, extrayez le jeton d’accès de la réponse.

    $ArmToken = $content.access_token
    

Obtenir des informations d’identification SAP d’Azure Resource Manager pour effectuer des appels de stockage

Maintenant, utilisez PowerShell pour appeler le Gestionnaire des ressources à l’aide du jeton d’accès récupéré dans la section précédente, afin de créer des informations d’identification SAP. Une fois en possession des informations d’identification SAP, nous pouvons appeler des opérations de stockage.

Pour cette requête, nous utilisons les paramètres de requête HTTP suivants afin de créer les informations d’identification SAP :

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite. Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

Ces paramètres sont inclus dans le corps POST de la requête pour les informations d’identification SAP. Pour plus d’informations concernant les paramètres pour la création d’informations d’identification SAP, voir Afficher la référence REST de SAP de service.

Tout d’abord, convertissez les paramètres au format JSON, puis appelez le point de terminaison listServiceSas du stockage pour créer les informations d’identification SAP :

$params = @{canonicalizedResource="/blob/<STORAGE-ACCOUNT-NAME>/<CONTAINER-NAME>";signedResource="c";signedPermission="rcw";signedProtocol="https";signedExpiry="2017-09-23T00:00:00Z"}
$jsonParams = $params | ConvertTo-Json
$sasResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>/listServiceSas/?api-version=2017-06-01 -Method POST -Body $jsonParams -Headers @{Authorization="Bearer $ArmToken"}

Notes

L’URL respecte la casse, par conséquent, assurez-vous que la casse est identique à celle utilisée précédemment lorsque vous avez nommé le groupe de ressources, et que la majuscule « G » est correcte dans « resourceGroup. »

Nous pouvons à présent extraire les informations d’identification SAP de la réponse :

$sasContent = $sasResponse.Content | ConvertFrom-Json
$sasCred = $sasContent.serviceSasToken

Si vous examinez attentivement les informations d’identification SAP, vous devez voir quelque chose qui ressemble à ceci :

PS C:\> $sasCred
sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D

Nous créons ensuite un fichier appelé « test.txt ». Ensuite, utilisez les informations d’identification SAP pour vous authentifier à l’aide de l’applet de commande New-AzStorageContent, charger le fichier dans notre conteneur d’objets blob, puis télécharger le fichier.

echo "This is a test text file." > test.txt

Veillez à installer les applets de commande du stockage Azure en premier, à l’aide de Install-Module Azure.Storage. Vous pouvez charger l’objet blob que vous venez de créer à l’aide de l’applet de commande PowerShell Set-AzStorageBlobContent:

$ctx = New-AzStorageContext -StorageAccountName <STORAGE-ACCOUNT-NAME> -SasToken $sasCred
Set-AzStorageBlobContent -File test.txt -Container <CONTAINER-NAME> -Blob testblob -Context $ctx

Réponse :

ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
BlobType          : BlockBlob
Length            : 56
ContentType       : application/octet-stream
LastModified      : 9/21/2017 6:14:25 PM +00:00
SnapshotTime      :
ContinuationToken :
Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
Name              : testblob

Vous pouvez également télécharger l’objet blob que vous avez chargé à l’aide de l’applet de commande PowerShell Get-AzStorageBlobContent :

Get-AzStorageBlobContent -Blob testblob -Container <CONTAINER-NAME> -Destination test2.txt -Context $ctx

Réponse :

ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
BlobType          : BlockBlob
Length            : 56
ContentType       : application/octet-stream
LastModified      : 9/21/2017 6:14:25 PM +00:00
SnapshotTime      :
ContinuationToken :
Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
Name              : testblob

Étapes suivantes

Dans ce tutoriel, vous avez appris à utiliser une identité managée affectée par le système de machine virtuelle Windows pour accéder au Stockage Azure à l’aide d’informations d’identification SAP. Pour en savoir plus sur le Stockage Azure SAP, consultez :