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

Você pode gerenciar sua conta de armazenamento com tokens SAS (Assinatura de Acesso Compartilhado) armazenados no cofre de chaves. Para obter mais informações, confira Permitir acesso limitado aos recursos do Armazenamento do Azure usando a SAS.

Observação

É recomendável usar o Azure RBAC (controle de acesso baseado em função) para proteger a sua conta de armazenamento com segurança superior e com facilidade de uso da autorização de Chave Compartilhada.

Este artigo fornece exemplos de código .NET que cria uma definição de SAS e busca tokens SAS. Confira nosso exemplo de 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, confira Gerenciar chaves de conta de armazenamento com o Key Vault e a CLI do Azure ou Gerenciar chaves de conta de armazenamento com o Key Vault e o Azure PowerShell.

Exemplos de código

No seguinte exemplo, 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 esse modelo, podemos criar uma definição de 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 de SAS for criada, você poderá recuperar os tokens SAS como segredos usando um SecretClient. O nome do segredo precisa ser precedido pelo nome da conta de armazenamento seguido por 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 compartilhado estiver prestes a expirar, você poderá buscar o mesmo segredo novamente para gerar um novo.

Para ver um guia sobre como usar um token SAS recuperado do Key Vault para acessar os serviços do Armazenamento do Azure, confira Usar uma SAS de conta para acessar o serviço Blob

Observação

Seu aplicativo precisará estar preparado para atualizar a SAS se receber um erro 403 do Armazenamento para você poder lidar com o caso em que uma chave ficou comprometida. Você precisará fazer a rotação delas mais rápido do que o período de rotação normal.

Próximas etapas