Partilhar via


Criar uma SAS de delegação de utilizador

Importante

Para uma segurança ideal, a Microsoft recomenda o uso do Microsoft Entra ID com identidades gerenciadas para autorizar solicitações contra dados de blob, fila e tabela, sempre que possível. A autorização com ID do Microsoft Entra e identidades gerenciadas oferece segurança superior e facilidade de uso em relação à autorização de chave compartilhada. Para saber mais, consulte Autorizar com o Microsoft Entra ID. Para saber mais sobre identidades gerenciadas, consulte O que são identidades gerenciadas para recursos do Azure.

Para recursos hospedados fora do Azure, como aplicativos locais, você pode usar identidades gerenciadas por meio do Azure Arc. Por exemplo, os aplicativos executados em servidores habilitados para Azure Arc podem usar identidades gerenciadas para se conectar aos serviços do Azure. Para saber mais, consulte Autenticar em recursos do Azure com servidores habilitados para Azure Arc.

Você pode proteger um token de assinatura de acesso compartilhado (SAS) para acesso a um contêiner, diretório ou blob usando credenciais do Microsoft Entra ou uma chave de conta. Uma SAS protegida com credenciais do Microsoft Entra é chamada de delegação de usuário SAS. Como prática recomendada de segurança, recomendamos que você use as credenciais do Microsoft Entra quando possível, em vez da chave da conta, que pode ser comprometida mais facilmente. Quando o design do aplicativo exigir assinaturas de acesso compartilhado, use as credenciais do Microsoft Entra para criar uma SAS de delegação de usuário para ajudar a garantir melhor segurança.

Cada SAS é assinado com uma chave. Para criar uma SAS de delegação de usuário, você deve primeiro solicitar uma chave de delegação de usuário , que você usa para assinar a SAS. A chave de delegação do usuário é análoga à chave de conta usada para assinar uma SAS de serviço ou uma SAS de conta, exceto que ela depende de suas credenciais do Microsoft Entra. Para solicitar a chave de delegação do usuário, chame a operação Obter Chave de Delegação do Usuário. Em seguida, você pode usar a chave de delegação do usuário para criar a SAS.

Há suporte para uma SAS de delegação de usuário para o Armazenamento de Blobs do Azure e o Armazenamento do Azure Data Lake. Não há suporte para políticas de acesso armazenado para uma SAS de delegação de usuário.

Atenção

As assinaturas de acesso compartilhado são chaves que concedem permissões a recursos de armazenamento, e você deve protegê-las da mesma forma que protegeria uma chave de conta. É importante proteger uma SAS contra uso mal-intencionado ou não intencional. Use discrição na distribuição de um SAS e tenha um plano para revogar um SAS comprometido. As operações que usam assinaturas de acesso compartilhado devem ser executadas somente em uma conexão HTTPS, e os URIs de assinatura de acesso compartilhado só devem ser distribuídos em uma conexão segura, como HTTPS.

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

Suporte SAS de delegação de usuário para acesso com escopo de diretório

Uma SAS de delegação de usuário suporta o escopo do diretório (sr=d) quando a versão de autorização (sv) é 2020-02-10 ou posterior e um namespace hierárquico (HNS) está habilitado. A semântica do escopo do diretório (sr=d) é semelhante ao escopo do contêiner (sr=c), exceto que o acesso é restrito a um diretório e a quaisquer arquivos e subdiretórios dentro dele. Quando sr=d é especificado, o parâmetro de consulta sdd também é necessário.

O formato string-to-sign para a versão de autorização 2020-02-10 permanece inalterado.

Suporte SAS de delegação de usuário para um OID de usuário

O SAS de delegação de usuário suporta um identificador de objeto de usuário (OID) opcional que é transportado no parâmetro saoid ou suoid quando a versão de autorização (sv) é 2020-02-10 ou posterior. Os parâmetros saoid e suoid correspondem à entidade de segurança do usuário final que está usando a SAS e fornecem um modelo de autorização aprimorado para cargas de trabalho de cluster multiusuário, como Hadoop e Spark.

Os tokens SAS podem ser restritos a uma operação e usuário específicos do sistema de arquivos, o que fornece um token de acesso menos vulnerável que é mais seguro para distribuir em um cluster multiusuário. Um caso de uso para esses recursos é a integração do driver Hadoop ABFS com o Apache Ranger.

Para saber mais sobre os parâmetros opcionais saoid e suoid, consulte Especificar um ID de objeto de usuário assinado.

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

Quando um cliente acessa um recurso de Armazenamento de Blob com uma SAS de delegação de usuário, a solicitação ao Armazenamento do Azure é autorizada com as credenciais do Microsoft Entra que foram usadas para criar a SAS. O acesso do cliente ao recurso é determinado pelas seguintes permissões:

  • As permissões de controle de acesso baseado em função (RBAC) concedidas à entidade de segurança do Microsoft Entra que solicitou a chave de delegação do usuário.
  • As permissões da lista de controle de acesso (ACL) POSIX concedidas à entidade de segurança que solicitou a chave de delegação do usuário. Essa verificação adicional só acontece quando as permissões RBAC não podem conceder acesso e somente quando o namespace hierárquico está habilitado na conta de armazenamento.
  • As permissões que são concedidas explicitamente no token SAS.

Essa abordagem fornece um nível adicional de segurança e ajuda você a evitar ter que armazenar a chave de acesso da sua conta com o código do aplicativo. Por esses motivos, criar uma SAS usando credenciais do Microsoft Entra é uma prática recomendada de segurança.

As permissões concedidas a um cliente que possui a SAS são a interseção das permissões concedidas à entidade de segurança que solicitou a chave de delegação do usuário e as permissões concedidas ao recurso no token SAS usando o campo signedPermissions (sp). Se uma permissão concedida à entidade de segurança por meio de ACLs RBAC ou POSIX também não for concedida no token SAS, essa permissão não será concedida ao cliente que tentar usar a SAS para acessar o recurso. Ao criar uma SAS de delegação de usuário, certifique-se de que as permissões concedidas via ACLs RBAC e POSIX e as permissões concedidas por meio do token SAS estejam alinhadas ao nível de acesso exigido pelo cliente.

Para criar uma SAS de delegação de usuário, faça o seguinte:

  1. Use ACLs RBAC ou POSIX para conceder as permissões desejadas à entidade de segurança que solicitará a chave de delegação do usuário.
  2. Adquira um token OAuth 2.0 do Microsoft Entra ID.
  3. Use o token para solicitar a chave de delegação do usuário chamando a operação Obter Chave de Delegação de Usuário.
  4. Use a chave de delegação do usuário para construir o token SAS com os campos apropriados.

Atribuir permissões com RBAC

A entidade de segurança que solicita a chave de delegação do usuário precisa ter as permissões apropriadas para fazer isso. Uma entidade de segurança do Microsoft Entra ID pode ser um usuário, um grupo, uma entidade de serviço ou uma identidade gerenciada.

Para solicitar a chave de delegação do usuário, você deve atribuir a uma entidade de segurança a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. As seguintes funções RBAC internas incluem a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , explicitamente ou como parte de uma definição curinga:

Como a operação Obter Chave de Delegação de Usuário atua no nível da conta de armazenamento, a ação de Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey deve ter como escopo o nível da conta de armazenamento, do grupo de recursos ou da assinatura. Se for atribuída à entidade de segurança qualquer uma das funções internas listadas anteriormente ou uma função personalizada que inclua a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, no nível da conta de armazenamento, do grupo de recursos ou da assinatura, a entidade de segurança poderá solicitar a chave de delegação do usuário.

Se for atribuída à entidade de segurança uma função que permita o acesso aos dados, mas tenha o escopo definido para o nível de um contêiner, você poderá atribuir adicionalmente a função Delegador de Blob de Armazenamento à entidade de segurança no nível da conta de armazenamento, grupo de recursos ou assinatura. A função Delegador de Blob de Armazenamento concede à entidade de segurança permissões para solicitar a chave de delegação do usuário.

Para obter mais informações sobre funções RBAC para o Armazenamento do Azure, consulte Autorizar com o Microsoft Entra.

Adquira um token OAuth 2.0

Para obter a chave de delegação do usuário, primeiro solicite um token OAuth 2.0 do Microsoft Entra ID. Forneça o token com o esquema Bearer para autorizar a chamada para a operação Get User Delegation Key. Para obter mais informações sobre como solicitar um token OAuth da ID do Microsoft Entra, consulte Fluxos de autenticação e cenários de aplicativos.

Solicitar a chave de delegação do usuário

Uma chamada para a operação Obter Chave de Delegação de Usuário retorna a chave como um conjunto de valores que são usados como parâmetros no token SAS de delegação de usuário. Esses parâmetros são descritos na referência Obter chave de delegação de usuário e na próxima seção, "Construir uma delegação de usuário SAS".

Quando um cliente solicita uma chave de delegação de usuário usando um token OAuth 2.0, o Armazenamento do Azure retorna a chave de delegação do usuário em nome da entidade de segurança. A SAS criada com a chave de delegação do usuário recebe as permissões concedidas à entidade de segurança.

Depois de ter a chave de delegação do usuário, você pode usá-la para criar qualquer número de assinaturas de acesso compartilhado de delegação de usuário ao longo do tempo de vida da chave. A chave de delegação do usuário é independente do token OAuth 2.0 que você usa para adquiri-lo, portanto, o token não precisa ser renovado, desde que a chave ainda seja válida. Você pode especificar que a chave é válida por um período de até sete dias.

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

A tabela a seguir resume os campos suportados para um token SAS de delegação de usuário. As seções subsequentes fornecem detalhes adicionais sobre como especificar esses parâmetros.

Nome do campo SAS Parâmetro de token SAS Obrigatório ou opcional Suporte de versão Descrição
signedVersion sv Necessário 2018-11-09 e seguintes Indica a versão do serviço usada para construir o campo de assinatura. Ele também especifica a versão de serviço que lida com solicitações feitas com essa SAS.
signedResource sr Necessário Todos Especifica quais recursos de blob podem ser acessados por meio da assinatura de acesso compartilhado.
signedStart st Opcional Todos Opcional. A hora em que a assinatura de acesso compartilhado se torna válida, expressa em um dos formatos aceitos ISO 8601 UTC. Se esse valor for omitido, a hora UTC atual será usada como a hora de início. Para obter mais informações sobre formatos UTC aceitos, consulte Formatar valores DateTime.
signedExpiry se Necessário Todos O momento em que a assinatura de acesso compartilhado se torna inválida, expressa em um dos formatos aceitos ISO 8601 UTC. Para obter mais informações sobre formatos UTC aceitos, consulte Formatar valores DateTime.
signedPermissions sp Necessário Todos Indica quais operações um cliente que possui a SAS pode executar no recurso. As permissões podem ser combinadas.
signedIp sip Opcional 2015-04-05 e seguintes Especifica um endereço IP ou um intervalo inclusivo de endereços IP a partir do qual aceitar solicitações. Ao especificar um intervalo, lembre-se de que o intervalo é inclusivo. Apenas são suportados endereços IPv4.

Por exemplo, sip=198.51.100.0 ou sip=198.51.100.10-198.51.100.20.
signedProtocol spr Opcional 2015-04-05 e seguintes Especifica o protocolo permitido para uma solicitação feita com a SAS. Inclua este campo para exigir que as solicitações feitas com o token SAS usem HTTPS.
signedObjectId skoid Necessário 2018-11-09 e seguintes Especifica a ID do objeto para uma entidade de segurança do Microsoft Entra. Esse ID de objeto corresponde à entidade de segurança que solicitou a chave de delegação do usuário.

Antes de autorizar a operação, o Armazenamento do Azure verifica as permissões RBAC em relação à ID do objeto. Se as permissões RBAC não puderem conceder acesso, o Armazenamento do Azure verificará as permissões da ACL POSIX em relação à ID do objeto.
signedTenantId sktid Necessário 2018-11-09 e seguintes Especifica o locatário do Microsoft Entra no qual uma entidade de segurança é definida.
signedKeyStartTime skt Obrigatório. 2018-11-09 e seguintes O valor é retornado pela operação Obter Chave de Delegação de Usuário. Indica o início do tempo de vida da chave de delegação do usuário, expresso em um dos formatos ISO 8601 UTC aceitos. Para obter mais informações sobre formatos UTC aceitos, consulte Formatar valores DateTime.
signedKeyExpiryTime ske Necessário 2018-11-09 e seguintes O valor é retornado pela operação Obter Chave de Delegação de Usuário. Indica o fim da vida útil da chave de delegação do usuário, expressa em um dos formatos aceitos ISO 8601 UTC. Para obter mais informações sobre formatos UTC aceitos, consulte Formatar valores DateTime.
signedKeyVersion skv Necessário 2018-11-09 e seguintes O valor é retornado pela operação Obter Chave de Delegação de Usuário. Especifica a versão do serviço de armazenamento que foi usada para obter a chave de delegação do usuário. Este campo deve especificar a versão 2018-11-09 ou posterior.
signedKeyService sks Necessário 2018-11-09 e seguintes Indica o serviço para o qual a chave de delegação do usuário é válida. Atualmente, apenas o armazenamento de Blob é suportado.
signedAuthorizedObjectId saoid Opcional 2020-02-10 e seguintes Especifica a ID do objeto de uma entidade de segurança do Microsoft Entra autorizada pelo proprietário da chave de delegação do usuário para executar a ação concedida pelo token SAS. Esse ID de objeto corresponde à entidade de segurança para o usuário final da SAS. Nenhuma verificação de permissão adicional em listas de controle de acesso (ACLs) POSIX é executada.
signedUnauthorizedObjectId suoid Opcional 2020-02-10 e seguintes Especifica a ID do objeto para uma entidade de segurança do Microsoft Entra quando um namespace hierárquico está habilitado. Esse ID de objeto corresponde à entidade de segurança para o usuário final da SAS. O Armazenamento do Azure executa uma verificação de ACL POSIX em relação à ID do objeto antes de autorizar a operação.
signedCorrelationId scid Opcional 2020-02-10 e seguintes Correlacione os logs de auditoria de armazenamento com os logs de auditoria usados pela entidade de segurança que gera e distribui a SAS.
signedDirectoryDepth sdd Necessário quando sr=d 2020-02-10 e seguintes Indica o número de diretórios dentro da pasta raiz do diretório especificado no campo canonicalizedResource da cadeia de caracteres para assinar.
signedEncryptionScope ses Opcional 2020-12-06 e seguintes Indica o escopo de criptografia a ser usado para criptografar o conteúdo da solicitação.
signature sig Necessário Todos A assinatura é um código de autenticação de mensagem baseado em hash (HMAC) que é calculado sobre a cadeia de caracteres para assinar e a chave usando o algoritmo SHA256 e, em seguida, codificado usando a codificação Base64.
Cache-Control cabeçalho de resposta rscc Opcional 2013-08-15 e seguintes O Armazenamento do Azure define o cabeçalho de resposta Cache-Control para o valor especificado no token SAS.
Content-Disposition cabeçalho de resposta rscd Opcional 2013-08-15 e seguintes O Armazenamento do Azure define o cabeçalho de resposta Content-Disposition para o valor especificado no token SAS.
Content-Encoding cabeçalho de resposta rsce Opcional 2013-08-15 e seguintes O Armazenamento do Azure define o cabeçalho de resposta Content-Encoding para o valor especificado no token SAS.
Content-Language cabeçalho de resposta rscl Opcional 2013-08-15 e seguintes O Armazenamento do Azure define o cabeçalho de resposta Content-Language para o valor especificado no token SAS.
Content-Type cabeçalho de resposta rsct Opcional 2013-08-15 e seguintes O Armazenamento do Azure define o cabeçalho de resposta Content-Type para o valor especificado no token SAS.

Especificar o campo de versão assinada

O campo obrigatório signedVersion (sv) especifica a versão do serviço para a assinatura de acesso compartilhado. Esse valor indica a versão do serviço usada para construir o campo signature e especifica a versão do serviço que lida com uma solicitação feita com essa assinatura de acesso compartilhado. O valor do campo sv deve ser a versão 2018-11-09 ou posterior.

Especificar o campo de recurso assinado

O campo signedResource obrigatório (sr) especifica quais recursos são acessíveis por meio da assinatura de acesso compartilhado. A tabela a seguir descreve como fazer referência a um blob, contêiner ou recurso de diretório no token SAS:

Recurso Valor do parâmetro Versões suportadas Descrição
Blob b Todos Concede acesso ao conteúdo e metadados do blob.
Versão Blob BV 2018-11-09 e seguintes Concede acesso ao conteúdo e metadados da versão blob, mas não ao blob base.
Instantâneo de Blob BS 2018-11-09 e seguintes Concede acesso ao conteúdo e metadados do instantâneo de blob, mas não ao blob de base.
Contentor c Todos Concede acesso ao conteúdo e metadados de qualquer blob no contêiner e à lista de blobs no contêiner.
Diretório d 2020-02-10 e seguintes Concede acesso ao conteúdo e metadados de qualquer blob no diretório e à lista de blobs no diretório, em uma conta de armazenamento com um namespace hierárquico habilitado. Se um diretório for especificado para o campo signedResource, o parâmetro signedDirectoryDepth (sdd) também será necessário. Um diretório está sempre dentro de um contêiner.

Especificar a duração da validade da assinatura

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

Para uma SAS de delegação de usuário, os tempos de início e expiração da SAS devem estar dentro do intervalo definido para a chave de delegação do usuário. Se um cliente tentar usar uma SAS depois que a chave de delegação do usuário expirar, 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 formatos UTC aceitos, consulte Formatar valores DateTime.

Especificar permissões

As permissões especificadas para o campo signedPermissions (sp) no token SAS indicam quais operações um cliente que possui o SAS pode executar 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, você deve incluir permissões na seguinte ordem:

racwdxltmeop

Exemplos de configurações de permissões válidas para um contêiner incluem rw, rd, rl, wd, wle rl. Exemplos de configurações inválidas incluem wr, dr, lre dw. Não é permitido especificar uma designação de permissão mais de uma vez.

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

  • Os contêineres não podem ser criados, excluídos ou listados.
  • Os metadados e as propriedades do contêiner não podem ser lidos ou gravados.
  • Os contentores não podem ser alugados.

Para construir uma SAS que conceda acesso a essas operações, use uma conta SAS. Para obter mais informações, consulte Criar uma conta SAS.

As permissões suportadas para cada tipo de recurso são descritas na tabela a seguir:

Permissão Símbolo URI Recurso Suporte de 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 contêiner ou diretório. Use um blob como a origem de uma operação de cópia.
Adicionar a 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 snapshot de um blob ou copie um blob para um novo blob.
Escrita w Contentor
Diretório
Blob
Todos Crie ou escreva conteúdo, propriedades, metadados ou lista de bloqueio. Snapshot ou lease o blob. Redimensione o blob (somente blob de página). Use o blob como o destino de uma operação de cópia.
Eliminar d Contentor
Diretório
Blob
Todos Exclua um blob. Para a versão 2017-07-29 e posterior, a permissão Excluir também permite quebrar uma concessão em um blob. Para obter mais informações, consulte a operação Lease Blob.
Excluir versão x Contentor
Blob
2019-12-12 e seguintes Exclua uma versão de blob.
Exclusão permanente y Blob 2020-02-10 e seguintes Exclua permanentemente um instantâneo ou versão de blob.
Listagem l Contentor
Diretório
Todos Listar blobs de forma não recursiva.
Etiquetas t Blob 2019-12-12 e seguintes Leia ou escreva as tags em um blob.
Mover m Contentor
Diretório
Blob
2020-02-10 e seguintes Mova um blob ou um diretório e seu conteúdo para um novo local. Opcionalmente, essa operação pode ser restrita ao proprietário do blob filho, diretório ou diretório pai se o parâmetro saoid estiver incluído no token SAS e o bit adesivo estiver definido no diretório pai.
Executar e Contentor
Diretório
Blob
2020-02-10 e seguintes Obtenha as propriedades do sistema e, se o namespace hierárquico estiver habilitado para a conta de armazenamento, obtenha a ACL POSIX de um blob. Se o namespace hierárquico estiver habilitado e o chamador for o proprietário de um blob, essa permissão concederá a capacidade de definir o grupo proprietário, as permissões POSIX e a ACL POSIX do blob. Ele não permite que o chamador leia metadados definidos pelo usuário.
Propriedade o Contentor
Diretório
Blob
2020-02-10 e seguintes Quando o namespace hierárquico está habilitado, essa permissão permite que o chamador defina o proprietário ou o grupo proprietário, ou aja como proprietário quando o chamador renomeia ou exclui um diretório ou blob dentro de um diretório que tenha o bit adesivo definido.
Permissões p Contentor
Diretório
Blob
2020-02-10 e seguintes Quando o namespace hierárquico está habilitado, essa permissão permite que o chamador defina permissões e ACLs POSIX em diretórios e blobs.
Definir política de imutabilidade eu Contentor
Blob
2020-06-12 e seguintes Defina ou exclua a política de imutabilidade ou a retenção legal em um 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 do qual a solicitação se origina não corresponder ao endereço IP ou intervalo de endereços especificado no token SAS, a solicitação não será autorizada. Apenas são suportados endereços IPv4.

Quando você especifica um intervalo de endereços IP, o intervalo é inclusivo. Por exemplo, especificar sip=198.51.100.0 ou sip=198.51.100.10-198.51.100.20 no SAS restringe a solicitação a esses endereços IP.

A tabela a seguir descreve se o campo signedIp deve ser incluído em um token SAS para um determinado cenário, com base no ambiente do cliente e no local da conta de armazenamento.

Ambiente do 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 campo signedIp. As solicitações que você faz de dentro da mesma região usando uma SAS com um endereço IP de saída especificado falham.

Em vez disso, use uma rede virtual do Azure para gerenciar restrições de segurança de rede. As solicitações para o Armazenamento do Azure de dentro da mesma região sempre ocorrem em 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 campo signedIp. As solicitações feitas com a SAS devem ter origem no endereço IP especificado ou no intervalo de endereços.
Cliente em execução no local ou em um ambiente de nuvem 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 campo signedIp. As solicitações feitas com a SAS devem ter origem no endereço IP especificado ou no intervalo de endereços.

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

Especificar o protocolo HTTP

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

Nota

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

Especifique o ID do objeto assinado

O campo signedObjectId (skoid) é obrigatório para uma SAS de delegação de usuário. A operação Obter Chave de Delegação do Usuário retorna esse valor como parte da resposta. A ID do objeto assinado é um valor GUID que serve o identificador imutável para uma entidade de segurança na plataforma de identidade da Microsoft.

Especificar o ID do locatário assinado

O campo signedTenantId (sktid) é obrigatório para uma SAS de delegação de usuário. A operação Obter Chave de Delegação do Usuário retorna esse valor como parte da resposta. A ID de locatário assinada é um valor GUID que representa o locatário do Microsoft Entra no qual uma entidade de segurança é definida.

Especificar a hora de início da chave assinada

O campo obrigatório signedKeyStartTime (skt) indica o início do tempo de vida da chave de delegação do usuário no formato de data ISO. A operação Obter Chave de Delegação do Usuário retorna esse valor como parte da resposta.

Especificar o tempo de expiração da chave assinada

O campo signedKeyExpiryTime (ske) é necessário para uma delegação de usuário SAS no formato de data ISO. A operação Obter Chave de Delegação do Usuário retorna esse valor como parte da resposta. O tempo de expiração da chave assinada indica o fim do tempo de vida da chave de delegação do usuário. O valor do tempo de expiração pode ser de no máximo sete dias a partir da hora de início do SAS.

Especificar o serviço de chave assinado

O campo signedKeyService (sks) é obrigatório para uma SAS de delegação de usuário. A operação Obter Chave de Delegação do Usuário retorna esse 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 do usuário é válida. O valor do campo de serviço de chave assinada para Armazenamento de Blob é b.

Especificar a versão da chave assinada

O campo signedkeyversion (skv) é obrigatório para uma SAS de delegação de usuário. A operação Obter Chave de Delegação do Usuário retorna esse valor como parte da resposta. O campo signedkeyversion especifica a versão do serviço de armazenamento usada para obter a chave de delegação do usuário. Este campo deve especificar a versão 2018-11-09 ou posterior.

Especificar um ID de objeto de usuário assinado para uma entidade 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 do Armazenamento do Azure Data Lake. Use um destes campos no token SAS para especificar o ID do objeto para uma entidade de segurança:

  • O campo saoid especifica a ID do objeto para uma entidade de segurança do Microsoft Entra autorizada pelo proprietário da chave de delegação do usuário a executar a ação concedida pelo token SAS. O Armazenamento do Azure valida o token SAS e garante que o proprietário da chave de delegação do usuário tenha as permissões necessárias antes que o Armazenamento do Azure conceda acesso. Nenhuma verificação de permissão adicional em ACLs POSIX é executada.
  • O campo suoid especifica a ID do objeto para uma entidade de segurança do Microsoft Entra quando um namespace hierárquico está habilitado para uma conta de armazenamento. O campo suoid é válido apenas para contas que têm um namespace hierárquico. Quando o campo suoid é incluído no token SAS, o Armazenamento do Azure executa uma verificação de ACL POSIX em relação à ID do objeto antes de autorizar a operação. Se essa verificação de ACL não for bem-sucedida, a operação falhará. Um namespace hierárquico deve ser habilitado para a conta de armazenamento se o campo suoid estiver incluído no token SAS. Caso contrário, a verificação de permissão falhará com um erro de autorização.

O ID do objeto para a entidade de segurança que solicita a chave de delegação do usuário é capturado no campo skoid obrigatório. Para especificar um ID de objeto no token SAS com o campo saoid ou suoid, a entidade de segurança identificada no campo skoid deve receber uma função RBAC que inclua Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action ou Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action. Para obter mais informações sobre essas ações, consulte operações do provedor de recursos do Azure.

Ao especificar o ID do objeto no campo saoid ou suoid, você também restringe as operações relacionadas à propriedade de diretório ou blob, das seguintes maneiras:

  • Se uma operação criar um diretório ou blob, o Armazenamento do Azure definirá o proprietário do diretório ou blob para o valor especificado pela ID do objeto. Se a ID do objeto não for especificada, o Armazenamento do Azure definirá o proprietário do diretório ou blob para o valor especificado pelo parâmetro skoid.
  • Se o bit adesivo for definido no diretório pai e a operação excluir ou renomear um diretório ou blob, a ID do objeto do proprietário do diretório pai ou do proprietário do recurso deverá corresponder ao valor especificado pela ID do objeto.
  • Se uma operação definir o proprietário para um diretório ou blob e o cabeçalho x-ms-owner for especificado, o valor especificado pelo ID do objeto deverá corresponder ao valor especificado pelo cabeçalho x-ms-owner.
  • Se uma operação define o grupo para um diretório ou blob e o cabeçalho x-ms-group é especificado, o valor especificado pelo ID do objeto deve ser um membro do grupo especificado pelo cabeçalho x-ms-group.
  • Se uma operação definir as permissões ou ACL para um diretório ou blob, uma das duas condições a seguir também deverá ser atendida:
    • O valor especificado para o ID do objeto deve ser o proprietário do diretório ou blob.
    • O valor do campo signedPermissions (sp) deve incluir a permissão Ownership (o), além da permissão Permissions (p).

O ID do objeto especificado no campo saoid ou suoid é incluído nos logs de diagnóstico quando você faz solicitações usando o token SAS.

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

Especificar um ID de correlação

O campo signedCorrelationId (scid) especifica uma ID de correlação que pode ser usada para correlacionar os logs de auditoria de armazenamento com os logs de auditoria usados pela entidade de segurança que gera e distribui a SAS. Por exemplo, um serviço de autorização confiável normalmente tem uma identidade gerenciada que autentica e autoriza usuários, gera uma SAS, adiciona uma entrada ao log de auditoria local e retorna a SAS para um usuário, que pode usar a SAS para acessar os recursos do Armazenamento do Azure. Ao incluir uma ID de correlação no log de auditoria local e no log de auditoria de armazenamento, você permite que esses eventos sejam correlacionados posteriormente. O valor é um GUID sem chaves e com caracteres minúsculos.

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

Especificar a profundidade do diretório

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

Por exemplo, o diretório raiz https://{account}.blob.core.windows.net/{container}/ tem uma profundidade de 0. Cada subdiretório dentro do diretório 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 determinados cabeçalhos de resposta a serem retornados quando a assinatura de acesso compartilhado é usada em uma solicitação, você 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 você especificar o parâmetro de consulta rsct=binary em um token SAS, o cabeçalho de resposta Content-Type será definido como binary. Esse valor substitui o valor do cabeçalho Content-Type armazenado para o blob para uma solicitação usando somente essa assinatura de acesso compartilhado.

Se você criar uma assinatura de acesso compartilhado que especifique cabeçalhos de resposta como parâmetros de consulta, deverá incluir esses cabeçalhos de resposta na cadeia de caracteres para assinar usada para construir a cadeia de caracteres de assinatura. Para obter mais informações, consulte a seção "Especifique a assinatura".

Especificar o âmbito da encriptação

O campo signed encryption scope (ses) especifica um escopo de criptografia que o aplicativo cliente usa quando você carrega blobs usando o token SAS por meio da operação Put Blob. O campo signed encryption scope é suportado quando o campo de versão assinada (sv) no token SAS é a versão 2020-12-06 ou posterior. Se o campo de versão assinada especificar uma versão anterior à versão suportada, o serviço retornará o código de resposta de erro 403 (Proibido).

Se o escopo de criptografia padrão estiver definido para o contêiner ou sistema de arquivos, o campo ses respeitará a política de criptografia de contêiner. Se houver uma incompatibilidade entre o parâmetro de consulta ses e x-ms-default-encryption-scope cabeçalho e o cabeçalho x-ms-deny-encryption-scope-override estiver definido como true, o serviço retornará o código de resposta de erro 403 (Proibido).

Se o cabeçalho x-ms-encryption-scope e o parâmetro de consulta ses forem fornecidos na solicitação PUT e houver uma incompatibilidade, o serviço retornará o código de resposta de erro 400 (Solicitação incorreta).

Especifique a assinatura

O campo signature (sig) é usado para autorizar uma solicitação feita por um cliente com a assinatura de acesso compartilhado. A cadeia de caracteres para sinal é uma cadeia de caracteres exclusiva construída a partir dos campos que devem ser verificados para autorizar a solicitação. A assinatura é um HMAC que é calculado sobre a cadeia de caracteres para assinar e a chave usando o algoritmo SHA256 e, em seguida, codificado usando a codificação Base64.

Para construir a cadeia de caracteres de assinatura de uma SAS de delegação de usuário, crie a cadeia de caracteres para assinar a partir dos campos que compõem a solicitação, codifique a cadeia de caracteres como UTF-8 e, em seguida, calcule a assinatura usando o algoritmo HMAC-SHA256. Os campos incluídos na cadeia de caracteres para assinar devem ser decodificados por URL.

Os campos obrigatórios na cadeia de caracteres para assinar dependem da versão do serviço usada para autorização (camposv). As seções a seguir descrevem a configuração de cadeia de caracteres para assinar para versões que suportam a SAS de delegação de usuário.

Versão 2020-12-06 e posterior

A cadeia de caracteres para assinar para autorização versã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 string-to-sign para autorização versã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 caracteres 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 canonicalizado

A parte canonicalizedResource da cadeia de caracteres é um caminho canônico para o recurso assinado. Ele deve incluir o ponto de extremidade de Armazenamento de Blob e o nome do recurso, e deve ser decodificado por URL. Um caminho de blob deve incluir seu contêiner. Um caminho de diretório deve incluir o número de subdiretórios que correspondem ao parâmetro sdd.

A cadeia de caracteres de recurso canonicalizada para um contêiner deve omitir a barra à direita (/) para uma SAS que fornece acesso a esse contêiner.

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

Exemplo de contêiner (Armazenamento de Blob 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 contêiner (Armazenamento do Azure Data Lake)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Exemplo de diretório (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Exemplo de Blob (Armazenamento Azure Data Lake)
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 SAS, especifique uma cadeia de caracteres vazia para o campo. Certifique-se de incluir o caractere de nova linha (\n) após a cadeia de caracteres vazia.

Exemplo de SAS de delegação de usuário

O exemplo a seguir mostra um URI de blob com um token SAS de delegação de usuário anexado a ele. O token SAS de delegação de usuário fornece permissões de leitura e gravação 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=198.51.100.10-198.51.100.20&spr=https&sv=2022-11-02&sr=b&sig=<signature>

Cada parte do URI é descrita na tabela a seguir:

Name Porção SAS Descrição
URI do recurso https://myaccount.blob.core.windows.net/sascontainer/blob1.txt O endereço do blob. É altamente recomendável que você use HTTPS.
Delimitador ? O delimitador que precede a cadeia de caracteres de consulta. O delimitador não faz parte do token SAS.
Permissões sp=rw As permissões concedidas pelo SAS incluem Leitura (r) e Gravação (w).
Hora de início st=2023-05-24T01:13:55Z Especificado na hora UTC. Se quiser que o SAS seja válido imediatamente, omita a hora de início.
Prazo de validade se=2023-05-24T09:13:55Z Especificado na hora UTC.
ID do objeto skoid=<object-id> Uma entidade de segurança Microsoft Entra.
ID do inquilino sktid=<tenant-id> O locatário do Microsoft Entra onde a entidade de segurança está registrada.
Hora de início da chave skt=2023-05-24T01:13:55Z O início do tempo de vida da chave de delegação do usuário.
Prazo de expiração da chave ske=2023-05-24T09:13:55Z O fim do tempo de vida da chave de delegação do usuário.
Serviço chave sks=b Somente o serviço Blob é suportado para o valor do serviço.
Versão chave skv=2022-11-02 A versão do serviço de armazenamento que foi usada para obter a chave de delegação do usuário.
Intervalo de IP sip=198.51.100.10-198.51.100.20 O intervalo de endereços IP a partir dos quais um pedido será aceite.
Protocolo spr=https Somente solicitações que usam HTTPS são permitidas.
Versão do serviço Blob sv=2022-11-02 Para o Armazenamento do Azure versão 2012-02-12 e posterior, este parâmetro indica a versão a ser usada.
Recurso sr=b O recurso é um blob.
Assinatura sig=<signature> Usado para autorizar o acesso ao blob. A assinatura é um HMAC que é calculado sobre uma cadeia de caracteres para assinar e chave usando o algoritmo SHA256 e, em seguida, codificado usando a codificação Base64.

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

Se você acredita que um SAS foi comprometido, você deve revogá-lo. Você pode revogar uma SAS de delegação de usuário revogando a chave de delegação do usuário ou alterando ou removendo atribuições de função RBAC e ACLs POSIX para a entidade de segurança usada para criar a SAS.

Importante

A chave de delegação de usuário e as atribuições de função RBAC são armazenadas em cache pelo Armazenamento do Azure, portanto, pode haver um atraso entre quando você inicia o processo de revogação e quando uma SAS de delegação de usuário existente se torna inválida.

Revogar a chave de delegação do usuário

Você pode revogar a chave de delegação do usuário chamando a operação Revogar Chaves de Delegação de Usuário. Quando você revoga a chave de delegação do usuário, todas as assinaturas de acesso compartilhado que dependem dessa chave se tornam inválidas. Em seguida, você pode chamar a operação Obter Chave de Delegação de Usuário novamente e usar a chave para criar novas assinaturas de acesso compartilhado. Esta é a maneira mais rápida de revogar uma SAS de delegação de usuário.

Alterar ou remover atribuições de função ou ACLs

Você pode alterar ou remover a atribuição de função RBAC e as ACLs POSIX para a entidade de segurança usada para criar a SAS. Quando um cliente usa a SAS para acessar um recurso, o Armazenamento do Azure verifica se a entidade de segurança cujas credenciais foram usadas para proteger a SAS tem as permissões necessárias para o recurso.

Ver também