Utilizar assinaturas de acesso partilhado (SAS)Using shared access signatures (SAS)

Uma assinatura de acesso partilhado (SAS) fornece uma forma de conceder acesso limitado aos objetos na sua conta de armazenamento para outros clientes, sem expor a sua chave de conta.A shared access signature (SAS) provides you with a way to grant limited access to objects in your storage account to other clients, without exposing your account key. Neste artigo, vamos fornecer uma visão geral do modelo de SAS, rever as melhores práticas SAS e ver alguns exemplos.In this article, we provide an overview of the SAS model, review SAS best practices, and look at some examples.

Para obter exemplos de código adicional através da SAS além dos apresentados aqui, consulte introdução ao armazenamento de Blobs do Azure no .NET e outros exemplos disponíveis no exemplos de código do Azure biblioteca.For additional code examples using SAS beyond those presented here, see Getting Started with Azure Blob Storage in .NET and other samples available in the Azure Code Samples library. Pode transferir os aplicativos de exemplo e executá-los ou procurar o código no GitHub.You can download the sample applications and run them, or browse the code on GitHub.

O que é uma assinatura de acesso partilhado?What is a shared access signature?

Uma assinatura de acesso partilhado fornece acesso delegado a recursos na sua conta de armazenamento.A shared access signature provides delegated access to resources in your storage account. Com uma SAS, pode conceder clientes acesso a recursos na sua conta de armazenamento sem partilhar as chaves de conta.With a SAS, you can grant clients access to resources in your storage account, without sharing your account keys. Este é o ponto fundamental da utilização de assinaturas de acesso partilhado nas suas aplicações – uma SAS é uma forma segura de partilhar os seus recursos de armazenamento sem comprometer as chaves da conta.This is the key point of using shared access signatures in your applications--a SAS is a secure way to share your storage resources without compromising your account keys.

Dica

O Azure suporta de armazenamento para autorizar o acesso a recursos de armazenamento de BLOBs e filas com o Azure Active Directory (Azure AD).Azure Storage supports authorizing access to Blob and Queue storage resources using Azure Active Directory (Azure AD). Autorizar os utilizadores ou aplicações que utilizam um token de OAuth 2.0 devolvido pelo Azure AD fornece segurança superior e a facilidade de utilização ao longo de autorização de chave partilhada e assinaturas de acesso (SAS) partilhado.Authorizing users or applications using an OAuth 2.0 token returned by Azure AD provides superior security and ease of use over Shared Key authorization and shared access signatures (SAS). Com o Azure AD, não é necessário para armazenar a chave de acesso de conta com o seu código e o risco de potenciais vulnerabilidades de segurança.With Azure AD, there is no need to store the account access key with your code and risk potential security vulnerabilities.

A Microsoft recomenda a utilização do Azure AD com as suas aplicações de armazenamento do Azure, sempre que possível.Microsoft recommends using Azure AD with your Azure Storage applications when possible. Para obter mais informações, consulte autorizar o acesso ao Azure os blobs e filas com o Azure Active Directory.For more information, see Authorize access to Azure blobs and queues using Azure Active Directory.

Importante

A chave da conta de armazenamento é semelhante à palavra-passe de raiz da conta de armazenamento.Your storage account key is similar to the root password for your storage account. Tenha sempre o cuidado de proteger a chave da conta.Always be careful to protect your account key. Evite distribuí-la a outros utilizadores, pré-programá-la ou guardá-la num texto simples em qualquer lugar que seja acessível a outras pessoas.Avoid distributing it to other users, hard-coding it, or saving it anywhere in plaintext that is accessible to others. Regenere a chave da conta através do portal do Azure se considerar que poderá ter sido comprometida.Regenerate your account key using the Azure portal if you believe it may have been compromised.

Tokens SAS (assinatura de acesso partilhado) são fundamentais para proteger, assim como as chaves de acesso da conta.SAS (Shared Access Signature) tokens are critical to protect just like the account access keys. Enquanto estiver fornecendo granularidade SAS concede aos clientes acesso aos recursos na sua conta de armazenamento e não devem ser partilhada publicamente.While providing granularity SAS grants clients access to the resources in your storage account and should not be shared publicly. Quando partilha é necessária para resolução de problemas motivos considere utilizar uma versão eliminada de quaisquer ficheiros de registo ou eliminar os tokens de SAS (caso exista) dos arquivos de log e certificar-se de que as capturas de ecrã não contêm as informações de SAS ou.When sharing is required for troubleshooting reasons consider using a redacted version of any log files or deleting the SAS tokens (if present) from the log files, and make sure the screenshots don't contain the SAS information either.

Uma SAS dá-lhe um controlo granular sobre o tipo de acesso que concede aos clientes que tenham a SAS, incluindo:A SAS gives you granular control over the type of access you grant to clients who have the SAS, including:

  • O intervalo durante o qual a SAS é válida, incluindo a hora de início e a hora de expiração.The interval over which the SAS is valid, including the start time and the expiry time.
  • As permissões concedidas a SAs.The permissions granted by the SAS. Por exemplo, uma SAS para um blob poderá conceder a leitura e permissões de escrita a esse blob, mas não eliminar as permissões.For example, a SAS for a blob might grant read and write permissions to that blob, but not delete permissions.
  • Um endereço IP opcional ou intervalo de endereços IP dos quais o armazenamento do Azure irá aceitar a SAS.An optional IP address or range of IP addresses from which Azure Storage will accept the SAS. Por exemplo, poderá especificar um intervalo de endereços IP que pertençam a sua organização.For example, you might specify a range of IP addresses belonging to your organization.
  • O protocolo através do qual o armazenamento do Azure irá aceitar a SAS.The protocol over which Azure Storage will accept the SAS. Pode utilizar este parâmetro opcional para restringir o acesso aos clientes através de HTTPS.You can use this optional parameter to restrict access to clients using HTTPS.

Quando deve usar uma assinatura de acesso partilhado?When should you use a shared access signature?

Pode utilizar uma SAS para fornecer acesso a recursos na sua conta de armazenamento para qualquer cliente não possessing chaves de acesso da conta de armazenamento.You can use a SAS when you want to provide access to resources in your storage account to any client not possessing your storage account's access keys. Sua conta de armazenamento inclui tanto uma chave de acesso primária e secundária, que concedem acesso administrativo à sua conta e todos os recursos dentro da mesma.Your storage account includes both a primary and secondary access key, both of which grant administrative access to your account, and all resources within it. Expor qualquer uma destas chaves abre-se a sua conta para a possibilidade de utilização por acidente ou maliciosa.Exposing either of these keys opens your account to the possibility of malicious or negligent use. Assinaturas de acesso partilhado são uma alternativa de segura que permite aos clientes ler, escrever e eliminar dados na sua conta de armazenamento, de acordo com as permissões que se tiver concedido e sem necessidade de uma chave de conta.Shared access signatures provide a safe alternative that allows clients to read, write, and delete data in your storage account according to the permissions you've explicitly granted, and without need for an account key.

Um cenário comum em que é útil uma SAS é um serviço em que os utilizadores ler e escrever seus próprios dados à 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. Num cenário em que uma conta de armazenamento armazena dados de utilizador, existem dois padrões de design típico:In a scenario where a storage account stores user data, there are two typical design patterns:

  1. Os clientes carregar e transferir dados através de um serviço de proxy de front-end, que efetua a autenticação.Clients upload and download data via a front-end proxy service, which performs authentication. Este serviço de proxy de front-end tem a vantagem de permitir que a validação de regras de negócios, mas para grandes quantidades de dados ou transações de grande volume, criação de um serviço que possa ser dimensionada para corresponder a pedido pode ser difícil ou dispendioso.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 de front-end

  2. Um serviço simples autentica o cliente conforme necessário e, em seguida, gera uma SAS.A lightweight service authenticates the client as needed and then generates a SAS. Assim que o cliente recebe a SAS, podem aceder a recursos da conta de armazenamento diretamente com as permissões definidas pela SAS e para o intervalo permitido a SAs.Once the client 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 para todos os dados através do serviço de front-end de proxy de encaminhamento.The SAS mitigates the need for routing all data through the front-end proxy service.

    Diagrama do cenário: Serviço do fornecedor SAS

Muitos serviços do mundo real, podem utilizar uma mistura dessas duas abordagens.Many real-world services may use a hybrid of these two approaches. Por exemplo, alguns dados possam ser processados e validados através do proxy de front-end, enquanto outros dados são guardados e/ou diretamente através da SAS de leitura.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, terá de utilizar uma SAS para autorizar o acesso ao objeto de origem numa operação de cópia em determinados cenários:Additionally, you will need to use a SAS to authorize access to the source object in a copy operation in certain scenarios:

  • Quando copiar um blob para o blob de outro que reside numa conta de armazenamento diferentes, tem de utilizar uma SAS para autorizar o acesso para o 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. Opcionalmente, pode utilizar uma SAS para autorizar o acesso para o blob de destino também.You can optionally use a SAS to authorize access to the destination blob as well.
  • Quando copiar um ficheiro para outro ficheiro que reside numa conta de armazenamento diferentes, tem de utilizar uma SAS para autorizar o acesso ao ficheiro 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. Opcionalmente, pode utilizar uma SAS para autorizar o acesso ao ficheiro de destino.You can optionally use a SAS to authorize access to the destination file as well.
  • Quando copiar um blob para um arquivo ou um ficheiro para um blob, tem de utilizar uma SAS para autorizar o acesso ao objeto de origem, mesmo que os objetos de origem e destino residam na 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.

Tipos de assinaturas de acesso partilhadoTypes of shared access signatures

Pode criar dois tipos de assinaturas de acesso partilhado:You can create two types of shared access signatures:

  • Serviço SAS.Service SAS. O serviço SAS delega o acesso a um recurso em apenas um dos serviços de armazenamento: o serviço Blob, Fila, Tabela ou Ficheiro.The service SAS delegates access to a resource in just one of the storage services: the Blob, Queue, Table, or File service. Ver construir uma SAS de serviço e exemplos de SAS de serviço para obter informações aprofundadas sobre a construção do token SAS de serviço.See Constructing a Service SAS and Service SAS Examples for in-depth information about constructing the service SAS token.
  • Conta SAS.Account SAS. O conta SAS delegados acesso a recursos num ou mais dos serviços de armazenamento.The account SAS delegates access to resources in one or more of the storage services. Todas as operações disponíveis através de um serviço SAS também estão disponíveis por meio de uma conta SAS.All of the operations available via a service SAS are also available via an account SAS. Além disso, com a conta SAS, pode delegar o acesso às operações que se aplicam a um determinado serviço, tal como propriedades do serviço de Get/Set e obter estatísticas do serviço. Também pode delegar o acesso às operações de leitura, escrita e eliminação em contentores de blobs, tabelas, filas e partilhas de ficheiros que não são permitidos com um serviço SAS.Additionally, with the account SAS, you can delegate access to operations that apply to a given service, such as Get/Set Service Properties and Get Service Stats. 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. Ver construir uma SAS de conta para obter informações aprofundadas sobre a construção do token SAS de conta.See Constructing an Account SAS for in-depth information about constructing the account SAS token.

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

Uma assinatura de acesso partilhado é 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 com os parâmetros SAS e assinado com a chave de conta.One of the query parameters, the signature, is constructed from the SAS parameters and signed with the account key. Essa assinatura é utilizada 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.

Eis um exemplo de um URI de SAS, que mostra o URI do recurso e o token SAS:Here's an example of a SAS URI, showing the resource URI and the SAS token:

Componentes de um URI de SAS

O token SAS é uma cadeia de caracteres é gerar no cliente lado (consulte a exemplos SAS secção para obter exemplos de código).The SAS token is a string you generate on the client side (see the SAS examples section for code examples). Um token SAS que gere com a biblioteca de cliente de armazenamento, por exemplo, não é registado pelo armazenamento do Azure de qualquer forma.A SAS token you generate with the storage client library, for example, is not tracked by Azure Storage in any way. Pode criar um número ilimitado de SAS tokens no lado do cliente.You can create an unlimited number of SAS tokens on the client side.

Quando um cliente fornece um URI de SAS para o armazenamento do Azure como parte de um pedido, o serviço verifica os parâmetros SAS e a assinatura para verificar se é válido para autenticar o pedido.When a client 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 authenticating the request. Se o serviço verifica se a assinatura é válida, em seguida, a solicitação é 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).

Parâmetros de assinatura de acesso partilhadoShared access signature parameters

A conta SAS e tokens SAS de serviço incluem alguns parâmetros comuns e também de ter alguns parâmetros que são diferentes.The account SAS and service SAS tokens include some common parameters, and also take a few parameters that are different.

Parâmetros comuns a conta SAS e tokens SAS de serviçoParameters common to account SAS and service SAS tokens

  • Versão de API um parâmetro opcional que especifica a versão do serviço de armazenamento a utilizar para executar o pedido.Api version An optional parameter that specifies the storage service version to use to execute the request.
  • Versão de serviço um parâmetro obrigatório que especifica a versão do serviço de armazenamento a utilizar para autorizar a solicitação.Service version A required parameter that specifies the storage service version to use to authorize the request.
  • Hora de início.Start time. Este é o tempo em que a SAS se torna válida.This is the time at which the SAS becomes valid. A hora de início para uma assinatura de acesso partilhado é opcional.The start time for a shared access signature is optional. Se uma hora de início for omitida, a SAS tem efeita imediato.If a start time is omitted, the SAS is effective immediately. A hora de início tem de ser expresso em UTC (Hora Universal Coordenada), com um designador de UTC especial ("Z"), por exemplo 1994-11-05T13:15:30Z.The start time must be expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z"), for example 1994-11-05T13:15:30Z.
  • Hora de expiração.Expiry time. Este é o tempo após o qual a SAS já não é válida.This is the time after which the SAS is no longer valid. Melhores práticas recomendável que especifica uma hora de expiração para um SAS, ou associá-lo a uma política de acesso armazenado.Best practices recommend that you either specify an expiry time for a SAS, or associate it with a stored access policy. A hora de expiração tem de ser expresso em UTC (Hora Universal Coordenada), com um designador de UTC especial ("Z"), por exemplo 1994-11-05T13:15:30Z (ver mais abaixo).The expiry time must be expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z"), for example 1994-11-05T13:15:30Z (see more below).
  • Permissões.Permissions. As permissões especificadas no SAS indicam as operações que o cliente pode realizar com o recurso de armazenamento através da SAS.The permissions specified on the SAS indicate what operations the client can perform against the storage resource using the SAS. Permissões disponíveis diferem para uma conta SAS e um serviço SAS.Available permissions differ for an account SAS and a service SAS.
  • IP.IP. Um parâmetro opcional que especifica um endereço IP ou um intervalo de endereços IP fora do Azure (consulte a secção estado de configuração de sessão de encaminhamento de Express Route) partir do qual aceitar pedidos.An optional parameter that specifies an IP address or a range of IP addresses outside of Azure (see the section Routing session configuration state for Express Route) from which to accept requests.
  • Protocolo.Protocol. Um parâmetro opcional que especifica o protocolo permitidos para um pedido.An optional parameter that specifies the protocol permitted for a request. Os valores possíveis são HTTPS e HTTP (https,http), que é apenas o valor predefinido, ou HTTPS (https).Possible values are both HTTPS and HTTP (https,http), which is the default value, or HTTPS only (https). Tenha em atenção que HTTP apenas não é um valor permitido.Note that HTTP only is not a permitted value.
  • Assinatura.Signature. A assinatura é construída de outros parâmetros especificados como parte de token e, em seguida, são encriptados.The signature is constructed from the other parameters specified as part token and then encrypted. A assinatura é utilizada para autorizar o acesso aos recursos de armazenamento especificada.The signature is used to authorize access to the specified storage resources.

Parâmetros para um token SAS de serviçoParameters for a service SAS token

  • Recursos de armazenamento.Storage resource. Recursos de armazenamento para o qual pode delegar o acesso com um serviço SAS incluem:Storage resources for which you can delegate access with a service SAS include:
    • Contentores e blobsContainers and blobs
    • Partilhas de ficheiros e ficheirosFile shares and files
    • FilasQueues
    • As tabelas e intervalos de entidades da tabela.Tables and ranges of table entities.

Parâmetros para um token SAS de contaParameters for an account SAS token

  • Serviço ou serviços.Service or services. Uma conta SAS pode delegar o acesso a um ou mais dos serviços de armazenamento.An account SAS can delegate access to one or more of the storage services. Por exemplo, pode criar uma conta SAS, que delega o acesso ao serviço de BLOBs e ficheiros.For example, you can create an account SAS that delegates access to the Blob and File service. Ou pode criar uma SAS que o acesso de delegados para os quatro serviços (Blob, fila, tabela e ficheiro).Or you can create a SAS that delegates access to all four services (Blob, Queue, Table, and File).
  • Tipos de recursos de armazenamento.Storage resource types. Uma conta SAS aplica-se para uma ou mais classes de recursos de armazenamento, em vez de um recurso específico.An account SAS applies to one or more classes of storage resources, rather than a specific resource. Pode criar uma conta SAS para delegar acesso para:You can create an account SAS to delegate access to:
    • APIs de nível de serviço, que são chamadas contra o recurso de conta de armazenamento.Service-level APIs, which are called against the storage account resource. Os exemplos incluem propriedades do serviço de Get/Set, obter estatísticas de serviço, e lista contentores/filas/tabelas/partilhas.Examples include Get/Set Service Properties, Get Service Stats, and List Containers/Queues/Tables/Shares.
    • APIs de nível de contêiner, que são chamadas em relação os objetos de contentor para cada serviço: BLOBs, contentores, filas, tabelas e partilhas de ficheiros.Container-level APIs, which are called against the container objects for each service: blob containers, queues, tables, and file shares. Os exemplos incluem criar/eliminar contentor, criar/eliminar fila, criar/eliminar tabela, Criar/Eliminar partilhae o Lista de Blobs/ficheiros e diretórios.Examples include Create/Delete Container, Create/Delete Queue, Create/Delete Table, Create/Delete Share, and List Blobs/Files and Directories.
    • APIs de nível de objeto, que são chamadas em relação a blobs, fila de mensagens, entidades de tabelas e ficheiros.Object-level APIs, which are called against blobs, queue messages, table entities, and files. Por exemplo, colocar Blob, entidade de consulta, obter mensagens, e criar ficheiro.For example, Put Blob, Query Entity, Get Messages, and Create File.

Exemplos de URIs SASExamples of SAS URIs

Exemplo de URI de SAS de serviçoService SAS URI example

Eis um exemplo de um serviço de URI de SAS que fornece permissões de escrita para um blob e ler.Here is an example of a service SAS URI that provides read and write permissions to a blob. A tabela divide cada parte do URI para compreender como contribui para a SAS:The table breaks down each part of the URI to understand how it contributes to the SAS:

https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D
NameName Parte SASSAS portion DescriçãoDescription
URI de blobBlob URI https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt O endereço do blob.The address of the blob. Tenha em atenção que através de HTTPS é altamente recomendado.Note that using HTTPS is highly recommended.
Versão de serviços de armazenamentoStorage services version sv=2015-04-05 Para a versão 2012-02-12 dos serviços de armazenamento e mais tarde, esse parâmetro indica a versão a utilizar.For storage services version 2012-02-12 and later, this parameter indicates the version to use.
Hora de inícioStart time st=2015-04-29T22%3A18%3A26Z Especificado no fuso horário UTC.Specified in UTC time. Se pretender que a SAS para ser válida imediatamente, omita a hora de início.If you want the SAS to be valid immediately, omit the start time.
Hora de expiraçãoExpiry time se=2015-04-30T02%3A23%3A26Z Especificado no fuso horário UTC.Specified in UTC time.
ResourceResource sr=b O recurso é um blob.The resource is a blob.
PermissõesPermissions sp=rw As permissões concedidas a SAs incluem Read (r) e escrita (w).The permissions granted by the SAS include Read (r) and Write (w).
Intervalo de IPIP range sip=168.1.5.60-168.1.5.70 O intervalo de endereços IP do qual será aceita um pedido.The range of IP addresses from which a request will be accepted.
ProtocolProtocol spr=https São permitidos apenas os pedidos através de HTTPS.Only requests using HTTPS are permitted.
assinaturaSignature sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D Utilizado para autorizar o acesso para o blob.Used to authorize access to the blob. A assinatura é um HMAC calculada com uma cadeia de caracteres para assinar e a chave a utilizar o algoritmo SHA256 e, em seguida, codificados usando a codificação Base64.The signature is an HMAC computed over a string-to-sign and key using the SHA256 algorithm, and then encoded using Base64 encoding.

Exemplo de URI de SAS de contaAccount SAS URI example

Eis um exemplo de uma conta SAS que utiliza os mesmos parâmetros comuns no token.Here is an example of an account SAS that uses the same common parameters on the token. Uma vez que estes parâmetros são descritos acima, eles não são descritos aqui.Since these parameters are described above, they are not described here. Apenas os parâmetros que são específicas para a conta que SAs é descrita na tabela abaixo.Only the parameters that are specific to account SAS are described in the table below.

https://myaccount.blob.core.windows.net/?restype=service&comp=properties&sv=2015-04-05&ss=bf&srt=s&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=F%6GRVAZ5Cdj2Pw4tgU7IlSTkWgn7bUkkAg8P6HESXwmf%4B
NameName Parte SASSAS portion DescriçãoDescription
URI do recursoResource URI https://myaccount.blob.core.windows.net/?restype=service&comp=properties O Blob ponto final de serviço, com parâmetros para obter as propriedades do serviço (quando chamado com GET) ou definir as propriedades do serviço (quando chamado conjunto).The Blob service endpoint, with parameters for getting service properties (when called with GET) or setting service properties (when called with SET).
ServiçosServices ss=bf A SAS se aplica aos serviços Blob e ficheiroThe SAS applies to the Blob and File services
Tipos de recursoResource types srt=s A SAS se aplica a operações de nível de serviço.The SAS applies to service-level operations.
PermissõesPermissions sp=rw As permissões de concedem acesso para ler e operações de escrita.The permissions grant access to read and write operations.

Considerando que permissões são restritas para o nível de serviço, as operações acessíveis com esta SAS são obter propriedades do serviço Blob (ler) e definir propriedades do serviço Blob (escrita).Given that permissions are restricted to the service level, accessible operations with this SAS are Get Blob Service Properties (read) and Set Blob Service Properties (write). No entanto, com um URI de recurso diferente, o mesmo token SAS poderia também ser utilizado para delegar o acesso ao obter estatísticas do serviço Blob (ler).However, with a different resource URI, the same SAS token could also be used to delegate access to Get Blob Service Stats (read).

Controlar um SAS com uma política de acesso armazenadasControlling a SAS with a stored access policy

Uma assinatura de acesso partilhado pode efetuar uma das duas formas:A shared access signature can take one of two forms:

  • SAS ad hoc: Quando cria uma SAS ad hoc, a hora de início, hora de expiração e as permissões para a SAS são todos especificadas no URI de SAS (explícita ou implícita, no caso em que a hora de início é 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, in the case where start time is omitted). Este tipo de SAS pode ser criado como uma conta SAS ou um serviço SAS.This type of SAS can be created as an account SAS or a service SAS.
  • SAS com a política de acesso armazenado: Uma política de acesso armazenado é definido num contêiner de recursos – um contentor de BLOBs, tabela, fila, ou partilha – de ficheiros e pode ser utilizado para gerir restrições para um ou mais assinaturas de acesso partilhado.SAS with stored access policy: A stored access policy is defined on a resource container--a blob container, table, queue, or file share--and can be used to manage constraints for one or more shared access signatures. Quando associa um SAS com uma política de acesso armazenado, a SAS herda as restrições, a hora de início, hora de expiração e permissões – definidas para a política de acesso armazenado.When you associate a SAS with a stored access policy, the SAS inherits the constraints--the start time, expiry time, and permissions--defined for the stored access policy.

Nota

Atualmente, uma conta SAS tem de ser SAS ad hoc.Currently, an account SAS must be an ad hoc SAS. Armazenados acesso políticas ainda não são suportadas para a conta SAS.Stored access policies are not yet supported for account SAS.

A diferença entre as duas formas é importante para um cenário de chave: revogação.The difference between the two forms is important for one key scenario: revocation. Como um URI de SAS é um URL, qualquer pessoa que obtém a SAS pode utilizá-lo, independentemente de quem a criou originalmente.Because a SAS URI is a URL, anyone that obtains the SAS can use it, regardless of who originally created it. Se uma SAS é publicada publicamente, ele pode ser usado por qualquer pessoa no mundo.If a SAS is published publicly, it can be used by anyone in the world. Uma SAS concede acesso a recursos para qualquer pessoa possessing-lo até que uma das quatro coisas acontece:A SAS grants access to resources to anyone possessing it until one of four things happens:

  1. For atingida a hora de expiração especificada no SAS.The expiry time specified on the SAS is reached.
  2. A hora de expiração especificada na política de acesso armazenado referenciada pela SAS foi atingida (se uma política de acesso armazenado é referenciada, e se ele Especifica um tempo de expiração).The expiry time specified on the stored access policy referenced by the SAS is reached (if a stored access policy is referenced, and if it specifies an expiry time). Isto pode ocorrer devido à decorrido o intervalo, ou modificar a política de acesso armazenadas com um tempo de expiração no passado, que é uma forma de revogar a SAS.This can occur either because the interval elapses, or because you've modified the stored access policy with an expiry time in the past, which is one way to revoke the SAS.
  3. A política de acesso armazenado referenciada pela SAS é eliminada, que é outra forma de revogar a SAS.The stored access policy referenced by the SAS is deleted, which is another way to revoke the SAS. Tenha em atenção que se recriar a política de acesso armazenadas com exatamente o mesmo nome, todos os tokens SAS existentes novamente será válidos de acordo com as permissões associadas essa política de acesso armazenadas (partindo do princípio de que a hora de expiração no SAS não passou).Note that if you recreate the stored access policy with exactly the same name, all existing SAS tokens will again be valid according to the permissions associated with that stored access policy (assuming that the expiry time on the SAS has not passed). Se pretende revogar o SAS, certifique-se de que utilize um nome diferente, caso recrie a política de acesso com um tempo de expiração no futuro.If you are intending to revoke the SAS, be sure to use a different name if you recreate the access policy with an expiry time in the future.
  4. A chave da conta que utilizou para criar a SAS é regenerada.The account key that was used to create the SAS is regenerated. Regenerar uma chave de conta fará com que todos os componentes da aplicação com essa chave não sejam autorizar até que sejam atualizados para utilizar a chave de conta válido ou a chave da conta recentemente regenerada.Regenerating an account key will cause all application components using that key to fail to authorize until they're updated to use either the other valid account key or the newly regenerated account key.

Importante

Um URI de assinatura de acesso partilhado é associado a chave da conta utilizada para criar a assinatura e o associados armazenados política de acesso (se houver).A shared access signature URI is associated with the account key used to create the signature, and the associated stored access policy (if any). Não se for especificada nenhuma política de acesso armazenado, é a única forma de revogar uma assinatura de acesso partilhado alterar a chave de conta.If no stored access policy is specified, the only way to revoke a shared access signature is to change the account key.

Autenticação de um aplicativo de cliente com uma SASAuthenticating from a client application with a SAS

Um cliente que está na posse de uma SAS pode utilizar a SAS para autorizar um pedido com uma conta de armazenamento para o qual não possuem as chaves de conta.A client who is in possession of a SAS can use the SAS to authorize a request against a storage account for which they do not possess the account keys. Uma SAS podem ser incluída numa cadeia de ligação ou utilizada diretamente a partir do método ou construtor apropriado.A SAS can be included in a connection string, or used directly from the appropriate constructor or method.

Com uma SAS numa cadeia de ligaçãoUsing a SAS in a connection string

Se possui um URL de assinatura (SAS) de acesso partilhado que concede acesso a recursos numa conta de armazenamento, pode utilizar a SAS numa cadeia de ligação.If you possess a shared access signature (SAS) URL that grants you access to resources in a storage account, you can use the SAS in a connection string. Uma vez que a SAS contém as informações necessárias para autenticar o pedido, uma cadeia de ligação com uma SAS permite o protocolo, o ponto final de serviço e as credenciais necessárias para aceder ao recurso.Because the SAS contains the information required to authenticate the request, a connection string with a SAS provides the protocol, the service endpoint, and the necessary credentials to access the resource.

Para criar uma cadeia de ligação que inclui uma assinatura de acesso partilhado, especifique a cadeia de caracteres no seguinte formato:To create a connection string that includes a shared access signature, specify the string in the following format:

BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken

Cada ponto de extremidade de serviço é opcional, embora a cadeia de ligação tem de conter, pelo menos, um.Each service endpoint is optional, although the connection string must contain at least one.

Nota

Através de HTTPS com uma SAS é recomendado como melhor prática.Using HTTPS with a SAS is recommended as a best practice.

Se estiver especificando uma SAS numa cadeia de ligação num ficheiro de configuração, terá de codificar os carateres especiais no URL.If you are specifying a SAS in a connection string in a configuration file, you may need to encode special characters in the URL.

Exemplo de SAS de serviçoService SAS example

Eis um exemplo de uma cadeia de ligação que inclui um serviço SAS para armazenamento de BLOBs:Here's an example of a connection string that includes a service SAS for Blob storage:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

E aqui está um exemplo da mesma cadeia de ligação com codificação de carateres especiais:And here's an example of the same connection string with encoding of special characters:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

Exemplo SAS de contaAccount SAS example

Eis um exemplo de uma cadeia de ligação que inclui uma SAS de conta para o armazenamento de BLOBs e ficheiros.Here's an example of a connection string that includes an account SAS for Blob and File storage. Tenha em atenção que os pontos finais para ambos os serviços são especificados:Note that endpoints for both services are specified:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

E aqui está um exemplo da mesma cadeia de ligação com a codificação do URL:And here's an example of the same connection string with URL encoding:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

Com uma SAS num construtor ou métodoUsing a SAS in a constructor or method

Vários construtores de biblioteca de cliente de armazenamento do Azure e a sobrecarga de métodos oferece um parâmetro SAS, para que pode autorizar um pedido para o serviço com uma SAS.Several Azure Storage client library constructors and method overloads offer a SAS parameter, so that you can authorize a request to the service with a SAS.

Por exemplo, aqui um URI de SAS é utilizado para criar uma referência para um blob de blocos.For example, here a SAS URI is used to create a reference to a block blob. A SAS fornece as credenciais apenas necessárias para o pedido.The SAS provides the only credentials needed for the request. A referência de blob de bloco, em seguida, é utilizada para uma operação de escrita:The block blob reference is then used for a write operation:

string sasUri = "https://storagesample.blob.core.windows.net/sample-container/" +
    "sampleBlob.txt?sv=2015-07-08&sr=b&sig=39Up9JzHkxhUIhFEjEH9594DJxe7w6cIRCg0V6lCGSo%3D" +
    "&se=2016-10-18T21%3A51%3A37Z&sp=rcw";

CloudBlockBlob blob = new CloudBlockBlob(new Uri(sasUri));

// Create operation: Upload a blob with the specified name to the container.
// If the blob does not exist, it will be created. If it does exist, it will be overwritten.
try
{
    MemoryStream msWrite = new MemoryStream(Encoding.UTF8.GetBytes(blobContent));
    msWrite.Position = 0;
    using (msWrite)
    {
        await blob.UploadFromStreamAsync(msWrite);
    }

    Console.WriteLine("Create operation succeeded for SAS {0}", sasUri);
    Console.WriteLine();
}
catch (StorageException e)
{
    if (e.RequestInformation.HttpStatusCode == 403)
    {
        Console.WriteLine("Create operation failed for SAS {0}", sasUri);
        Console.WriteLine("Additional error information: " + e.Message);
        Console.WriteLine();
    }
    else
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Melhores práticas quando através da SASBest practices when using SAS

Quando utiliza assinaturas de acesso partilhado nas suas aplicações, terá de conhecer dois riscos potenciais:When you use shared access signatures in your applications, you need to be aware of two potential risks:

  • Se uma SAS é perdida, pode ser utilizado por qualquer pessoa que obtém, que podem comprometer a 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 fornecido para uma aplicação cliente expira e o aplicativo não é possível obter uma SAS novo a partir do seu serviço, então a funcionalidade do aplicativo pode ficar 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 seguintes recomendações para a utilização de assinaturas de acesso partilhado podem ajudar a mitigar estes riscos:The following recommendations for using shared access signatures can help mitigate these risks:

  1. Utilize sempre HTTPS para criar ou distribuir uma SAS.Always use HTTPS to create or distribute a SAS. Se uma SAS é transmitida através de HTTP e interceptada, um atacante que efetue um ataque man-in-the-middle é capaz de ler a SAS e, em seguida, utilizá-la tal como o utilizador em causa poderia ter, potencialmente, comprometer dados confidenciais ou permitindo a Corrupção de dados, o 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.
  2. Referência de políticas de acesso armazenadas sempre que possível.Reference stored access policies where possible. Políticas de acesso armazenadas dão-lhe a opção para revogar permissões sem ter de voltar a gerar as chaves de conta de armazenamento.Stored access policies give you the option to revoke permissions without having to regenerate the storage account keys. Defina a expiração sobre esses muito distante (ou infinito) e certifique-se de que é atualizado regularmente para movê-la mais 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.
  3. Utilize as horas de expiração de curto prazo em SAS ad hoc.Use near-term expiration times on an ad hoc SAS. Dessa forma, mesmo que uma SAS for comprometida, é válido apenas para um curto período de tempo.In this way, even if a SAS is compromised, it's valid only for a short time. Esta prática é especialmente importante se não pode fazer referência a uma política de acesso armazenado.This practice is especially important if you cannot reference a stored access policy. Horas de expiração curto também limitam a quantidade de dados que podem ser gravados para um blob ao limitar o tempo disponível para carregar para o mesmo.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.
  4. Ter clientes automaticamente renovada a SAS se necessário.Have clients automatically renew the SAS if necessary. Os clientes devem renovar a SAS bem antes da expiração, para dar tempo para repetições, se o serviço fornece a SAS não está 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 sua SAS destina-se a ser utilizado para um pequeno número de operações de imediato de curta duração que devem ser concluído dentro do período de expiração, em seguida, isso pode ser desnecessário, como a SAS não deve ser renovado.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 tiver o cliente que está a fazer regularmente pedidos através de SAS, em seguida, a possibilidade de expiração entra em cena.However, if you have client that is routinely making requests via SAS, then the possibility of expiration comes into play. A consideração fundamental é equilibrar a necessidade de SAS para curta (conforme anteriormente mencionado) com a necessidade de garantir que o cliente está a pedir a renovação cedo o suficiente (para evitar a interrupção devido a SAS irá expirar antes de renovação efetuada com êxito).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).
  5. Tenha cuidado com a hora de início do SAS.Be careful with SAS start time. Se definir a hora de início uma SAs agora, em seguida, devido a relógio skew (diferenças na hora atual, de acordo com diferentes máquinas), falhas podem ser observadas intermitentemente para os primeiros poucos minutos.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 ser, pelo menos, 15 minutos no passado.In general, set the start time to be at least 15 minutes in the past. Em alternativa, não defini-lo, que tornará válido imediatamente em todos os casos.Or, don't set it at all, which will make it valid immediately in all cases. O mesmo geralmente aplica-se a hora de expiração também – Lembre-se de que pode observar até 15 minutos do relógio do distorção em ambas as direções em qualquer pedido.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 clientes com uma versão REST antes de 2012-02-12, a duração máxima para um SAS que não faz referência uma política de acesso armazenado é de 1 hora e todas as políticas de especificação de longo prazo que o que irá 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.
  6. Seja específico com o recurso a ser acessado.Be specific with the resource to be accessed. Uma melhor prática de segurança é fornecer um utilizador com os mínimos privilégios necessários.A security best practice is to provide a user with the minimum required privileges. Se um utilizador necessita apenas de acesso de leitura para uma única entidade, em seguida, lhes conceda acesso de leitura para essa entidade única e não de leitura/escrita/eliminar acesso 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. Isto também ajuda a reduzir os danos se uma SAS for comprometida, uma vez que a SAS tem menos poder nas mãos de um atacante.This also helps lessen the damage if a SAS is compromised because the SAS has less power in the hands of an attacker.
  7. Compreenda o que sua conta será cobrada qualquer utilização, incluindo o que é feito com SAS.Understand that your account will be billed for any usage, including that done with SAS. Se fornecer acesso de escrita para um blob, um utilizador pode optar por carregar um blob de 200GB.If you provide write access to a blob, a user may choose to upload a 200GB blob. Se demos-lhes acesso de leitura também, optem para baixá-lo 10 vezes, incorrer em custos de saída em 2 TB para.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. Novamente, fornece permissões limitadas para ajudar a atenuar as ações possíveis de utilizadores mal intencionados.Again, provide limited permissions to help mitigate the potential actions of malicious users. Utilize a SAS de curta duração para reduzir esta ameaça (mas ficar atentos a distorção na hora de fim).Use short-lived SAS to reduce this threat (but be mindful of clock skew on the end time).
  8. Valide dados escritos através da SAS.Validate data written using SAS. Quando um aplicativo cliente escreve dados para a sua conta de armazenamento, tenha em atenção que pode haver problemas com os dados.When a client application writes data to your storage account, keep in mind that there can be problems with that data. Se seu aplicativo exigir que os dados ser validados ou autorizados antes que ele está pronto a utilizar, deve realizar esta validação depois dos dados são escritos e antes de ser utilizada pela sua aplicação.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. Esta prática também protege contra dados danificados ou maliciosos que está a ser escritos para a sua conta, por um usuário que adquiriu corretamente a SAS ou por um utilizador explorando uma fuga SAS.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.
  9. Não utilize sempre SAS.Don't always use SAS. Por vezes, os riscos associados uma determinada operação contra a sua conta de armazenamento superam os benefícios de SAS.Sometimes the risks associated with a particular operation against your storage account outweigh the benefits of SAS. Para essas operações, criar um serviço de camada intermediária que escreve na sua conta de armazenamento depois de efetuar as empresas a regra de validação, autenticação e auditoria.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, às vezes, é mais simples gerir o acesso de outras formas.Also, sometimes it's simpler to manage access in other ways. Por exemplo, se quiser fazer todos os blobs num contentor lido publicamente, pode tornar o contentor público, em vez de fornecer uma SAS para todos os clientes de acesso.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.
  10. Utilize a análise de armazenamento para monitorizar a sua aplicação.Use Storage Analytics to monitor your application. Pode utilizar o registo e as métricas para observar qualquer pico em falhas de autenticação devido a uma falha no seu serviço do fornecedor SAS ou para a remoção acidental de uma política de acesso armazenado.You can use logging and metrics to observe any spike in authentication failures due to an outage in your SAS provider service or to the inadvertent removal of a stored access policy. Consulte a blogue da equipa do Azure Storage para obter informações adicionais.See the Azure Storage Team Blog for additional information.

Exemplos SASSAS examples

Seguem-se alguns exemplos de ambos os tipos de assinaturas de acesso partilhado, a conta SAS e SAS de serviço.Below are some examples of both types of shared access signatures, account SAS and service SAS.

Para executar esses exemplos em C#, precisa referenciar os seguintes pacotes de NuGet no seu projeto:To run these C# examples, you need to reference the following NuGet packages in your project:

Para obter exemplos adicionais que mostram como criar e testar uma SAS, consulte exemplos de código do Azure para armazenamento.For additional examples that show how to create and test a SAS, see Azure Code Samples for Storage.

Exemplo: Criar e utilizar uma SAS de contaExample: Create and use an account SAS

O exemplo de código seguinte cria uma conta SAS que é válido para os serviços de ficheiros e BLOBs e permite que o cliente permissões de leitura, escrita e listar permissões para aceder a APIs de nível de serviço.The following code example creates an account SAS that is valid for the Blob and File services, and gives the client permissions read, write, and list permissions to access service-level APIs. A conta SAS restringe o protocolo HTTPS, para que o pedido tem de ser feito com HTTPS.The account SAS restricts the protocol to HTTPS, so the request must be made with HTTPS.

static string GetAccountSASToken()
{
    // To create the account SAS, you need to use your shared key credentials. Modify for your account.
    const string ConnectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key";
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);

    // Create a new access policy for the account.
    SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy()
        {
            Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.List,
            Services = SharedAccessAccountServices.Blob | SharedAccessAccountServices.File,
            ResourceTypes = SharedAccessAccountResourceTypes.Service,
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Protocols = SharedAccessProtocol.HttpsOnly
        };

    // Return the SAS token.
    return storageAccount.GetSharedAccessSignature(policy);
}

Para utilizar a conta SAS para aceder às APIs de nível de serviço para o serviço de BLOBs, construa um objeto de cliente de Blob com a SAS e o ponto final de armazenamento de BLOBs para a sua conta de armazenamento.To use the account SAS to access service-level APIs for the Blob service, construct a Blob client object using the SAS and the Blob storage endpoint for your storage account.

static void UseAccountSAS(string sasToken)
{
    // Create new storage credentials using the SAS token.
    StorageCredentials accountSAS = new StorageCredentials(sasToken);
    // Use these credentials and the account name to create a Blob service client.
    CloudStorageAccount accountWithSAS = new CloudStorageAccount(accountSAS, "account-name", endpointSuffix: null, useHttps: true);
    CloudBlobClient blobClientWithSAS = accountWithSAS.CreateCloudBlobClient();

    // Now set the service properties for the Blob client created with the SAS.
    blobClientWithSAS.SetServiceProperties(new ServiceProperties()
    {
        HourMetrics = new MetricsProperties()
        {
            MetricsLevel = MetricsLevel.ServiceAndApi,
            RetentionDays = 7,
            Version = "1.0"
        },
        MinuteMetrics = new MetricsProperties()
        {
            MetricsLevel = MetricsLevel.ServiceAndApi,
            RetentionDays = 7,
            Version = "1.0"
        },
        Logging = new LoggingProperties()
        {
            LoggingOperations = LoggingOperations.All,
            RetentionDays = 14,
            Version = "1.0"
        }
    });

    // The permissions granted by the account SAS also permit you to retrieve service properties.
    ServiceProperties serviceProperties = blobClientWithSAS.GetServiceProperties();
    Console.WriteLine(serviceProperties.HourMetrics.MetricsLevel);
    Console.WriteLine(serviceProperties.HourMetrics.RetentionDays);
    Console.WriteLine(serviceProperties.HourMetrics.Version);
}

Exemplo: Criar uma política de acesso armazenadasExample: Create a stored access policy

O código a seguir cria uma política de acesso armazenadas num contêiner.The following code creates a stored access policy on a container. Pode utilizar a política de acesso para especificar restrições para um serviço SAS no contentor ou os respetivos blobs.You can use the access policy to specify constraints for a service SAS on the container or its blobs.

private static async Task CreateSharedAccessPolicyAsync(CloudBlobContainer container, string policyName)
{
    // Create a new shared access policy and define its constraints.
    // The access policy provides create, write, read, list, and delete permissions.
    SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
    {
        // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
        // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
        SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
        Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List |
            SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create | SharedAccessBlobPermissions.Delete
    };

    // Get the container's existing permissions.
    BlobContainerPermissions permissions = await container.GetPermissionsAsync();

    // Add the new policy to the container's permissions, and set the container's permissions.
    permissions.SharedAccessPolicies.Add(policyName, sharedPolicy);
    await container.SetPermissionsAsync(permissions);
}

Exemplo: Criar um serviço SAS num contentorExample: Create a service SAS on a container

O código seguinte cria um SAS num contentor.The following code creates a SAS on a container. Se o nome de uma política de acesso armazenado existente for fornecido, essa política está associada com a SAS.If the name of an existing stored access policy is provided, that policy is associated with the SAS. Se nenhuma política de acesso armazenadas não for fornecida, o código cria uma SAS ad hoc no contentor.If no stored access policy is provided, then the code creates an ad hoc SAS on the container.

private static string GetContainerSasUri(CloudBlobContainer container, string storedPolicyName = null)
{
    string sasContainerToken;

    // If no stored policy is specified, create a new access policy and define its constraints.
    if (storedPolicyName == null)
    {
        // Note that the SharedAccessBlobPolicy class is used both to define the parameters of an ad hoc SAS, and
        // to construct a shared access policy that is saved to the container's shared access policies.
        SharedAccessBlobPolicy adHocPolicy = new SharedAccessBlobPolicy()
        {
            // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
            // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List
        };

        // Generate the shared access signature on the container, setting the constraints directly on the signature.
        sasContainerToken = container.GetSharedAccessSignature(adHocPolicy, null);

        Console.WriteLine("SAS for blob container (ad hoc): {0}", sasContainerToken);
        Console.WriteLine();
    }
    else
    {
        // Generate the shared access signature on the container. In this case, all of the constraints for the
        // shared access signature are specified on the stored access policy, which is provided by name.
        // It is also possible to specify some constraints on an ad hoc SAS and others on the stored access policy.
        sasContainerToken = container.GetSharedAccessSignature(null, storedPolicyName);

        Console.WriteLine("SAS for blob container (stored access policy): {0}", sasContainerToken);
        Console.WriteLine();
    }

    // Return the URI string for the container, including the SAS token.
    return container.Uri + sasContainerToken;
}

Exemplo: Criar um serviço SAS num blobExample: Create a service SAS on a blob

O código seguinte cria um SAS num blob.The following code creates a SAS on a blob. Se o nome de uma política de acesso armazenado existente for fornecido, essa política está associada com a SAS.If the name of an existing stored access policy is provided, that policy is associated with the SAS. Não se for fornecida nenhuma política de acesso armazenadas, em seguida, o código cria uma SAS ad hoc no blob.If no stored access policy is provided, then the code creates an ad hoc SAS on the blob.

private static string GetBlobSasUri(CloudBlobContainer container, string blobName, string policyName = null)
{
    string sasBlobToken;

    // Get a reference to a blob within the container.
    // Note that the blob may not exist yet, but a SAS can still be created for it.
    CloudBlockBlob blob = container.GetBlockBlobReference(blobName);

    if (policyName == null)
    {
        // Create a new access policy and define its constraints.
        // Note that the SharedAccessBlobPolicy class is used both to define the parameters of an ad hoc SAS, and
        // to construct a shared access policy that is saved to the container's shared access policies.
        SharedAccessBlobPolicy adHocSAS = new SharedAccessBlobPolicy()
        {
            // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
            // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create
        };

        // Generate the shared access signature on the blob, setting the constraints directly on the signature.
        sasBlobToken = blob.GetSharedAccessSignature(adHocSAS);

        Console.WriteLine("SAS for blob (ad hoc): {0}", sasBlobToken);
        Console.WriteLine();
    }
    else
    {
        // Generate the shared access signature on the blob. In this case, all of the constraints for the
        // shared access signature are specified on the container's stored access policy.
        sasBlobToken = blob.GetSharedAccessSignature(null, policyName);

        Console.WriteLine("SAS for blob (stored access policy): {0}", sasBlobToken);
        Console.WriteLine();
    }

    // Return the URI string for the container, including the SAS token.
    return blob.Uri + sasBlobToken;
}

ConclusãoConclusion

Assinaturas de acesso partilhado são úteis para fornecer permissões limitadas à sua conta de armazenamento para os clientes que não devem ter a chave da conta.Shared access signatures are useful for providing limited permissions to your storage account to clients that should not have the account key. Como tal, são uma parte vital do modelo de segurança para qualquer aplicação com o armazenamento do Azure.As such, they are a vital part of the security model for any application using Azure Storage. Se seguir as melhores práticas indicadas aqui, pode utilizar a SAS para fornecer mais flexibilidade de acesso aos recursos na sua conta de armazenamento, sem comprometer a segurança da sua aplicação.If you follow the best practices listed here, you can use SAS to provide greater flexibility of access to resources in your storage account, without compromising the security of your application.

Próximos PassosNext Steps