Criar uma SAS de delegação de utilizador

Pode proteger um token de assinatura de acesso partilhado (SAS) para aceder a um contentor, diretório ou blob com credenciais de Microsoft Entra ou uma chave de conta. Uma SAS protegida com Microsoft Entra credenciais é denominada SAS de delegação de utilizador. Como melhor prática de segurança, recomendamos que utilize Microsoft Entra credenciais sempre que possível, em vez da chave de conta, que podem ser mais facilmente comprometidas. Quando a estrutura da aplicação exigir assinaturas de acesso partilhado, utilize Microsoft Entra credenciais para criar uma SAS de delegação de utilizador para ajudar a garantir uma melhor segurança.

Todas as SAS são assinadas com uma chave. Para criar uma SAS de delegação de utilizador, primeiro tem de pedir uma chave de delegação de utilizador, que depois utiliza para assinar a SAS. A chave de delegação de utilizador é análoga à chave de conta utilizada para assinar uma SAS de serviço ou uma SAS de conta, exceto que depende das suas credenciais de Microsoft Entra. Para pedir a chave de delegação do utilizador, chame a operação Obter Chave de Delegação de Utilizador . Em seguida, pode utilizar a chave de delegação de utilizador para criar a SAS.

Uma SAS de delegação de utilizador é suportada para Armazenamento de Blobs do Azure e Azure Data Lake Storage Gen2. As políticas de acesso armazenado não são suportadas para uma SAS de delegação de utilizador.

Atenção

As assinaturas de acesso partilhado são chaves que concedem permissões aos recursos de armazenamento e deve protegê-las tal como protegeria uma chave de conta. É importante proteger uma SAS contra utilização maliciosa ou não intencional. Utilize a discrição na distribuição de uma SAS e tenha um plano para revogar uma SAS comprometida. As operações que utilizam assinaturas de acesso partilhado só devem ser executadas através de uma ligação HTTPS e os URIs de assinatura de acesso partilhado só devem ser distribuídos numa ligação segura, como HTTPS.

Para obter informações sobre como utilizar a sua chave de conta para proteger uma SAS, veja Criar uma SAS de serviço e Criar uma SAS de conta.

Suporte SAS de delegação de utilizador para acesso no âmbito do diretório

Uma SAS de delegação de utilizador suporta o âmbito do diretório (sr=d) quando a versão de autorização (sv) é 2020-02-10 ou posterior e um espaço de nomes hierárquico (HNS) está ativado. A semântica do âmbito do diretório (sr=d) é semelhante ao âmbito do contentor (sr=c), exceto que o acesso está restrito a um diretório e a quaisquer ficheiros e subdiretórios dentro do mesmo. Quando sr=d for especificado, o sdd parâmetro de consulta também é necessário.

O formato de cadeia a sinal para a versão de autorização 2020-02-10 permanece inalterado.

Suporte SAS de delegação de utilizador para um OID de utilizador

A SAS de delegação de utilizadores suporta um identificador de objeto de utilizador (OID) opcional que é transportado no saoid parâmetro ou suoid quando a versão de autorização (sv) é 2020-02-10 ou posterior. Este parâmetro opcional fornece um modelo de autorização melhorado para cargas de trabalho de cluster de vários utilizadores, como o Hadoop e o Spark.

Os tokens de SAS podem ser restringidos a uma operação específica do sistema de ficheiros e ao utilizador, o que fornece um token de acesso menos vulnerável que é mais seguro distribuir por um cluster multiutilizador. Um dos casos de utilização destas funcionalidades é a integração do controlador do Hadoop ABFS com o Apache Ranger.

Autorizar uma SAS de delegação de utilizador

Quando um cliente acede a um recurso de Armazenamento de Blobs com uma SAS de delegação de utilizador, o pedido ao Armazenamento do Azure é autorizado com as credenciais de Microsoft Entra utilizadas para criar a SAS. As permissões de controlo de acesso baseado em funções (RBAC) concedidas para essa conta Microsoft Entra, juntamente com as permissões explicitamente concedidas no SAS, determinam o acesso do cliente ao recurso. Esta abordagem fornece um nível adicional de segurança e ajuda-o a evitar ter de armazenar a chave de acesso da conta com o código da aplicação. Por estes motivos, a criação de uma SAS com Microsoft Entra credenciais é uma melhor prática de segurança.

As permissões concedidas a um cliente que possua a SAS são a interseção das permissões que foram concedidas ao principal de segurança que solicitou a chave de delegação do utilizador e as permissões que foram concedidas ao recurso no token de SAS através do signedPermissions campo (sp). Se uma permissão concedida ao principal de segurança através do RBAC também não for concedida no token de SAS, essa permissão não é concedida ao cliente que tenta utilizar a SAS para aceder ao recurso. Quando estiver a criar uma SAS de delegação de utilizador, certifique-se de que as permissões concedidas através do RBAC e as permissões concedidas através do token SAS estão ambas alinhadas com o nível de acesso exigido pelo cliente.

Para criar uma SAS de delegação de utilizador, faça o seguinte:

  1. Utilize o RBAC para conceder as permissões pretendidas ao principal de segurança que irá pedir a chave de delegação do utilizador.
  2. Adquira um token OAuth 2.0 da Microsoft Entra ID.
  3. Utilize o token para pedir a chave de delegação do utilizador ao chamar a operação Obter Chave de Delegação de Utilizador.
  4. Utilize a chave de delegação de utilizador para construir o token de SAS com os campos adequados.

Atribuir permissões com RBAC

O principal de segurança que pede a chave de delegação do utilizador tem de ter as permissões adequadas para o fazer. Um principal de segurança Microsoft Entra ID pode ser um utilizador, um grupo, um principal de serviço ou uma identidade gerida.

Para pedir a chave de delegação do utilizador, tem de atribuir a um principal de segurança a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . As seguintes funções RBAC incorporadas incluem a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , explicitamente ou como parte de uma definição de caráter universal:

Uma vez que a operação Obter Chave de Delegação de Utilizador age ao nível da conta de armazenamento, a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey tem de estar no âmbito ao nível da conta de armazenamento, do grupo de recursos ou da subscrição. Se for atribuída ao principal de segurança qualquer uma das funções incorporadas anteriormente listadas ou uma função personalizada que inclua a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , ao nível da conta de armazenamento, do grupo de recursos ou da subscrição, o principal de segurança pode então pedir a chave de delegação de utilizador.

Se for atribuída ao principal de segurança uma função que permita o acesso aos dados, mas que esteja no âmbito do nível de um contentor, pode atribuir adicionalmente a função Delegador de Blobs de Armazenamento ao principal de segurança ao nível da conta de armazenamento, grupo de recursos ou subscrição. A função Delegador de Blobs de Armazenamento concede ao principal de segurança permissões para pedir a chave de delegação do utilizador.

Para obter mais informações sobre as funções RBAC para o Armazenamento do Azure, veja Autorizar com o Azure Active Directory.

Adquirir um token OAuth 2.0

Para obter a chave de delegação do utilizador, peça primeiro um token OAuth 2.0 ao Microsoft Entra ID. Forneça o token com o esquema do Portador para autorizar a chamada para a operação Obter Chave de Delegação de Utilizador. Para obter mais informações sobre como pedir um token OAuth a partir de Microsoft Entra ID, veja Fluxos de autenticação e cenários de aplicações.

Pedir a chave de delegação do utilizador

Uma chamada para a operação Obter Chave de Delegação de Utilizador devolve a chave como um conjunto de valores que são utilizados como parâmetros no token SAS de delegação de utilizador. Estes parâmetros estão descritos na referência Obter Chave de Delegação de Utilizador e, na secção seguinte, "Construir uma SAS de delegação de utilizador".

Quando um cliente pede uma chave de delegação de utilizador através de um token OAuth 2.0, o Armazenamento do Azure devolve a chave de delegação de utilizador em nome do principal de segurança. As SAS criadas com a chave de delegação de utilizador recebem as permissões que foram concedidas ao principal de segurança.

Depois de ter a chave de delegação de utilizador, pode utilizá-la para criar qualquer número de assinaturas de acesso partilhado de delegação de utilizadores ao longo da duração da chave. A chave de delegação de utilizador é independente do token OAuth 2.0 que utiliza para o adquirir, pelo que o token não precisa de ser renovado desde que a chave ainda seja válida. Pode especificar que a chave é válida durante um período de até sete dias.

Construir uma SAS de delegação de utilizador

A tabela seguinte resume os campos suportados para um token de SAS de delegação de utilizador. As secções subsequentes fornecem detalhes adicionais sobre como especificar estes parâmetros.

Nome do campo SAS Parâmetro do token de SAS Obrigatório ou opcional Suporte da versão Descrição
signedVersion sv Obrigatório 2018-11-09 e posterior Indica a versão do serviço que é utilizada para construir o campo de assinatura. Também especifica a versão do serviço que processa os pedidos efetuados com esta SAS.
signedResource sr Necessário Todos Especifica que recursos de blob estão acessíveis através da assinatura de acesso partilhado.
signedStart st Opcional Todos Opcional. A hora em que a assinatura de acesso partilhado se torna válida, expressa num dos formatos ISO 8601 UTC aceites. Se este valor for omitido, a hora UTC atual é utilizada como a hora de início. Para obter mais informações sobre os formatos UTC aceites, veja Formatar valores DateTime.
signedExpiry se Necessário Todos A hora em que a assinatura de acesso partilhado se torna inválida, expressa num dos formatos ISO 8601 UTC aceites. Para obter mais informações sobre os formatos UTC aceites, veja Formatar valores DateTime.
signedPermissions sp Necessário Todos Indica as operações que um cliente que possui a SAS pode realizar no recurso. As permissões podem ser combinadas.
signedIp sip Opcional 04-05-2015 e posterior Especifica um endereço IP ou um intervalo inclusivo de endereços IP a partir dos quais aceitar pedidos. Quando especificar um intervalo, tenha em atenção que o intervalo é inclusivo. Só são suportados endereços IPv4.

Por exemplo, sip=168.1.5.65 ou sip=168.1.5.60-168.1.5.70.
signedProtocol spr Opcional 04-05-2015 e posterior Especifica o protocolo permitido para um pedido feito com a SAS. Inclua este campo para exigir que os pedidos feitos com o token de SAS utilizem HTTPS.
signedObjectId skoid Necessário 2018-11-09 e posterior Identifica um principal de segurança Microsoft Entra.
signedTenantId sktid Necessário 2018-11-09 e posterior Especifica o inquilino Microsoft Entra no qual é definido um principal de segurança.
signedKeyStartTime skt Opcional. 2018-11-09 e posterior O valor é devolvido pela operação Obter Chave de Delegação de Utilizador. Indica o início da duração da chave de delegação do utilizador, expressa num dos formatos ISO 8601 UTC aceites. Se o valor omitido, a hora atual é assumida. Para obter mais informações sobre os formatos UTC aceites, veja Formatar valores DateTime.
signedKeyExpiryTime ske Necessário 2018-11-09 e posterior O valor é devolvido pela operação Obter Chave de Delegação de Utilizador. Indica o fim da duração da chave de delegação de utilizador, expressa num dos formatos ISO 8601 UTC aceites. Para obter mais informações sobre os formatos UTC aceites, veja Formatar valores DateTime.
signedKeyVersion skv Necessário 2018-11-09 e posterior O valor é devolvido pela operação Obter Chave de Delegação de Utilizador. Especifica a versão do serviço de armazenamento que foi utilizada para obter a chave de delegação do utilizador. Este campo tem de especificar a versão 2018-11-09 ou posterior.
signedKeyService sks Necessário 2018-11-09 e posterior Indica o serviço para o qual a chave de delegação de utilizador é válida. Atualmente, apenas o Armazenamento de Blobs é suportado.
signedAuthorizedObjectId saoid Opcional 2020-02-10 e posterior Especifica o ID do objeto de um principal de segurança Microsoft Entra autorizado pelo proprietário da chave de delegação de utilizador para executar a ação concedida pelo token de SAS. Não é efetuada nenhuma verificação de permissão adicional nas listas de controlo de acesso (ACLs) da Interface de Sistema Operativo Portátil (POSIX).
signedUnauthorizedObjectId suoid Opcional 2020-02-10 e posterior Especifica o ID do objeto de um principal de segurança Microsoft Entra quando um espaço de nomes hierárquico está ativado. O Armazenamento do Azure efetua uma verificação da ACL POSIX no ID do objeto antes de autorizar a operação.
signedCorrelationId scid Opcional 2020-02-10 e posterior Correlacione os registos de auditoria de armazenamento com os registos de auditoria que são utilizados pelo principal que gera e distribui a SAS.
signedDirectoryDepth sdd Necessário quando sr=d 2020-02-10 e posterior Indica o número de diretórios na pasta raiz do diretório especificado no canonicalizedResource campo da cadeia a assinar.
signedEncryptionScope ses Opcional 2020-12-06 e posterior Indica o âmbito de encriptação a utilizar para encriptar o conteúdo do pedido.
signature sig Necessário Todos A assinatura é um código de autenticação de mensagens baseado em hash (HMAC) que é calculado através da cadeia de carateres para assinar e da chave através do algoritmo SHA256 e, em seguida, codificado através da codificação Base64.
Cache-Control cabeçalho de resposta rscc Opcional 2013-08-15 e posterior O Armazenamento do Azure define o Cache-Control cabeçalho de resposta para o valor especificado no token de SAS.
Content-Disposition cabeçalho de resposta rscd Opcional 2013-08-15 e posterior O Armazenamento do Azure define o Content-Disposition cabeçalho de resposta para o valor especificado no token de SAS.
Content-Encoding cabeçalho de resposta rsce Opcional 2013-08-15 e posterior O Armazenamento do Azure define o Content-Encoding cabeçalho de resposta para o valor especificado no token de SAS.
Content-Language cabeçalho de resposta rscl Opcional 2013-08-15 e posterior O Armazenamento do Azure define o Content-Language cabeçalho de resposta para o valor especificado no token de SAS.
Content-Type cabeçalho de resposta rsct Opcional 2013-08-15 e posterior O Armazenamento do Azure define o Content-Type cabeçalho de resposta para o valor especificado no token de SAS.

Especificar o campo de versão assinada

O campo necessário signedVersion (sv) especifica a versão do serviço para a assinatura de acesso partilhado. Este valor indica a versão do serviço que é utilizada para construir o signature campo e especifica a versão do serviço que processa um pedido feito com esta assinatura de acesso partilhado. O valor do sv campo tem de ser a versão 2018-11-09 ou posterior.

Especificar o campo de recurso assinado

O campo necessário signedResource (sr) especifica os recursos que estão acessíveis através da assinatura de acesso partilhado. A tabela seguinte descreve como fazer referência a um recurso de blob, contentor ou diretório no token SAS:

Recurso Valor do parâmetro Versões suportadas Description
Blob b Todos Concede acesso ao conteúdo e metadados do blob.
Versão do blob bv 2018-11-09 e posterior Concede acesso ao conteúdo e metadados da versão do blob, mas não ao blob base.
Instantâneo de blobs bs 2018-11-09 e posterior Concede acesso ao conteúdo e metadados do instantâneo do blob, mas não ao blob base.
Contentor c Todos Concede acesso ao conteúdo e metadados de qualquer blob no contentor e à lista de blobs no contentor.
Diretório d 2020-02-10 e posterior Concede acesso ao conteúdo e metadados de qualquer blob no diretório e à lista de blobs no diretório, numa conta de armazenamento com um espaço de nomes hierárquico ativado. Se for especificado um diretório para o signedResource campo, o signedDirectoryDepth parâmetro (sdd) também é necessário. Um diretório está sempre dentro de um contentor.

Especificar a duração da validade da assinatura

Os signedStart campos (st) e signedExpiry (se) indicam os tempos de início e expiração da SAS. O campo signedExpiry é obrigatório. O campo signedStart é opcional. Se for omitido, a hora UTC atual é utilizada como a hora de início.

Para uma SAS de delegação de utilizador, os tempos de início e expiração da SAS devem estar dentro do intervalo definido para a chave de delegação de utilizador. Se um cliente tentar utilizar uma SAS após a expiração da chave de delegação de utilizador, a SAS falhará com um erro de autorização, independentemente de a própria SAS ainda ser válida.

Para obter mais informações sobre os formatos UTC aceites, veja Formatar valores DateTime.

Especificar permissões

As permissões especificadas para o signedPermissions campo (sp) no token de SAS indicam as operações que um cliente que possui a SAS pode efetuar no recurso.

As permissões podem ser combinadas para permitir que um cliente execute várias operações com a mesma SAS. Ao construir a SAS, tem de incluir permissões pela seguinte ordem:

racwdxltmeop

Exemplos de definições de permissões válidas para um contentor incluem rw, , rdrl, wd, wle rl. Exemplos de definições inválidas incluem wr, dr, lre dw. Não é permitida a especificação de uma designação de permissão mais do que uma vez.

Uma SAS de delegação de utilizador não pode conceder acesso a determinadas operações:

  • Os contentores não podem ser criados, eliminados ou listados.
  • Os metadados de contentor e as propriedades não podem ser lidos ou escritos.
  • Os contentores não podem ser arrendados.

Para construir uma SAS que conceda acesso a estas operações, utilize uma SAS de conta. Para obter mais informações, veja Criar uma SAS de conta.

As permissões suportadas para cada tipo de recurso estão descritas na tabela seguinte:

Permissão Símbolo de URI Recurso Suporte da versão Operações permitidas
Leitura r Contentor
Diretório
Blob
Todos Leia o conteúdo, a lista de bloqueios, as propriedades e os metadados de qualquer blob no contentor ou diretório. Utilize um blob como a origem de uma operação de cópia.
Adicionar um Contentor
Diretório
Blob
Todos Adicione um bloco a um blob de acréscimo.
Criar c Contentor
Diretório
Blob
Todos Escreva um novo blob, crie um instantâneo de um blob ou copie um blob para um novo blob.
Escrita w Contentor
Diretório
Blob
Todos Criar ou escrever conteúdo, propriedades, metadados ou lista de bloqueios. Instantâneo ou a concessão do blob. Redimensione o blob (apenas blob de páginas). Utilize o blob como destino de uma operação de cópia.
Eliminar d Contentor
Diretório
Blob
Todos Eliminar um blob. Para a versão 2017-07-29 e posterior, a permissão Eliminar também permite quebrar uma concessão num blob. Para obter mais informações, veja a operação Lease Blob (Concessão de Blobs ).
Eliminar versão x Contentor
Blob
2019-12-12 e posterior Eliminar uma versão de blob.
Eliminação Permanente y Blob 2020-02-10 e posterior Elimine permanentemente um instantâneo de blob ou uma versão.
Lista l Contentor
Diretório
Todos Listar blobs de forma não recursiva.
Etiquetas t Blob 2019-12-12 e posterior Leia ou escreva as etiquetas num blob.
Mover m Contentor
Diretório
Blob
2020-02-10 e posterior Mova um blob ou um diretório e os respetivos conteúdos para uma nova localização. Opcionalmente, esta operação pode ser restrita ao proprietário do blob, diretório ou diretório principal subordinado se o saoid parâmetro estiver incluído no token de SAS e o sticky bit estiver definido no diretório principal.
Executar e Contentor
Diretório
Blob
2020-02-10 e posterior Obtenha as propriedades do sistema e, se o espaço de nomes hierárquico estiver ativado para a conta de armazenamento, obtenha a ACL POSIX de um blob. Se o espaço de nomes hierárquico estiver ativado e o autor da chamada for o proprietário de um blob, esta permissão concede a capacidade de definir o grupo proprietário, as permissões POSIX e a ACL POSIX do blob. Não permite que o autor da chamada leia metadados definidos pelo utilizador.
Propriedade o Contentor
Diretório
Blob
2020-02-10 e posterior Quando o espaço de nomes hierárquico está ativado, esta permissão permite ao autor da chamada definir o proprietário ou o grupo proprietário, ou agir como proprietário quando o autor da chamada mudar o nome ou eliminar um diretório ou blob num diretório que tenha o conjunto de bits autocolantes.
Permissões p Contentor
Diretório
Blob
2020-02-10 e posterior Quando o espaço de nomes hierárquico está ativado, esta permissão permite que o autor da chamada defina permissões e ACLs POSIX em diretórios e blobs.
Definir Política de Imutabilidade i Contentor
Blob
2020-06-12 e posterior Defina ou elimine a política de imutabilidade ou a retenção legal num blob.

Especificar um endereço IP ou intervalo de IP

O campo opcional signedIp (sip) especifica um endereço IP público ou um intervalo de endereços IP públicos a partir dos quais aceitar pedidos. Se o endereço IP a partir do qual o pedido é originado não corresponder ao endereço IP ou intervalo de endereços especificado no token de SAS, o pedido não é autorizado. Apenas são suportados endereços IPv4.

Quando especifica um intervalo de endereços IP, o intervalo é inclusivo. Por exemplo, especificar sip=168.1.5.65 ou sip=168.1.5.60-168.1.5.70 no SAS restringe o pedido a esses endereços IP.

A tabela seguinte descreve se deve incluir o signedIp campo num token de SAS para um determinado cenário, com base no ambiente do cliente e na localização da conta de armazenamento.

Ambiente de cliente Localização da conta de armazenamento Recomendação
Cliente em execução no Azure Na mesma região que o cliente Uma SAS fornecida ao cliente neste cenário não deve incluir um endereço IP de saída para o signedIp campo. Os pedidos efetuados a partir da mesma região através de uma SAS com um endereço IP de saída especificado falharão.

Em vez disso, utilize uma rede virtual do Azure para gerir restrições de segurança de rede. Os pedidos para o Armazenamento do Azure a partir da mesma região ocorrem sempre através de um endereço IP privado. Para obter mais informações, veja Configurar firewalls e redes virtuais do Armazenamento do Microsoft Azure.
Cliente em execução no Azure Numa região diferente do cliente Uma SAS fornecida ao cliente neste cenário pode incluir um endereço IP público ou um intervalo de endereços para o signedIp campo. Os pedidos efetuados com a SAS têm de ter origem no endereço IP especificado ou no intervalo de endereços.
Cliente a executar no local ou num ambiente de cloud diferente Em qualquer região do Azure Uma SAS fornecida ao cliente neste cenário pode incluir um endereço IP público ou um intervalo de endereços para o signedIp campo. Os pedidos efetuados com a SAS têm de ter origem no endereço IP especificado ou no intervalo de endereços.

Se o pedido passar por um proxy ou gateway, forneça o endereço IP de saída público desse proxy ou gateway para o signedIp campo.

Especificar o protocolo HTTP

O campo opcional signedProtocol (spr) especifica o protocolo permitido para pedidos efetuados com a SAS. Os valores possíveis são apenas HTTPS e HTTP (https,http) ou HTTPS (https). O valor predefinido é https,http.

Nota

Não é possível especificar HTTP para o spr campo.

Especificar o ID do objeto assinado

O signedObjectId campo (skoid) é necessário para uma SAS de delegação de utilizador. A operação Obter Chave de Delegação de Utilizador devolve este valor como parte da resposta. O ID de objeto assinado é um valor GUID que serve o identificador imutável para um principal de segurança no plataforma de identidades da Microsoft.

Especificar o ID de inquilino assinado

O signedTenantId campo (sktid) é necessário para uma SAS de delegação de utilizador. A operação Obter Chave de Delegação de Utilizador devolve este valor como parte da resposta. O ID de inquilino assinado é um valor GUID que representa o inquilino Microsoft Entra no qual é definido um principal de segurança.

Especificar a hora de início da chave assinada

O campo opcional signedKeyStartTime (skt) indica o início da duração da chave de delegação de utilizador no formato de Data ISO. A operação Obter Chave de Delegação de Utilizador devolve este valor como parte da resposta. Se a hora de início for omitida, assume-se que a hora de início da chave assinada é a hora atual.

Especificar a hora de expiração da chave assinada

O signedKeyExpiryTime campo (ske) é necessário para uma SAS de delegação de utilizador no formato de Data ISO. A operação Obter Chave de Delegação de Utilizador devolve este valor como parte da resposta. O tempo de expiração da chave assinada indica o fim da duração da chave de delegação de utilizador. O valor da hora de expiração pode ser um máximo de sete dias a partir da hora de início da SAS.

Especificar o serviço de chave assinada

O signedKeyService campo (sks) é necessário para uma SAS de delegação de utilizador. A operação Obter Chave de Delegação de Utilizador devolve este valor como parte da resposta. O campo de serviço de chave assinada indica o serviço para o qual a chave de delegação de utilizador é válida. O valor do campo de serviço de chave assinada para o Armazenamento de Blobs é b.

Especificar a versão da chave assinada

O signedkeyversion campo (skv) é necessário para uma SAS de delegação de utilizador. A operação Obter Chave de Delegação de Utilizador devolve este valor como parte da resposta. O signedkeyversion campo especifica a versão do serviço de armazenamento utilizada para obter a chave de delegação de utilizador. Este campo tem de especificar a versão 2018-11-09 ou posterior.

Especificar um ID de objeto assinado para um principal de segurança

Os campos opcionais signedAuthorizedObjectId (saoid) e signedUnauthorizedObjectId (suoid) permitem a integração com o Apache Hadoop e o Apache Ranger para cargas de trabalho de Azure Data Lake Storage Gen2. Utilize um destes campos no token de SAS para especificar o ID de objeto de um principal de segurança:

  • O saoid campo especifica o ID do objeto de um principal de segurança Microsoft Entra autorizado pelo proprietário da chave de delegação de utilizador a executar a ação concedida pelo token de SAS. O Armazenamento do Azure valida o token de SAS e garante que o proprietário da chave de delegação de utilizador tem as permissões necessárias antes de o Armazenamento do Azure conceder acesso. Não é efetuada nenhuma verificação de permissão adicional em ACLs POSIX.
  • O suoid campo especifica o ID de objeto de um principal de segurança Microsoft Entra quando um espaço de nomes hierárquico está ativado para uma conta de armazenamento. O suoid campo é válido apenas para contas que tenham um espaço de nomes hierárquico. Quando o suoid campo está incluído no token de SAS, o Armazenamento do Azure efetua uma verificação da ACL POSIX no ID do objeto antes de autorizar a operação. Se esta verificação da ACL não for bem-sucedida, a operação falhará. Um espaço de nomes hierárquico tem de ser ativado para a conta de armazenamento se o suoid campo estiver incluído no token de SAS. Caso contrário, a verificação de permissão falhará com um erro de autorização.

O ID do objeto do principal de segurança que pede a chave de delegação do utilizador é capturado no campo necessário skoid . Para especificar um ID de objeto no token de SAS com o campo ousuoid, o principal de segurança identificado no skoid campo tem de ter uma função RBAC que inclua Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action ou Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action.saoid Para obter mais informações sobre estas ações, veja Operações do fornecedor de recursos do Azure.

Ao especificar o ID do objeto no saoid campo ou suoid , também restringe as operações relacionadas com a propriedade do diretório ou do blob, das seguintes formas:

  • Se uma operação criar um diretório ou blob, o Armazenamento do Azure define o proprietário do diretório ou blob para o valor especificado pelo ID do objeto. Se o ID do objeto não for especificado, o Armazenamento do Azure define o proprietário do diretório ou blob para o valor especificado pelo skoid parâmetro.
  • Se o bit autocolante estiver definido no diretório principal e a operação eliminar ou mudar o nome de um diretório ou blob, o ID do objeto do proprietário do diretório principal ou o proprietário do recurso tem de corresponder ao valor especificado pelo ID do objeto.
  • Se uma operação definir o proprietário para um diretório ou blob e o x-ms-owner cabeçalho for especificado, o valor especificado pelo ID do objeto tem de corresponder ao valor especificado pelo x-ms-owner cabeçalho.
  • Se uma operação definir o grupo para um diretório ou blob e o x-ms-group cabeçalho for especificado, o valor especificado pelo ID do objeto tem de ser um membro do grupo especificado pelo x-ms-group cabeçalho.
  • Se uma operação definir as permissões ou a ACL para um diretório ou blob, uma das duas condições seguintes também tem de ser cumprida:
    • O valor especificado para o ID do objeto tem de ser o proprietário do diretório ou blob.
    • O valor do signedPermissions campo (sp) tem de incluir a Ownership permissão (o) para além da Permissions permissão (p).

O ID do objeto especificado no saoid campo ou suoid está incluído nos registos de diagnóstico quando faz pedidos com o token SAS.

O saoid campo ou suoid só é suportado se o signedVersion campo (sv) estiver definido para a versão 2020-02-10 ou posterior. Apenas um destes campos pode ser incluído no token de SAS.

Especificar um ID de correlação

O signedCorrelationId campo (scid) especifica um ID de correlação que pode ser utilizado para correlacionar os registos de auditoria de armazenamento com os registos de auditoria utilizados pelo principal que gera e distribui a SAS. Por exemplo, um serviço de autorização fidedigno normalmente tem uma identidade gerida que autentica e autoriza utilizadores, gera uma SAS, adiciona uma entrada ao registo de auditoria local e devolve a SAS a um utilizador, que pode utilizar a SAS para aceder aos recursos do Armazenamento do Azure. Ao incluir um ID de correlação no registo de auditoria local e no registo de auditoria de armazenamento, permite que estes eventos sejam correlacionados mais tarde. O valor é um GUID sem chavetas e com carateres em minúsculas.

Este campo é suportado com a versão 2020-02-10 e posterior.

Especificar a profundidade do diretório

Se o signedResource campo especificar um diretório (sr=d), também tem de especificar o signedDirectoryDepth campo (sdd) para indicar o número de subdiretórios no diretório de raiz. O valor do sdd campo tem de ser um número inteiro não negativo.

Por exemplo, o diretório de https://{account}.blob.core.windows.net/{container}/ raiz tem uma profundidade de 0. Cada subdiretório no diretório de raiz aumenta a profundidade por 1. O diretório https://{account}.blob.core.windows.net/{container}/d1/d2 tem uma profundidade de 2.

Este campo é suportado com a versão 2020-02-10 e posterior.

Especificar parâmetros de consulta para substituir cabeçalhos de resposta

Para definir valores para que determinados cabeçalhos de resposta sejam devolvidos quando a assinatura de acesso partilhado é utilizada num pedido, pode especificar cabeçalhos de resposta em parâmetros de consulta. Os cabeçalhos de resposta e os parâmetros de consulta correspondentes são os seguintes:

Nome do cabeçalho da resposta Parâmetro de consulta SAS correspondente
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

Por exemplo, se especificar o rsct=binary parâmetro de consulta num token de SAS, o cabeçalho de Content-Type resposta está definido como binary. Este valor substitui o valor do Content-Type cabeçalho armazenado para o blob para um pedido utilizando apenas esta assinatura de acesso partilhado.

Se criar uma assinatura de acesso partilhado que especifique cabeçalhos de resposta como parâmetros de consulta, tem de incluir esses cabeçalhos de resposta no sinal de cadeia a que é utilizado para construir a cadeia de assinatura. Para obter mais informações, consulte a secção "Especificar a assinatura".

Especificar o âmbito de encriptação

O signed encryption scope campo (ses) especifica um âmbito de encriptação que a aplicação cliente utiliza quando carrega blobs através do token SAS através da operação Put Blob . O signed encryption scope campo é suportado quando o campo da versão assinada (sv) no token de SAS é a versão 2020-12-06 ou posterior. Se o campo da versão assinada especificar uma versão anterior à versão suportada, o serviço devolve o código de resposta de erro 403 (Proibido).

Se o âmbito de encriptação predefinido estiver definido para o contentor ou sistema de ficheiros, o ses campo respeita a política de encriptação de contentor. Se existir um erro de correspondência entre o parâmetro de consulta e x-ms-default-encryption-scope o ses cabeçalho e o x-ms-deny-encryption-scope-override cabeçalho estiver definido como true, o serviço devolve o código de resposta de erro 403 (Proibido).

Se o x-ms-encryption-scope cabeçalho e o ses parâmetro de consulta forem ambos fornecidos no pedido PUT e houver um erro de correspondência, o serviço devolve o código de resposta de erro 400 (Pedido Incorreto).

Especificar a assinatura

O signature campo (sig) é utilizado para autorizar um pedido feito por um cliente com a assinatura de acesso partilhado. A cadeia de carateres a assinar é uma cadeia exclusiva que é construída a partir dos campos que têm de ser verificados para autorizar o pedido. A assinatura é um HMAC calculado através da cadeia de carateres para assinar e da chave com o algoritmo SHA256 e, em seguida, codificado através da codificação Base64.

Para construir a cadeia de assinatura de uma SAS de delegação de utilizador, crie a cadeia para assinar a partir dos campos que compõem o pedido, codifique a cadeia como UTF-8 e, em seguida, calcule a assinatura com o algoritmo HMAC-SHA256. Os campos incluídos na cadeia para assinar têm de ser descodificados por URL.

Os campos necessários na cadeia para assinar dependem da versão do serviço utilizada para autorização (sv campo). As secções seguintes descrevem a configuração de cadeia a sinal para versões que suportam a SAS de delegação de utilizador.

Versão 2020-12-06 e posterior

A cadeia para assinar para a versão de autorização 2020-12-06 e posterior tem o seguinte formato:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versão 2020-02-10

A cadeia para assinar para a versão de autorização 2020-02-10 tem o seguinte formato:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versões anteriores a 2020-02-10

A cadeia de carateres para assinar para versões de autorização anteriores a 2020-02-10 tem o seguinte formato:

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

Recurso canónico

A canonicalizedResource parte da cadeia é um caminho canónico para o recurso assinado. Tem de incluir o ponto final do Armazenamento de Blobs e o nome do recurso e tem de ser descodificado por URL. Um caminho de blob tem de incluir o respetivo contentor. Um caminho de diretório tem de incluir o número de subdiretórios que correspondem ao sdd parâmetro.

A cadeia de recursos canonizada de um contentor tem de omitir a barra à direita (/) para uma SAS que forneça acesso a esse contentor.

Os exemplos seguintes mostram como construir a canonicalizedResource parte da cadeia, dependendo do tipo de recurso.

Exemplo de contentor (Armazenamento de Blobs do Azure)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Exemplo de blob (Armazenamento de Blobs do Azure)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
Exemplo de contentor (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Exemplo de diretório (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Exemplo de blob (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

Campos opcionais

Se um campo for opcional e não for fornecido como parte do token de SAS, especifique uma cadeia vazia para o campo. Certifique-se de que inclui o caráter newline (\n) após a cadeia vazia.

Exemplo de SAS de delegação de utilizador

O exemplo seguinte mostra um URI de blobs com um token SAS de delegação de utilizador anexado ao mesmo. O token SAS de delegação de utilizador fornece permissões de leitura e escrita para o blob.

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

Cada parte do URI é descrita na seguinte tabela:

Name Parte SAS Description
URI do Recurso https://myaccount.blob.core.windows.net/sascontainer/blob1.txt O endereço do blob. Recomendamos vivamente que utilize HTTPS.
Delimitador ? O delimitador que precede a cadeia de consulta. O delimitador não faz parte do token de SAS.
Permissões sp=rw As permissões concedidas pelo SAS incluem Leitura (r) e Escrita (w).
Hora de início st=2023-05-24T01:13:55Z Especificado na hora UTC. Se quiser que a SAS seja válida imediatamente, omita a hora de início.
Hora de expiração se=2023-05-24T09:13:55Z Especificado na hora UTC.
ID do Objeto skoid=<object-id> Um principal de segurança Microsoft Entra.
ID do inquilino sktid=<tenant-id> O Microsoft Entra inquilino onde o principal de segurança está registado.
Hora de início da chave skt=2023-05-24T01:13:55Z O início da duração da chave de delegação de utilizador.
Tempo de expiração da chave ske=2023-05-24T09:13:55Z O fim da duração da chave de delegação de utilizador.
Serviço de chave sks=b Apenas o serviço Blob é suportado para o valor de serviço.
Versão da chave skv=2022-11-02 A versão do serviço de armazenamento que foi utilizada para obter a chave de delegação de utilizador.
Intervalo de IP sip=168.1.5.60-168.1.5.70 O intervalo de endereços IP a partir do qual um pedido será aceite.
Protocolo spr=https Só são permitidos pedidos que utilizem HTTPS.
Versão do serviço Blob sv=2022-11-02 Para a versão 2012-02-12 do Armazenamento do Azure e posterior, este parâmetro indica a versão a utilizar.
Recurso sr=b O recurso é um blob.
Assinatura sig=<signature> Utilizado para autorizar o acesso ao blob. A assinatura é um HMAC que é calculado através de uma cadeia de carateres e chave através do algoritmo SHA256 e, em seguida, codificado através da codificação Base64.

Revogar uma SAS de delegação de utilizador

Se acredita que uma SAS foi comprometida, deve revogá-la. Pode revogar uma SAS de delegação de utilizador ao revogar a chave de delegação de utilizador ou ao alterar ou remover atribuições de funções RBAC para o principal de segurança utilizado para criar a SAS.

Importante

Tanto a chave de delegação de utilizador como as atribuições de funções RBAC são colocadas em cache pelo Armazenamento do Azure, pelo que pode haver um atraso entre quando inicia o processo de revogação e quando uma SAS de delegação de utilizador existente se torna inválida.

Revogar a chave de delegação de utilizador

Pode revogar a chave de delegação de utilizador ao chamar a operação Revogar Chaves de Delegação de Utilizador . Quando revoga a chave de delegação de utilizador, todas as assinaturas de acesso partilhado que dependem dessa chave tornam-se inválidas. Em seguida, pode chamar a operação Obter Chave de Delegação de Utilizador novamente e utilizar a chave para criar novas assinaturas de acesso partilhado. Esta é a forma mais rápida de revogar uma SAS de delegação de utilizador.

Alterar ou remover atribuições de funções

Pode alterar ou remover a atribuição de função RBAC para o principal de segurança utilizado para criar a SAS. Quando um cliente utiliza a SAS para aceder a um recurso, o Armazenamento do Microsoft Azure verifica se o principal de segurança cujas credenciais foram utilizadas para proteger a SAS tem as permissões necessárias para o recurso.

Ver também