Usar políticas de acesso armazenadas para delegar acesso ao Armazenamento do Azure

Concluído

Uma SAS (assinatura de acesso compartilhado) é uma forma segura de fornecer acesso para clientes sem precisar compartilhar suas credenciais do Azure. Essa facilidade de uso acompanha uma desvantagem. Qualquer pessoa com a SAS correta pode acessar o arquivo enquanto ele ainda é válido. A única maneira de revogar o acesso ao armazenamento é regenerar as chaves de acesso. A regeneração exige que você atualize todos os aplicativos que estão usando a chave compartilhada antiga para usar a nova. Outra opção é associar as SASs a uma política de acesso armazenada.

Depois de adicionar a funcionalidade SAS ao seu aplicativo, isso realçou a falta de flexibilidade da criação de uma SAS para cada imagem com os próprios controles de expiração e de acesso. Você gostaria de atualizar seu aplicativo para usar uma política de acesso armazenada no contêiner de armazenamento. Com a política em vigor, você deseja testar se pode atualizar a expiração e afetar todos os tokens SAS criados.

Nesta unidade, você aprenderá a:

  • Use uma política de acesso armazenada.
  • Use a API de Armazenamento do C# para criar tokens SAS associados à sua nova política de acesso.
  • Teste se os tokens SAS podem ser alterados atualizando a política de acesso armazenada no portal do Azure.

O que são políticas de acesso armazenadas?

Você pode criar uma política de acesso armazenada em quatro tipos de recursos de armazenamento:

  • Contêineres de blobs
  • Compartilhamentos de arquivo
  • Filas
  • Tabelas

A política de acesso armazenada que você cria para um contêiner de blobs pode ser usada para todos os blobs contidos nele e o próprio contêiner. Uma política de acesso armazenada é criada com as seguintes propriedades:

  • Identificador: o nome que você usa para fazer referência à política de acesso armazenada.
  • Hora de início: Um valor de DateTimeOffset para a data e hora em que a política pode começar a ser usada. Esse valor pode ser nulo.
  • Hora de expiração: Um valor de DateTimeOffset para a data e hora em que a política expira. Após essa hora, as solicitações para o armazenamento falharão com uma mensagem de código de erro 403.
  • Permissões: a lista de permissões como uma cadeia de caracteres que pode ser um ou todos os acdlrw.

Screenshot of the Azure portal showing a stored access policy.

Criar políticas de acesso armazenadas

Você pode criar uma política de acesso armazenada com código C# usando os comandos portal do Azure ou da CLI do Azure.

Com código .NET em C#

BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
    Id = "stored access policy identifier",
    AccessPolicy = new BlobAccessPolicy
    {
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
        Permissions = "rw"
    }
};

blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });

Com o portal

No portal, acesse a conta de armazenamento e, em seguida, o contêiner de armazenamento de blobs. À esquerda, selecione a Política de acesso. Para adicionar uma nova política de acesso armazenada, selecione + Adicionar política.

Em seguida, você pode inserir todos os parâmetros necessários.

Screenshot of the options for adding an access policy.

Com comandos da CLI do Azure

az storage container policy create \
    --name <stored access policy identifier> \
    --container-name <container name> \
    --start <start time UTC datetime> \
    --expiry <expiry time UTC datetime> \
    --permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
    --account-key <storage account key> \
    --account-name <storage account name> \

Criar tokens SAS e associá-los a políticas de acesso armazenadas

Vamos associar a política de acesso armazenada que você criou com algum tokens SAS de que você precise. Para o aplicativo Web de imagem de diagnóstico de pacientes de sua empresa, atualize o código existente para adicionar o código anterior. Em seguida, no método que cria o token SAS, você faz referência à nova política de acesso armazenada.

Todo o código existente necessário para criar o token SAS é:

BlobSasBuilder sas = new BlobSasBuilder
{
    BlobContainerName = blob.BlobContainerName,
    BlobName = blob.Name,
    Resource = "b",
    ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};
// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);

e pode ser substituído fazendo referência à sua nova política de acesso.

// Create a user SAS that only allows reading for a minute
BlobSasBuilder sas = new BlobSasBuilder
{
    Identifier = "stored access policy identifier"
};

Você pode ter até cinco políticas de acesso armazenadas em um só contêiner de blobs.