Partilhar via


Criar definição SAS e buscar tokens de assinatura de acesso compartilhado no código (legado)

Você pode gerenciar sua conta de armazenamento com tokens de assinatura de acesso compartilhado (SAS) armazenados em seu cofre de chaves. Para obter mais informações, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando SAS.

Nota

Recomendamos usar o controle de acesso baseado em função do Azure (Azure RBAC) para proteger sua conta de armazenamento para segurança superior e facilidade de uso em relação à autorização de Chave Compartilhada.

Este artigo fornece exemplos de código .NET que cria uma definição SAS e busca tokens SAS. Consulte nosso exemplo do ShareLink para obter detalhes completos, incluindo o cliente gerado para contas de armazenamento gerenciadas pelo Key Vault. Para obter informações sobre como criar e armazenar tokens SAS, consulte Gerenciar chaves de conta de armazenamento com o Cofre de Chaves e a CLI do Azure ou Gerenciar chaves de conta de armazenamento com o Cofre de Chaves e o Azure PowerShell.

Amostras de código

No exemplo a seguir, criaremos um modelo 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();

Usando este modelo, podemos criar uma definição SAS usando 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);

Depois que a definição SAS é criada, você pode recuperar tokens SAS como segredos usando um SecretClientarquivo . Você precisa prefaciar o nome secreto 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 seu token de assinatura de acesso compartilhado estiver prestes a expirar, você poderá buscar o mesmo segredo novamente para gerar um novo.

Para obter um guia sobre como usar o token SAS recuperado do Cofre da Chave para acessar os serviços de Armazenamento do Azure, consulte Usar uma conta SAS para acessar o serviço de Blob

Nota

Seu aplicativo precisa estar preparado para atualizar a SAS se receber um 403 do armazenamento para que você possa lidar com o caso em que uma chave foi comprometida e você precisa girá-los mais rápido do que o período de rotação normal.

Próximos passos