Skapa SAS-definition och hämta signaturtoken för delad åtkomst i kod (äldre)

Du kan hantera ditt lagringskonto med SAS-token (signatur för delad åtkomst) som lagras i ditt nyckelvalv. Mer information finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av SAS.

Anteckning

Vi rekommenderar att du använder rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att skydda ditt lagringskonto för överlägsen säkerhet och användarvänlighet via auktorisering av delad nyckel.

Den här artikeln innehåller exempel på .NET-kod som skapar en SAS-definition och hämtar SAS-token. Se vårt ShareLink-exempel för fullständig information, inklusive den genererade klienten för Key Vault hanterade lagringskonton. Information om hur du skapar och lagrar SAS-token finns i Hantera lagringskontonycklar med Key Vault och Azure CLI eller Hantera lagringskontonycklar med Key Vault och Azure PowerShell.

Kodexempel

I följande exempel skapar vi en SAS-mall:

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();

Med den här mallen kan vi skapa en SAS-definition med hjälp av

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);

När SAS-definitionen har skapats kan du hämta SAS-token som hemligheter med hjälp av en SecretClient. Du måste förorda det hemliga namnet med lagringskontots namn följt av ett bindestreck:

// 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);

Om din signaturtoken för delad åtkomst håller på att gå ut kan du hämta samma hemlighet igen för att generera en ny.

Guide om hur du använder hämtad från Key Vault SAS-token för åtkomst till Azure Storage-tjänster finns i Använda ett konto-SAS för att få åtkomst till Blob Service

Anteckning

Din app måste vara beredd att uppdatera SAS om den får en 403 från Storage så att du kan hantera fallet där en nyckel komprometterades och du måste rotera dem snabbare än den normala rotationsperioden.

Nästa steg