Utiliser des signatures d’accès partagé pour déléguer l’accès au Stockage Azure
En utilisant une signature d’accès partagé, vous pouvez déléguer l’accès à vos ressources. Les clients n’accèdent pas directement aux informations d’identification de votre compte de stockage, et vous contrôlez avec précision à quelles ressources ils accèdent.
Après avoir étudié toutes les options d’autorisation, vous décidez d’examiner plus en détail les signatures d’accès partagé. Vous souhaitez créer et utiliser une signature d’accès partagé dans une application web C# .NET. Vous voulez aussi suivre les bonnes pratiques de Microsoft définissant quand et comment utiliser une signature d’accès partagé.
Dans cette leçon, vous allez découvrir le fonctionnement d’une signature d’accès partagé d’un point de vue technique, mais aussi quel code C# vous devez écrire pour l’utiliser.
Comment fonctionnent les signatures d’accès partagé
Une signature d’accès partagé (SAP) a deux composants, un URI qui pointe vers une ou plusieurs ressources de stockage et un jeton qui indique comment le client peut accéder aux ressources.
Dans un URI unique, comme https://medicalrecords.blob.core.windows.net/patient-images/patient-116139-nq8z7f.jpg?sp=r&st=2020-01-20T11:42:32Z&se=2020-01-20T19:42:32Z&spr=https&sv=2019-02-02&sr=b&sig=SrW1HZ5Nb6MbRzTbXCaPm%2BJiSEn15tC91Y4umMPwVZs%3D
, vous pouvez séparer l’URI du jeton SAS comme ceci :
URI | Jeton SAS |
---|---|
https://medicalrecords.blob.core.windows.net/patient-images/patient-116139-nq8z7f.jpg? |
sp=r&st=2020-01-20T11:42:32Z&se=2020-01-20T19:42:32Z&spr=https&sv=2019-02-02&sr=b&sig=SrW1HZ5Nb6MbRzTbXCaPm%2BJiSEn15tC91Y4umMPwVZs%3D |
Le jeton SAS contient les composants, ou paramètres de requête, suivants.
Paramètre de requête | Nom du champ | Exemple | Description |
---|---|---|---|
sp | autorisation signée | sp=r | Indique une ou plusieurs opérations que le client peut effectuer. Les valeurs peuvent être composées : a (add), c (create), d (delete), l (list), r (read) et w (write). sp=r est en lecture seule ; sp=acdlrw octroie tous les droits disponibles. |
st | heure de début | st=2020-01-20T11:42:32Z | Date/heure du début d’accès. |
se | heure d’expiration | se=2020-01-20T19:42:32Z | Date/heure de la fin d’accès. En fonction de la date de début, cet exemple octroie huit heures d’accès. |
spr | protocole signé | spr=https | Protocole autorisé pour une demande effectuée avec la signature SAS. Champ facultatif, qui a des valeurs possibles à la fois HTTPS et HTTP (valeur par défaut) ou HTTPS uniquement. |
sv | version signée | sv=2019-02-02 | Version du service de l’API Stockage à utiliser. |
sr | étendue de la ressource | sr=b | Type du stockage auquel accéder. Les valeurs disponibles sont les suivantes : b (blob), c (container), d (directory), f (file), s (share) |
sig | signature | sig=SrW1...wVZs%3D | Signature de chiffrement. |
La signature est effectuée avec la clé de votre compte de stockage quand vous créez une signature d’accès partagé de service ou de compte. Si vous utilisez un principal de sécurité Microsoft Entra avec un accès au stockage, vous créez une signature d’accès partagé de délégation utilisateur. Vous accordez également l’action Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey au principal.
Créer une signature SAS dans .NET
Puisque votre entreprise fournit un accès à des tiers, vous ne pouvez pas utiliser Microsoft Entra ID pour créer des principaux de service pour chaque tiers qui nécessite l’accès aux images médicales. Votre application utilise une clé de compte de stockage pour chaque fichier individuel. Les étapes suivantes montrent comment créer une signature d’accès partagé à l’aide du code C#.
Créer un client de conteneur d’objets blob pour vous connecter au compte de stockage sur Azure
BlobContainerClient container = new BlobContainerClient( "ConnectionString", "Container" );
Récupérer l’objet blob pour lequel vous souhaitez créer un jeton SAS et créer un BlobClient
foreach (BlobItem blobItem in container.GetBlobs())
{
BlobClient blob = container.GetBlobClient(blobItem.Name);
}
Créer un objet BlobSasBuilder pour l’objet blob que vous utilisez pour générer le jeton SAS
BlobSasBuilder sas = new BlobSasBuilder
{
BlobContainerName = blob.BlobContainerName,
BlobName = blob.Name,
Resource = "b",
ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};
// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);
Authentifier un appel à la méthode ToSasQueryParameters de l’objet BlobSasBuilder
StorageSharedKeyCredential storageSharedKeyCredential = new StorageSharedKeyCredential( "AccountName", "AccountKey");
sasToken = sas.ToSasQueryParameters(storageSharedKeyCredential).ToString();
Bonnes pratiques
Dans le but de réduire les risques potentiels liés à l’utilisation d’une signature d’accès partagé, Microsoft donne quelques conseils :
- Pour distribuer de manière sécurisée une signature d’accès partagé et contribuer à empêcher les attaques de l’intercepteur, choisissez toujours le protocole HTTPS.
- La signature d’accès partagé la plus sûre est la délégation utilisateur. Utilisez-la dans la mesure du possible parce qu’elle vous évite d’avoir à enregistrer votre clé de compte de stockage dans le code. Vous devez utiliser Microsoft Entra ID pour gérer les informations d’identification ; cette option risque de ne pas être possible pour votre solution.
- Essayez de définir votre heure d’expiration à la plus petite valeur utile. Si une clé SAS devient compromise, elle peut continuer à être utilisée pendant un temp court seulement.
- Appliquez la règle du privilège minimum requis. Accordez seulement l’accès qui est strictement nécessaire. Par exemple, dans votre application, l’accès en lecture seule est suffisant.
- Dans certaines situations, l’emploi d’une signature d’accès partagé n’est pas la solution adéquate. Si l’utilisation d’une signature d’accès partagé présente un risque inacceptable, créez un service de niveau intermédiaire pour gérer les utilisateurs et leur accès au stockage.
La méthode la plus flexible et sécurisée pour utiliser une signature SAS de compte ou de service consiste à associer les jetons SAS à une stratégie d’accès stockée. Dans une leçon ultérieure, vous allez découvrir ces avantages et leur mode de fonctionnement.