Conceder acesso limitado aos recursos de armazenamento do Azure usando SAS (assinaturas de acesso compartilhado)Grant limited access to Azure Storage resources using shared access signatures (SAS)

Uma SAS (assinatura de acesso compartilhado) fornece acesso delegado seguro aos recursos em sua conta de armazenamento sem comprometer a segurança de seus dados.A shared access signature (SAS) provides secure delegated access to resources in your storage account without compromising the security of your data. Com uma SAS, você tem controle granular sobre como um cliente pode acessar seus dados.With a SAS, you have granular control over how a client can access your data. Você pode controlar quais recursos o cliente pode acessar, quais permissões eles têm sobre esses recursos e por quanto tempo a SAS é válida, entre outros parâmetros.You can control what resources the client may access, what permissions they have on those resources, and how long the SAS is valid, among other parameters.

Tipos de assinaturas de Acesso compartilhado.Types of shared access signatures

O armazenamento do Azure dá suporte a três tipos de assinaturas de acesso compartilhado:Azure Storage supports three types of shared access signatures:

  • SAS de delegação de usuário (visualização).User delegation SAS (preview). Uma SAS de delegação de usuário é protegida com as credenciais do Azure Active Directory (AD do Azure) e também pelas permissões especificadas para a SAS.A user delegation SAS is secured with Azure Active Directory (Azure AD) credentials and also by the permissions specified for the SAS. Uma SAS de delegação de usuário se aplica somente ao armazenamento de BLOB.A user delegation SAS applies to Blob storage only.

    Para obter mais informações sobre a SAS de delegação de usuário, consulte criar uma delegação de usuário de SAS (API REST).For more information about the user delegation SAS, see Create a user delegation SAS (REST API).

  • SAS de Serviço.Service SAS. Uma SAS de serviço é protegida com a chave da conta de armazenamento.A service SAS is secured with the storage account key. Uma SAS de serviço Delega acesso a um recurso em apenas um dos serviços de armazenamento do Azure: armazenamento de BLOBs, armazenamento de filas, armazenamento de tabelas ou arquivos do Azure.A service SAS delegates access to a resource in only one of the Azure Storage services: Blob storage, Queue storage, Table storage, or Azure Files.

    Para obter mais informações sobre a SAS do serviço, consulte criar um serviço SAS (API REST).For more information about the service SAS, see Create a service SAS (REST API).

  • SAS de Conta.Account SAS. Uma SAS de conta é protegida com a chave da conta de armazenamento.An account SAS is secured with the storage account key. Uma SAS de conta delega acesso a recursos em um ou mais dos serviços de armazenamento.An account SAS delegates access to resources in one or more of the storage services. Todas as operações disponíveis por meio de uma SAS de delegação de serviço ou de usuário também estão disponíveis por meio de uma SAS de conta.All of the operations available via a service or user delegation SAS are also available via an account SAS. Além disso, com a SAS da conta, você pode delegar acesso a operações que se aplicam ao nível do serviço, como obter/definir propriedades de serviço e obter as operações de Estatísticas de serviço .Additionally, with the account SAS, you can delegate access to operations that apply at the level of the service, such as Get/Set Service Properties and Get Service Stats operations. Você também pode delegar acesso a operações de leitura, gravação e exclusão em contêineres de blob, tabelas, filas e compartilhamentos de arquivos que não são permitidos com um SAS de serviço.You can also delegate access to read, write, and delete operations on blob containers, tables, queues, and file shares that are not permitted with a service SAS.

    Para obter mais informações sobre a SAS da conta, crie uma SAS da conta (API REST).For more information about the account SAS, Create an account SAS (REST API).

Observação

A Microsoft recomenda que você use as credenciais do Azure AD quando possível como uma prática recomendada de segurança, em vez de usar a chave de conta, que pode ser mais facilmente comprometida.Microsoft recommends that you use Azure AD credentials when possible as a security best practice, rather than using the account key, which can be more easily compromised. Quando o design do aplicativo exigir assinaturas de acesso compartilhado para acesso ao armazenamento de BLOB, use as credenciais do Azure AD para criar uma SAS de delegação de usuário quando possível para segurança superior.When your application design requires shared access signatures for access to Blob storage, use Azure AD credentials to create a user delegation SAS when possible for superior security.

Uma assinatura de acesso compartilhado pode assumir uma destas duas formas:A shared access signature can take one of two forms:

  • SAS ad hoc: Quando você cria uma SAS ad hoc, a hora de início, a hora de expiração e as permissões para a SAS são todas especificadas no URI de SAS (ou implícita, se a hora de início for omitida).Ad hoc SAS: When you create an ad hoc SAS, the start time, expiry time, and permissions for the SAS are all specified in the SAS URI (or implied, if start time is omitted). Qualquer tipo de SAS pode ser uma SAS ad hoc.Any type of SAS can be an ad hoc SAS.
  • SAS de serviço com política de acesso armazenada: Uma política de acesso armazenada é definida em um contêiner de recursos, que pode ser um contêiner de BLOBs, uma tabela, uma fila ou um compartilhamento de arquivos.Service SAS with stored access policy: A stored access policy is defined on a resource container, which can be a blob container, table, queue, or file share. A política de acesso armazenada pode ser usada para gerenciar restrições para uma ou mais assinaturas de acesso compartilhado do serviço.The stored access policy can be used to manage constraints for one or more service shared access signatures. Quando você associa uma SAS de serviço a uma política de acesso armazenada, a SAS herda as restrições @ no__t-0the hora de início, hora de expiração e permissões @ no__t-1defined para a política de acesso armazenada.When you associate a service SAS with a stored access policy, the SAS inherits the constraints—the start time, expiry time, and permissions—defined for the stored access policy.

Observação

Uma SAS de delegação de usuário ou uma SAS de conta deve ser uma SAS ad hoc.A user delegation SAS or an account SAS must be an ad hoc SAS. As políticas de acesso armazenadas não têm suporte para a SAS de delegação de usuário ou a SAS da conta.Stored access policies are not supported for the user delegation SAS or the account SAS.

Como funciona uma assinatura de acesso compartilhadoHow a shared access signature works

Uma assinatura de acesso compartilhado é um URI assinado que aponta para um ou mais recursos de armazenamento e inclui um token que contém um conjunto especial de parâmetros de consulta.A shared access signature is a signed URI that points to one or more storage resources and includes a token that contains a special set of query parameters. O token indica como os recursos podem ser acessados pelo cliente.The token indicates how the resources may be accessed by the client. Um dos parâmetros de consulta, a assinatura, é construído a partir dos parâmetros de SAS e assinado com a chave que foi usada para criar a SAS.One of the query parameters, the signature, is constructed from the SAS parameters and signed with the key that was used to create the SAS. Esta assinatura é usada pelo armazenamento do Azure para autorizar o acesso ao recurso de armazenamento.This signature is used by Azure Storage to authorize access to the storage resource.

Assinatura SASSAS signature

Você pode assinar uma SAS de uma das duas maneiras:You can sign a SAS in one of two ways:

  • Com uma chave de delegação de usuário que foi criada usando as credenciais do Azure Active Directory (AD do Azure).With a user delegation key that was created using Azure Active Directory (Azure AD) credentials. Uma SAS de delegação de usuário é assinada com a chave de delegação de usuário.A user delegation SAS is signed with the user delegation key.

    Para obter a chave de delegação de usuário e criar a SAS, uma entidade de segurança do Azure AD deve ser atribuída a uma função de RBAC (controle de acesso baseado em função) que inclui a ação Microsoft. Storage/storageAccounts/blobservices/generateUserDelegationKey .To get the user delegation key and create the SAS, an Azure AD security principal must be assigned a role-based access control (RBAC) role that includes the Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey action. Para obter informações detalhadas sobre as funções RBAC com permissões para obter a chave de delegação de usuário, consulte criar uma delegação de usuário (API REST).For detailed information about RBAC roles with permissions to get the user delegation key, see Create a user delegation SAS (REST API).

  • Com a chave da conta de armazenamento.With the storage account key. Uma SAS de serviço e uma SAS de conta são assinadas com a chave da conta de armazenamento.Both a service SAS and an account SAS are signed with the storage account key. Para criar uma SAS que é assinada com a chave de conta, um aplicativo deve ter acesso à chave de conta.To create a SAS that is signed with the account key, an application must have access to the account key.

Token SASSAS token

O token SAS é uma cadeia de caracteres que você gera no lado do cliente, por exemplo, usando uma das bibliotecas de cliente do armazenamento do Azure.The SAS token is a string that you generate on the client side, for example by using one of the Azure Storage client libraries. O token SAS não é acompanhado pelo armazenamento do Azure de nenhuma forma.The SAS token is not tracked by Azure Storage in any way. Você pode criar um número ilimitado de tokens SAS no lado do cliente.You can create an unlimited number of SAS tokens on the client side. Depois de criar uma SAS, você pode distribuí-la aos aplicativos cliente que exigem acesso aos recursos em sua conta de armazenamento.After you create a SAS, you can distribute it to client applications that require access to resources in your storage account.

Quando um aplicativo cliente fornece um URI de SAS para o armazenamento do Azure como parte de uma solicitação, o serviço verifica os parâmetros SAS e a assinatura para verificar se ele é válido para autorizar a solicitação.When a client application provides a SAS URI to Azure Storage as part of a request, the service checks the SAS parameters and signature to verify that it is valid for authorizing the request. Se o serviço verificar que a assinatura é válida, a solicitação será autorizada.If the service verifies that the signature is valid, then the request is authorized. Caso contrário, a solicitação será recusada com o código de erro 403 (proibido).Otherwise, the request is declined with error code 403 (Forbidden).

Aqui está um exemplo de um URI de SAS de serviço, mostrando o URI de recurso e o token SAS:Here's an example of a service SAS URI, showing the resource URI and the SAS token:

Componentes de um URI de SAS de serviço

Quando usar uma assinatura de acesso compartilhadoWhen to use a shared access signature

Use uma SAS quando desejar fornecer acesso seguro aos recursos em sua conta de armazenamento para qualquer cliente que não tenha permissões para esses recursos.Use a SAS when you want to provide secure access to resources in your storage account to any client who does not otherwise have permissions to those resources.

Um cenário comum em que uma SAS é útil é um serviço onde os usuários leem e gravam seus próprios dados na sua conta de armazenamento.A common scenario where a SAS is useful is a service where users read and write their own data to your storage account. Em um cenário em que uma conta de armazenamento armazena dados do usuário, há dois padrões de design comuns:In a scenario where a storage account stores user data, there are two typical design patterns:

  1. Os clientes carregam e baixam dados por meio de um serviço de proxy front-end, que executa a autenticação.Clients upload and download data via a front-end proxy service, which performs authentication. Esse serviço de proxy front-end tem a vantagem de permitir a validação de regras de negócio, mas, para grandes quantidades de dados ou transações de alto volume, a criação de um serviço que possa ser dimensionado de acordo com a demanda pode ser difícil ou dispendiosa.This front-end proxy service has the advantage of allowing validation of business rules, but for large amounts of data or high-volume transactions, creating a service that can scale to match demand may be expensive or difficult.

    Diagrama do cenário: serviço de proxy front-end

  2. Um serviço leve autentica o cliente conforme necessário e gera uma SAS.A lightweight service authenticates the client as needed and then generates a SAS. Depois que o aplicativo cliente recebe a SAS, ele pode acessar os recursos da conta de armazenamento diretamente com as permissões definidas pela SAS e para o intervalo permitido pela SAS.Once the client application receives the SAS, they can access storage account resources directly with the permissions defined by the SAS and for the interval allowed by the SAS. A SAS reduz a necessidade de roteamento de todos os dados por meio do serviço de proxy front-end.The SAS mitigates the need for routing all data through the front-end proxy service.

    Diagrama do cenário: serviço do provedor de SAS

Muitos serviços reais podem usar uma combinação dessas duas abordagens.Many real-world services may use a hybrid of these two approaches. Por exemplo, alguns dados podem ser processados e validados por meio do proxy front-end, enquanto outros são salvos e/ou lidos diretamente usando SAS.For example, some data might be processed and validated via the front-end proxy, while other data is saved and/or read directly using SAS.

Além disso, uma SAS é necessária para autorizar o acesso ao objeto de origem em uma operação de cópia em determinados cenários:Additionally, a SAS is required to authorize access to the source object in a copy operation in certain scenarios:

  • Quando você copia um blob para outro que reside em uma conta de armazenamento diferente, deve usar uma SAS para autorizar acesso ao blob de origem.When you copy a blob to another blob that resides in a different storage account, you must use a SAS to authorize access to the source blob. Outra opção é usar uma SAS para também autorizar acesso ao blob de destino.You can optionally use a SAS to authorize access to the destination blob as well.
  • Quando você copia um arquivo para outro que reside em uma conta de armazenamento diferente, deve usar uma SAS para autorizar acesso ao arquivo de origem.When you copy a file to another file that resides in a different storage account, you must use a SAS to authorize access to the source file. Outra opção é usar uma SAS para também autorizar acesso ao arquivo de destino.You can optionally use a SAS to authorize access to the destination file as well.
  • Quando você estiver copiando um blob em um arquivo, ou um arquivo em um blob, use uma SAS para autorizar acesso ao objeto de origem, mesmo se os objetos de origem e destino residirem dentro da mesma conta de armazenamento.When you copy a blob to a file, or a file to a blob, you must use a SAS to authorize access to the source object, even if the source and destination objects reside within the same storage account.

Práticas recomendadas ao usar SASBest practices when using SAS

Ao usar assinaturas de acesso compartilhado nos seus aplicativos, você precisará estar ciente de dois riscos possíveis:When you use shared access signatures in your applications, you need to be aware of two potential risks:

  • Se ocorrer perda de uma SAS, ela poderá ser usada por qualquer pessoa que a obtiver, o que poderá comprometer a sua conta de armazenamento.If a SAS is leaked, it can be used by anyone who obtains it, which can potentially compromise your storage account.
  • Se uma SAS fornecida para um aplicativo cliente expirar e o aplicativo não conseguir recuperar uma nova SAS do seu serviço, a funcionalidade do aplicativo poderá ser prejudicada.If a SAS provided to a client application expires and the application is unable to retrieve a new SAS from your service, then the application's functionality may be hindered.

As recomendações a seguir para usar assinaturas de acesso compartilhado podem ajudar a atenuar esses riscos:The following recommendations for using shared access signatures can help mitigate these risks:

  • Sempre use HTTPS para criar ou distribuir uma SAS.Always use HTTPS to create or distribute a SAS. Se uma SAS for passada por HTTP e interceptada, um invasor que estiver realizando um ataque intermediário poderá lê-la e, em seguida, usá-la exatamente como o usuário previsto, o que poderá comprometer dados confidenciais ou gerar dados corrompidos pelo usuário mal-intencionado.If a SAS is passed over HTTP and intercepted, an attacker performing a man-in-the-middle attack is able to read the SAS and then use it just as the intended user could have, potentially compromising sensitive data or allowing for data corruption by the malicious user.
  • Use uma SAS de delegação de usuário quando possível.Use a user delegation SAS when possible. Uma SAS de delegação de usuário fornece segurança superior a uma SAS de serviço ou a uma SAS de conta.A user delegation SAS provides superior security to a service SAS or an account SAS. Uma SAS de delegação de usuário é protegida com as credenciais do Azure AD, para que você não precise armazenar sua chave de conta com seu código.A user delegation SAS is secured with Azure AD credentials, so that you do not need to store your account key with your code.
  • Ter um plano de revogação em vigor para uma SAS.Have a revocation plan in place for a SAS. Verifique se você está preparado para responder se uma SAS está comprometida.Make sure you are prepared to respond if a SAS is compromised.
  • Defina uma política de acesso armazenada para uma SAS de serviço.Define a stored access policy for a service SAS. As políticas de acesso armazenadas oferecem a opção de revogar permissões para uma SAS de serviço sem a necessidade de regenerar as chaves da conta de armazenamento.Stored access policies give you the option to revoke permissions for a service SAS without having to regenerate the storage account keys. Defina o vencimento para um momento muito distante no futuro (ou infinito) e certifique-se de que ela seja atualizada regularmente para uma data ainda mais além no futuro.Set the expiration on these very far in the future (or infinite) and make sure it's regularly updated to move it farther into the future.
  • Use tempos de expiração de curto prazo em uma SAS do serviço SAS ad hoc ou SAS da conta.Use near-term expiration times on an ad hoc SAS service SAS or account SAS. Dessa forma, mesmo se uma SAS for comprometida, ela será válida apenas por um breve período.In this way, even if a SAS is compromised, it's valid only for a short time. Esta prática será especialmente importante se você não puder fazer referência a uma política de acesso armazenada.This practice is especially important if you cannot reference a stored access policy. Períodos de vencimento breves também limitam a quantidade de dados que podem ser gravados em um blob, limitando o tempo disponível para carregá-los.Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.
  • Faça com que os clientes renovem a SAS automaticamente, se necessário.Have clients automatically renew the SAS if necessary. Os clientes devem renovar a SAS bem antes da expiração, para que haja tempo para novas tentativas, caso o serviço que fornece a SAS não esteja disponível.Clients should renew the SAS well before the expiration, in order to allow time for retries if the service providing the SAS is unavailable. Se o SAS se destinar a ser usado para um pequeno número de operações imediatas e de curta duração que devem ser concluídas no período de expiração, isso poderá ser desnecessário, pois não se espera que a SAS seja renovada.If your SAS is meant to be used for a small number of immediate, short-lived operations that are expected to be completed within the expiration period, then this may be unnecessary as the SAS is not expected to be renewed. No entanto, se você tiver um cliente que está sempre fazendo solicitações via SAS, surge a possibilidade de expiração.However, if you have client that is routinely making requests via SAS, then the possibility of expiration comes into play. A principal consideração consiste em equilibrar a necessidade de curta duração da SAS (como mencionado acima) com a necessidade de garantir que o cliente solicite renovação com antecedência suficiente (para evitar uma interrupção devido ao vencimento da SAS antes de uma renovação bem-sucedida).The key consideration is to balance the need for the SAS to be short-lived (as previously stated) with the need to ensure that the client is requesting renewal early enough (to avoid disruption due to the SAS expiring prior to successful renewal).
  • Tenha cuidado com a hora de início da SAS.Be careful with SAS start time. Se você definir a hora de início de uma SAS para agora, poderão ser observadas falhas intermitentemente para os primeiros minutos devido à defasagem horária (diferenças na hora atual de acordo com computadores diferentes).If you set the start time for a SAS to now, then due to clock skew (differences in current time according to different machines), failures may be observed intermittently for the first few minutes. Em geral, defina a hora de início para pelo menos 15 minutos no passado.In general, set the start time to be at least 15 minutes in the past. Ou então, simplesmente não a defina, o que a tornará imediatamente válida em todos os casos.Or, don't set it at all, which will make it valid immediately in all cases. Em geral, o mesmo também se aplica à hora de vencimento – lembre-se de que pode haver até 15 minutos de defasagem horária em um dos dois sentidos em qualquer solicitação.The same generally applies to expiry time as well--remember that you may observe up to 15 minutes of clock skew in either direction on any request. Para os clientes que usam uma versão de REST anterior à 2012-02-12, a duração máxima de uma SAS que não faz referência a uma política de acesso armazenada é 1 hora, e qualquer política que especifique um período maior do que esse falhará.For clients using a REST version prior to 2012-02-12, the maximum duration for a SAS that does not reference a stored access policy is 1 hour, and any policies specifying longer term than that will fail.
  • Seja específico com o recurso a ser acessado.Be specific with the resource to be accessed. Uma prática recomendada de segurança consiste em fornecer os privilégios mínimos necessários a um usuário.A security best practice is to provide a user with the minimum required privileges. Se um usuário precisar apenas de acesso de leitura a uma única entidade, conceda-lhe acesso de leitura a essa única entidade, e não acesso de leitura/gravação/exclusão a todas as entidades.If a user only needs read access to a single entity, then grant them read access to that single entity, and not read/write/delete access to all entities. Isso também ajuda a reduzir o dano caso uma SAS seja comprometida, pois a SAS terá menos poder nas mãos de um invasor.This also helps lessen the damage if a SAS is compromised because the SAS has less power in the hands of an attacker.
  • Entenda que sua conta será cobrada por qualquer uso, incluindo por meio de uma SAS.Understand that your account will be billed for any usage, including via a SAS. Se você fornecer acesso de gravação a um blob, um usuário poderá optar por carregar um blob de 200 GB.If you provide write access to a blob, a user may choose to upload a 200 GB blob. Se você também tiver concedido o acesso de leitura, será possível baixá-la 10 vezes, incorrendo em 2 TB de custos de saída.If you've given them read access as well, they may choose to download it 10 times, incurring 2 TB in egress costs for you. Como mencionado, forneça permissões limitadas para ajudar a reduzir a ações em potencial de usuários mal-intencionados.Again, provide limited permissions to help mitigate the potential actions of malicious users. Use SAS de curta duração para reduzir essa ameaça (mas, tenha cuidado com a defasagem horária na hora de término).Use short-lived SAS to reduce this threat (but be mindful of clock skew on the end time).
  • Validar os dados gravados usando uma SAS.Validate data written using a SAS. Quando um aplicativo cliente gravar dados na sua conta de armazenamento, tenha em mente de que poderá haver problemas com esses dados.When a client application writes data to your storage account, keep in mind that there can be problems with that data. Se o seu aplicativo necessitar de que esses dados sejam validados ou autorizados antes que estejam prontos para uso, você deverá realizar essa validação depois que os dados forem gravados e antes que eles sejam usados pelo seu aplicativo.If your application requires that data be validated or authorized before it is ready to use, you should perform this validation after the data is written and before it is used by your application. Essa prática também protegerá contra dados corrompidos ou mal-intencionados que estiverem sendo gravados na sua conta por um usuário que adquiriu a SAS de forma adequada ou por um usuário que estiver explorando uma SAS vazada.This practice also protects against corrupt or malicious data being written to your account, either by a user who properly acquired the SAS, or by a user exploiting a leaked SAS.
  • Saiba quando não usar uma SAS.Know when not to use a SAS. Às vezes, os riscos associados a uma determinada operação em relação à sua conta de armazenamento superam os benefícios do uso de uma SAS.Sometimes the risks associated with a particular operation against your storage account outweigh the benefits of using a SAS. Para essas operações, crie um serviço de camada intermediária que grave na sua conta de armazenamento após a validação, a autenticação e a auditoria da regra de negócio.For such operations, create a middle-tier service that writes to your storage account after performing business rule validation, authentication, and auditing. Além disso, algumas vezes é mais simples de gerenciar o acesso de outras maneiras.Also, sometimes it's simpler to manage access in other ways. Por exemplo, se quiser tornar todos os blobs de um contêiner publicamente legíveis, você poderá tornar o contêiner Público, em vez de fornecer uma SAS para o acesso de cada cliente.For example, if you want to make all blobs in a container publicly readable, you can make the container Public, rather than providing a SAS to every client for access.
  • Use Azure Monitor e logs de armazenamento do Azure para monitorar seu aplicativo.Use Azure Monitor and Azure Storage logs to monitor your application. Você pode usar o Azure Monitor e o log da análise de armazenamento para observar qualquer pico nas falhas de autorização devido a uma interrupção no serviço do provedor SAS ou à remoção inadvertida de uma política de acesso armazenada.You can use Azure Monitor and storage analytics logging to observe any spike in authorization failures due to an outage in your SAS provider service or to the inadvertent removal of a stored access policy. Para obter mais informações, consulte métricas de armazenamento do Azure em log de Azure monitor e análise de armazenamento do Azure.For more information, see Azure Storage metrics in Azure Monitor and Azure Storage Analytics logging.

Introdução à SASGet started with SAS

Para começar a usar as assinaturas de acesso compartilhado, consulte os artigos a seguir para cada tipo de SAS.To get started with shared access signatures, see the following articles for each SAS type.

SAS de delegação de usuárioUser delegation SAS

SAS do serviçoService SAS

SAS da contaAccount SAS

Próximos passosNext steps