Créer une SAP de compte avec .NET

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 à l’aide des informations d’identification d’Azure Active Directory (Azure AD). Une SAP signée avec des informations d’identification d’Azure AD est une SAP de délégation d’utilisateur. Un client qui crée une SAP de délégation d’utilisateur doit être affecté à un rôle RBAC Azure qui inclut Microsoft.Stockage Action /storageAccounts/blobServices/generateUserDelegationKey. Pour en savoir plus, consultez Créer une SAP 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 SAP de service doit avoir un accès direct à la clé de compte ou être affecté à Microsoft.Stockage Autorisation /storageAccounts/listkeys/action.

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 la clé du compte de stockage pour créer une SAP de compte avec la bibliothèque cliente Stockage Azure pour .NET.

Créer une SAP de compte

Une SAP de compte est signée avec la clé d’accès au compte. Utilisez la classe StorageSharedKeyCredential afin de créer les informations d’identification utilisées pour signer le jeton SAS. Créez ensuite un objet AccountSasBuilder et appelez ToSasQueryParameters pour obtenir la chaîne de jeton SAP.


private static string GetAccountSASToken(StorageSharedKeyCredential key)
{
    // Create a SAS token that's valid for one hour.
    AccountSasBuilder sasBuilder = new AccountSasBuilder()
    {
        Services = AccountSasServices.Blobs | AccountSasServices.Files,
        ResourceTypes = AccountSasResourceTypes.Service,
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
        Protocol = SasProtocol.Https
    };

    sasBuilder.SetPermissions(AccountSasPermissions.Read |
        AccountSasPermissions.Write);

    // Use the key to get the SAS token.
    string sasToken = sasBuilder.ToSasQueryParameters(key).ToString();

    Console.WriteLine("SAS token for the storage account is: {0}", sasToken);
    Console.WriteLine();

    return sasToken;
}

Utilisation d’une SAP de compte à partir d’un client

Afin utiliser la SAP de compte pour accéder aux API au niveau du service pour le service BLOB, construisez un client de service d’objet blob à l’aide de la SAP et du point de terminaison de stockage d’objets blob de votre compte de stockage.


private static void UseAccountSAS(Uri blobServiceUri, string sasToken)
{
    var blobServiceClient = new BlobServiceClient
        (new Uri($"{blobServiceUri}?{sasToken}"), null);

    BlobRetentionPolicy retentionPolicy = new BlobRetentionPolicy();
    retentionPolicy.Enabled = true;
    retentionPolicy.Days = 7;

    blobServiceClient.SetProperties(new BlobServiceProperties()
    {
        HourMetrics = new BlobMetrics()
        {
            RetentionPolicy = retentionPolicy,
            Version = "1.0"
        },
        MinuteMetrics = new BlobMetrics()
        {
            RetentionPolicy = retentionPolicy,
            Version = "1.0"
        },
        Logging = new BlobAnalyticsLogging()
        {
            Write = true,
            Read = true,
            Delete = true,
            RetentionPolicy = retentionPolicy,
            Version = "1.0"
        }
    });

    // The permissions granted by the account SAS also permit you to retrieve service properties.

    BlobServiceProperties serviceProperties = blobServiceClient.GetProperties().Value;
    Console.WriteLine(serviceProperties.HourMetrics.RetentionPolicy);
    Console.WriteLine(serviceProperties.HourMetrics.Version);
}

Étapes suivantes