Créer une SAP de délégation d’utilisateur pour un conteneur ou un objet blob avec PowerShell

Une signature d’accès partagé (SAP) vous permet d’accorder un accès limité aux conteneurs et aux objets blob de votre compte de stockage. Lorsque vous créez une SAP, vous spécifiez ses contraintes, notamment les ressources de Stockage Azure auxquelles un client est autorisé à accéder, les autorisations dont ils disposent sur ces ressources et la durée de validité de la SAP.

Chaque SAP est signée avec une clé. Vous pouvez signer une SAP grâce à l’une des deux méthodes suivantes :

  • Avec une clé créée en utilisant les informations d’identification Microsoft Entra. Une SAS signée avec des informations d’identification Microsoft Entra est une SAS de délégation d’utilisateur. Un client qui crée une signature d’accès partagé de délégation d’utilisateur doit avoir un rôle RBAC Azure qui inclut l’action Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Pour en savoir plus, consultez Créer une SAS de délégation d'utilisateur.
  • Avec la clé du compte de stockage. Une SAP de service et une SAP de compte sont signées avec la clé du compte de stockage. Le client qui crée une signature d’accès partagé de service doit avoir un accès direct à la clé de compte ou une autorisation Microsoft.Storage/storageAccounts/listkeys/action. Pour plus d’informations, consultez Créer une SAS de service ou Créer une SAS de compte.

Notes

Une SAP de délégation d’utilisateur offre une meilleure sécurité à une SAP signée avec la clé de compte de stockage. Microsoft recommande d’utiliser une SAP de délégation d’utilisateur dans la mesure du possible. Pour plus d’informations, consultez Accorder un accès limité aux données avec des signatures d’accès partagé (SAP).

Cet article explique comment utiliser les informations d’identification Microsoft Entra pour créer une SAS de délégation d’utilisateur pour un conteneur ou un objet blob avec Azure PowerShell.

À propos de la SAS de délégation d’utilisateur

Un jeton SAS pour l'accès à un conteneur ou à un blob peut être sécurisé à l'aide d'informations d'identification Microsoft Entra ou d'une clé de compte. Un SAS sécurisé avec les informations d'identification Microsoft Entra est appelé SAS de délégation d'utilisateur, car le jeton OAuth 2.0 utilisé pour signer le SAS est demandé au nom de l'utilisateur.

Microsoft vous recommande d'utiliser les informations d'identification Microsoft Entra lorsque cela est possible en tant que meilleure pratique de sécurité, plutôt que d'utiliser la clé de compte, qui peut être plus facilement compromise. Lorsque la conception de votre application nécessite des signatures d'accès partagé, utilisez les informations d'identification Microsoft Entra pour créer une SAS de délégation d'utilisateurs pour une sécurité supérieure. Pour plus d’informations sur la SAP de délégation d’utilisateur, consultez Créer une SAP de délégation d’utilisateur.

Attention

Tout client disposant d’une SAP valide peut accéder aux données de votre compte de stockage tel qu’autorisé par cette SAP. Il est important de protéger une SAP contre toute utilisation malveillante ou involontaire. Faites preuve de discrétion lors de la distribution d’une SAP et mettez en place un plan de révocation d’une SAS compromis.

Pour plus d’informations sur les signatures d’accès partagé, consultez Accorder un accès limité aux ressources du Stockage Azure à l’aide des signatures d’accès partagé (SAP).

Installer le module PowerShell

Pour créer une SAP de délégation d’utilisateur avec PowerShell, installez la version 1.10.0 ou ultérieure du module Az.Storage. Pour installer la dernière version du module, procédez comme suit :

  1. Désinstallez les installations précédentes d’Azure PowerShell :

    • Supprimez toutes les anciennes installations d'Azure PowerShell de Windows à l'aide du paramètre Applications et fonctionnalités situé sous Paramètres.
    • Supprimez tous les modules Azure de %Program Files%\WindowsPowerShell\Modules.
  2. Vérifiez que la dernière version de PowerShellGet est installée. Ouvrez une fenêtre Windows PowerShell et exécutez la commande suivante pour installer la dernière version :

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. Fermez, puis rouvrez la fenêtre PowerShell après l'installation de PowerShellGet.

  4. Installez la dernière version d’Azure PowerShell :

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Assurez-vous qu’Azure PowerShell version 3.2.0 ou ultérieure est installé. Exécutez la commande suivante pour installer la dernière version du module PowerShell de Stockage Azure :

    Install-Module -Name Az.Storage -Repository PSGallery -Force
    
  6. Fermez, puis rouvrez la fenêtre PowerShell.

Pour identifier quelle version du module Az.Storage est installée, exécutez la commande suivante :

Get-Module -ListAvailable -Name Az.Storage -Refresh

Pour en savoir plus sur l’installation d’Azure PowerShell, voir Installer Azure PowerShell avec PowerShellGet.

Se connecter à Azure PowerShell avec Microsoft Entra ID

Appelez la commande Connect-AzAccount pour vous connecter avec votre compte Microsoft Entra :

Connect-AzAccount

Pour plus d’informations sur la connexion avec PowerShell, consultez Se connecter avec Azure PowerShell.

Attribuer des autorisations avec Azure RBAC

Pour créer une SAS de délégation d’utilisateur à partir d’Azure PowerShell, le compte Microsoft Entra utilisé pour se connecter à PowerShell doit se voir attribuer un rôle incluant l’action Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Cette autorisation permet au compte Microsoft Entra de demander la clé de délégation d’utilisateur. La clé de délégation d’utilisateur est utilisée pour signer les SAP de délégation d’utilisateur. Le rôle qui fournit l’action Microsoft. Storage/storageAccounts/blobServices/generateUserDelegationKey doit être attribué au niveau du compte de stockage, du groupe de ressources ou de l’abonnement. Pour plus d’informations sur les autorisations Azure RBAC pour la création d’une SAP de délégation d’utilisateur, consultez la section Attribuer des autorisations avec Azure RBAC dans Créer une SAP de délégation d’utilisateur.

Si vous ne disposez pas des autorisations suffisantes pour attribuer des rôles Azure au principal de sécurité Microsoft Entra, vous devrez peut-être demander au propriétaire du compte ou à l’administrateur d’attribuer les autorisations nécessaires.

L’exemple suivant attribue le rôle de Contributeur de données d’objet blob de stockage, qui inclut l’action Microsoft. Storage/storageAccounts/blobServices/generateUserDelegationKey. Le rôle est étendu au niveau du compte de stockage.

N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs :

New-AzRoleAssignment -SignInName <email> `
    -RoleDefinitionName "Storage Blob Data Contributor" `
    -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

Pour plus d’informations sur les rôles intégrés qui incluent l’action Microsoft. Storage/storageAccounts/blobServices/generateUserDelegationKey, consultez Rôles intégrés Azure.

Utiliser les informations d’identification Microsoft Entra pour sécuriser une SAS

Lorsque vous créez une SAP de délégation d’utilisateur avec Azure PowerShell, la clé de délégation d’utilisateur utilisée pour signer la SAP est créée de manière implicite. L’heure de début et l’heure d’expiration que vous spécifiez pour la SAP sont également utilisées comme heure de début et heure d’expiration pour la clé de délégation d’utilisateur.

Étant donné que la clé de délégation d’utilisateur est valide au maximum pendant 7 jours à partir de la date de début, vous devez spécifier pour la SAP un délai d’expiration se situant dans les 7 jours après l’heure de début. La SAP n’est pas valide après l’expiration de la clé de délégation d’utilisateur. Par conséquent, une SAP dont le délai d’expiration est supérieur à 7 jours ne sera toujours valide que pendant 7 jours.

Pour créer une SAP de délégation d’utilisateur pour un conteneur ou un objet blob avec Azure PowerShell, commencez par créer un objet de contexte de stockage Azure, en spécifiant le paramètre -UseConnectedAccount. Le paramètre -UseConnectedAccount spécifie que la commande crée l’objet de contexte sous le compte Microsoft Entra avec lequel vous vous êtes connecté.

N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs :

$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount

Créer une SAP de délégation d’utilisateur pour un conteneur

Pour retourner un jeton SAS de délégation d’utilisateur pour un conteneur, appelez la commande New-AzStorageContainerSASToken en passant dans l’objet de contexte de stockage Azure que vous avez créé précédemment.

L’exemple suivant retourne un jeton SAS de délégation d’utilisateur pour un conteneur. N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs :

New-AzStorageContainerSASToken -Context $ctx `
    -Name <container> `
    -Permission racwdl `
    -ExpiryTime <date-time>

Le jeton SAS de délégation d’utilisateur retourné sera semblable à ce qui suit :

?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl

Créer une SAP de délégation d’utilisateur pour un objet blob

Pour retourner un jeton SAS de délégation d’utilisateur pour un objet blob, appelez la commande New-AzStorageBlobSASToken en passant dans l’objet de contexte de stockage Azure que vous avez créé précédemment.

La syntaxe suivante retourne une SAP de délégation d’utilisateur pour un objet blob. L’exemple spécifie le paramètre -FullUri, qui retourne l’URI de l’objet blob auquel le jeton SAS est ajouté. N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs :

New-AzStorageBlobSASToken -Context $ctx `
    -Container <container> `
    -Blob <blob> `
    -Permission racwd `
    -ExpiryTime <date-time>
    -FullUri

L’URI de SAP de délégation d’utilisateur retournée sera semblable à ce qui suit :

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd

Notes

Une SAP de délégation d’utilisateur ne prend pas en charge la définition d’autorisations avec une stratégie d’accès stockée.

Révoquer une SAP de délégation d’utilisateur

Pour révoquer une SAP de délégation d’utilisateur d’Azure PowerShell, appelez la commande Revoke-AzStorageAccountUserDelegationKeys. Cette commande révoque toutes les clés de délégation d’utilisateur associées au compte de stockage spécifié. Toutes les signatures d’accès partagé associées à ces clés sont invalidées.

N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs :

Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
    -StorageAccountName <storage-account>

Important

Les attributions de rôles Azure et de clés de délégation utilisateur sont mises en cache par le stockage Azure. Il peut donc y avoir un certain délai entre le moment où vous lancez le processus de révocation et celui où la SAP de délégation utilisateur devient non valide.

Étapes suivantes