Criar uma SAS de delegação de usuário para um contêiner ou blob com o CLI do Azure

Uma SAS (Assinatura de Acesso Compartilhado) permite conceder acesso limitado a contêineres e blobs da conta de armazenamento. Ao criar uma SAS, você especificará suas restrições, inclusive que recursos do Armazenamento do Azure um cliente terá permissão para acessar, que permissões ele terá nesses recursos e por quanto tempo a SAS é válida.

Cada SAS é assinada com uma chave. Você pode assinar uma SAS de uma das duas maneiras:

  • Com uma chave criada utilizando as credenciais do Microsoft Entra. Uma SAS que é assinada pelas credenciais do Microsoft Entra é uma SAS de delegação de usuário. É necessário atribuir um cliente que cria uma SAS de delegação de usuário a uma função RBAC do Azure que inclua a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Para saber mais, consulte Criar uma SAS de delegação de usuário.
  • Com uma chave da conta de armazenamento. Tanto uma SAS de serviço quanto uma SAS de conta são assinadas com a chave da conta de armazenamento. É necessário que o cliente que cria uma SAS de serviço tenha acesso direto à chave da conta ou receba a permissão Microsoft.Storage/storageAccounts/listkeys/action. Para saber mais, consulte Criar uma SAS de serviço ou Criar uma SAS de conta.

Observação

Uma SAS de delegação de usuário oferece mais segurança do que uma SAS que é assinada com a chave da conta de armazenamento. A Microsoft recomenda usar uma SAS de delegação de usuário quando possível. Para saber mais, confira Conceder acesso limitado a dados com assinaturas de acesso compartilhado (SAS).

Este artigo mostra como usar as credenciais do Microsoft Entra para criar uma SAS de delegação de usuário para um contêiner ou blob com a CLI do Azure.

Sobre a delegação de usuários SAS

Um token SAS para acesso a um contêiner ou blob pode ser protegido usando credenciais do Microsoft Entra ou uma chave de conta. Uma SAS protegida com as credenciais do Microsoft Entra é chamada de SAS de delegação de usuário, pois o token do OAuth 2.0 usado para assinar a SAS é solicitado em nome do usuário.

A Microsoft recomenda que você use as credenciais do Microsoft Entra quando possível como uma melhor prática de segurança, em vez de usar a chave da conta, que pode ser comprometida com mais facilidade. Quando o design do aplicativo exigir assinaturas de acesso compartilhado, use as credenciais do Microsoft Entra para criar uma SAS de delegação de usuário para segurança superior. Para obter mais informações sobre o SAS de delegação de usuário, consulte Criar um SAS de delegação de usuário.

Cuidado

Qualquer cliente que possua um SAS válido pode acessar os dados em sua conta de armazenamento conforme permitido por esse SAS. É importante proteger um SAS contra uso malicioso ou não intencional. Use discrição ao distribuir um SAS e tenha um plano em vigor para revogar um SAS comprometido.

Para obter mais informações sobre assinaturas de acesso compartilhado, confira Conceder acesso limitado a recursos de Armazenamento do Azure usando SAS (assinaturas de acesso compartilhado).

Instalar a versão mais recente da CLI do Azure

Para usar a CLI do Azure para proteger uma SAS com as credenciais do Microsoft Entra, primeiro verifique se você instalou a versão mais recente da CLI do Azure. Para obter informações sobre como instalar a CLI do Azure, confira Instalar a CLI do Azure.

Para criar uma SAS de delegação de usuário usando a CLI do Azure, verifique se você instalou a versão 2.0.78 ou posterior. Para verificar sua versão instalada, use o comando az --version.

Entrar com as credenciais do Microsoft Entra

Entrar na CLI do Azure com as credenciais do Microsoft Entra. Para obter mais informações, veja Entrar com a CLI do Azure.

Atribuir permissões com o RBAC do Azure

Para criar uma SAS de delegação de usuário do Azure PowerShell, a conta do Microsoft Entra usada para entrar na CLI do Azure deve receber uma função que inclua a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Essa permissão permite que a conta do Microsoft Entra solicite a chave de delegação do usuário. Essa chave é usada para assinar a SAS de delegação de usuário. A função que fornece a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey deve ser atribuída no nível da conta de armazenamento, do grupo de recursos ou da assinatura.

Se você não tiver permissões suficientes para atribuir funções do Azure a uma entidade de segurança do Microsoft Entra, talvez seja necessário solicitar ao proprietário ou administrador da conta que atribua as permissões necessárias.

O exemplo a seguir atribui a função de colaborador de dados de blob de armazenamento, que inclui a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. A função tem o escopo no nível da conta de armazenamento.

Lembre-se de substituir os valores dos espaços reservados entre colchetes angulares pelos seus próprios valores:

az role assignment create \
    --role "Storage Blob Data Contributor" \
    --assignee <email> \
    --scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

Para saber mais sobre as funções internas que incluem a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, consulte Funções internas do Azure.

Usar as credenciais do Microsoft Entra para proteger uma SAS

Quando uma SAS de delegação de usuário é criada com a CLI do Azure, a chave de delegação de usuário usada para assiná-la é criada implicitamente. A hora de início e a hora de expiração especificadas para a SAS também são usadas como a hora de início e a hora de expiração da chave de delegação de usuário.

Como o intervalo máximo de validade da chave de delegação de usuário é de sete dias a partir da data de início, você deve especificar uma hora de expiração para a SAS que esteja dentro desse período. Como a chave de delegação de usuário expira em sete dias e invalida a SAS depois disso, mesmo que uma SAS tenha o tempo de expiração superior a sete dias, ela ainda terá validade apenas durante esse período.

Ao criar uma SAS de delegação de usuário, --auth-mode login e --as-user parameters são obrigatórios. Especifique o logon para o parâmetro --auth-mode de modo que as solicitações feitas ao Armazenamento do Microsoft Azure sejam autorizadas com suas credenciais do Microsoft Entra. Especifique o parâmetro --as-user para indicar que a SAS retornada deve ser uma SAS de delegação de usuário.

Criar uma SAS de delegação de usuário para um contêiner

Para criar uma SAS de delegação de usuário para um contêiner com a CLI do Azure, chame o comando az storage container generate-sas.

As permissões com suporte para uma SAS de delegação de usuário em um contêiner incluem Adicionar, Criar, Excluir, Listar, Ler e Gravar. As permissões podem ser especificadas isoladamente ou combinadas. Para obter mais informações sobre essas permissões, confira Criar uma SAS de delegação de usuário.

O exemplo a seguir retorna um token SAS de delegação de usuário para um contêiner. Lembre-se de substituir os valores de espaço reservado entre colchetes pelos seus:

az storage container generate-sas \
    --account-name <storage-account> \
    --name <container> \
    --permissions acdlrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user

O token SAS de delegação de usuário retornado será semelhante ao seguinte:

se=2019-07-27&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sktid=<sktid>&skt=2019-07-26T18%3A01%3A22Z&ske=2019-07-27T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

Observação

O token SAS retornado pelo portal não inclui o caractere delimitador ("?") para a cadeia de caracteres de consulta da URL. Se você estiver acrescentando o token SAS a uma URL de recurso, lembre-se de também acrescentar o caractere delimitador.

Criar uma SAS de delegação de usuário para um blob

Para criar uma SAS de delegação de usuário para um contêiner com a CLI do Azure, chame o comando az storage container generate-sas.

As permissões com suporte para uma SAS de delegação de usuário em um blob incluem Adicionar, Criar, Excluir, Ler e Gravar. As permissões podem ser especificadas isoladamente ou combinadas. Para obter mais informações sobre essas permissões, confira Criar uma SAS de delegação de usuário.

A sintaxe a seguir retorna uma SAS de delegação de usuário para um blob. O exemplo especifica o parâmetro --full-uri, que retorna o URI do blob com o token SAS anexado. Lembre-se de substituir os valores de espaço reservado entre colchetes pelos seus:

az storage blob generate-sas \
    --account-name <storage-account> \
    --container-name <container> \
    --name <blob> \
    --permissions acdrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user \
    --full-uri

O token SAS de delegação de usuário retornado será semelhante ao seguinte:

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?se=2019-08-03&sp=rw&sv=2018-11-09&sr=b&skoid=<skoid>&sktid=<sktid>&skt=2019-08-02T2
2%3A32%3A01Z&ske=2019-08-03T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

Observação

O token SAS retornado pela CLI do Azure não inclui o caractere delimitador ("?") para a cadeia de caracteres de consulta da URL. Se estiver acrescentando o token SAS a uma URL de recurso, lembre-se de acrescentar o caractere delimitador à URL do recurso antes de acrescentar o token SAS.

Uma SAS de delegação de usuário não dá suporte à definição de permissões com uma política de acesso armazenada.

Revogar uma SAS de delegação de usuário

Para revogar uma SAS de delegação de usuário da CLI do Azure, chame o comando az storage account revoke-delegation-keys. Esse comando revoga todas as chaves de delegação de usuário associadas à conta de armazenamento especificada. Todas as assinaturas de acesso compartilhado associadas a essas chaves são invalidadas.

Lembre-se de substituir os valores dos espaços reservados entre colchetes angulares pelos seus próprios valores:

az storage account revoke-delegation-keys \
    --name <storage-account> \
    --resource-group <resource-group>

Importante

Tanto a chave de delegação de usuário quanto as atribuições de função do Azure são armazenadas em cache pelo Armazenamento do Azure. Por isso, pode haver um atraso entre a inicialização do processo de revogação e a invalidação de uma SAS de delegação de usuário existente.

Próximas etapas