Créer une définition SAS et récupérer les jetons de signature d’accès partagé dans le code (hérité)

Vous pouvez gérer votre compte de stockage avec les jetons de signature d’accès partagé(SAS) dans votre coffre de clés. Pour plus d’informations, consultez Accorder un accès limité aux ressources du Stockage Azure à l’aide des SAS.

Notes

Nous vous recommandons d’utiliser le contrôle d’accès en fonction du rôle Azure (RBAC Azure) pour sécuriser votre compte de stockage et bénéficier ainsi d’une sécurité renforcée et d’une plus grande facilité d’utilisation par rapport à une autorisation de clé partagée.

Cet article fournit des exemples de code .NET qui crée une définition SAS et récupère des jetons SAS. Pour plus d’informations, consultez notre exemple ShareLink, notamment le client généré pour les comptes de stockage gérés par Key Vault. Pour plus d’informations sur la façon de créer et de stocker des jetons SAS, consultez Gérer les clés de compte de stockage avec Key Vault et l’interface de ligne de commande Azure ou Gérer les clés de compte de stockage avec Key Vault et Azure PowerShell.

Exemples de code

Dans l’exemple suivant, nous allons créer un modèle SAS :

private static string BuildSasDefinitionTemplate(bool readOnly) =>
    new StringBuilder("sv=2018-03-28")  // service version
        .Append("&spr=https")           // HTTPS only
        .Append("&ss=bf")               // blobs and files only
        .Append("&srt=o")               // applies to objects only
        .Append(readOnly ? "&sp=r" : "&sp=rw")  // read-only or read-write
        .ToString();

À l’aide de ce modèle, nous pouvons créer une définition SAS au moyen de

string sasDefinitionName = BuildSasDefinitionName(Tag, readOnly, duration);
SasDefinitionAttributes sasDefinitionAttributes = new SasDefinitionAttributes
{
    Enabled = true,
};

Dictionary<string, string> tags = new Dictionary<string, string>
{
    [Tag] = "1",
};

SasDefinitionBundle createdSasDefinition = await storageClient.SetSasDefinitionAsync(
    storageAccountName,
    sasDefinitionName,
    sasTemplate,
    SasTokenType.Account,
    duration,
    sasDefinitionAttributes,
    tags,
    s_cancellationTokenSource.Token);

Une fois la définition SAS créée, vous pouvez récupérer des jetons SAS comme des secrets au moyen de SecretClient. Vous devez faire précéder le nom du secret par le nom du compte de stockage suivi d’un tiret :

// Build our SAS template, get an existing SAS definition, or create a new one.
string sasTemplate = BuildSasDefinitionTemplate(readOnly);
string sasDefinitionName = await GetOrCreateSasDefinitionAsync(storageClient, storageAccountName, sasTemplate, days, readOnly);

// Now we can create a SecretClient and generate a new SAS token from the storage account and SAS definition names.
SecretClient secretClient = new SecretClient(vaultUri, credential, options);
KeyVaultSecret sasToken = await secretClient.GetSecretAsync($"{storageAccountName}-{sasDefinitionName}", cancellationToken: s_cancellationTokenSource.Token);

Si votre jeton de signature d’accès partagé arrive à expiration, vous pouvez récupérer le même secret pour en générer un nouveau.

Vous obtenez des instructions sur l’utilisation d’un jeton SAS récupéré à partir de Key Vault pour accéder aux services de stockage Azure en consultant Utiliser une signature d’accès partagé de compte pour accéder au service BLOB.

Notes

Votre application doit être préparée à l’actualisation de la SAP si elle reçoit du stockage une erreur 403, afin de pouvoir gérer le cas où une clé a été compromise de sorte que vous devez opérer une rotation de clé avant la fin de la période de rotation normale.

Étapes suivantes