Criar a definição de SAS e obter tokens de assinatura de acesso partilhado no código (legado)

Pode gerir a sua conta de armazenamento com tokens de assinatura de acesso partilhado (SAS) armazenados no cofre de chaves. Para obter mais informações, veja Conceder acesso limitado aos recursos do Armazenamento do Azure com SAS.

Nota

Recomendamos que utilize o controlo de acesso baseado em funções do Azure (RBAC do Azure) para proteger a sua conta de armazenamento para uma segurança superior e facilidade de utilização através da autorização de Chave Partilhada.

Este artigo fornece exemplos de código .NET que cria uma definição de SAS e obtém tokens DE SAS. Veja o nosso exemplo do ShareLink para obter detalhes completos, incluindo o cliente gerado para contas de armazenamento geridas por Key Vault. Para obter informações sobre como criar e armazenar tokens DE SAS, veja Gerir chaves de conta de armazenamento com Key Vault e a CLI do Azure ou Gerir chaves de conta de armazenamento com Key Vault e Azure PowerShell.

Exemplos de código

No exemplo seguinte, vamos criar um modelo de 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();

Com este modelo, podemos criar uma definição de SAS com o

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

Assim que a definição de SAS for criada, pode obter tokens de SAS como segredos com um SecretClient. Tem de prefácio do nome do segredo com o nome da conta de armazenamento seguido de um traço:

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

Se o token de assinatura de acesso partilhado estiver prestes a expirar, poderá obter o mesmo segredo novamente para gerar um novo.

Para obter um guia sobre como utilizar obtido a partir de Key Vault token de SAS para aceder aos serviços de Armazenamento do Azure, veja Utilizar uma SAS de conta para aceder ao serviço Blob

Nota

A sua aplicação tem de estar preparada para atualizar a SAS se obtiver um 403 do Armazenamento para que possa lidar com o caso em que uma chave foi comprometida e precisar de rodá-las mais rapidamente do que o período de rotação normal.

Passos seguintes