Créer une définition SAS et récupérer les jetons de signature d’accès partagé dans le codeCreate SAS definition and fetch shared access signature tokens in code

Vous pouvez gérer votre compte de stockage avec les jetons de signature d’accès partagé(SAS) dans votre coffre de clés.You can manage your storage account with shared access signature (SAS) tokens stored in your key vault. Pour plus d’informations, consultez Accorder un accès limité aux ressources du Stockage Azure à l’aide des SAS.For more information, see Grant limited access to Azure Storage resources using 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.We recommend using Azure role-based access control (Azure RBAC) to secure your storage account for superior security and ease of use over Shared Key authorization.

Cet article fournit des exemples de code .NET qui crée une définition SAS et récupère des jetons SAS.This article provides samples of .NET code that creates a SAS definition and fetches SAS tokens. 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.See our ShareLink sample for full details including the generated client for Key Vault-managed storage accounts. 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.For information on how to create and store SAS tokens, see Manage storage account keys with Key Vault and the Azure CLI or Manage storage account keys with Key Vault and Azure PowerShell.

Exemples de codeCode samples

Dans l’exemple suivant, nous allons créer un modèle SAS :In the following example we'll create a SAS template:

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 deUsing this template, we can create a SAS definition using the

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.Once the SAS definition is created, you can retrieve SAS tokens like secrets using a SecretClient. Vous devez faire précéder le nom du secret par le nom du compte de stockage suivi d’un tiret :You need to preface the secret name with the storage account name followed by a dash:

// 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.If your shared access signature token is about to expire, you can fetch the same secret again to generate a new one.

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.For guide on how to use retrieved from Key Vault SAS token to access Azure Storage services, see Use an account SAS to access Blob service

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.Your app needs to be prepared to refresh the SAS if it gets a 403 from Storage so that you can handle the case where a key was compromised and you need to rotate them faster than the normal rotation period.

Étapes suivantesNext steps