Criar uma SAS de conta com Java
Uma SAS (Assinatura de Acesso Compartilhado) permite conceder acesso limitado a contêineres e blobs da conta de armazenamento. Ao criar uma SAS, você especificará suas restrições, inclusive que recursos do Armazenamento do Azure um cliente terá permissão para acessar, que permissões ele terá nesses recursos e por quanto tempo a SAS é válida.
Cada SAS é assinada com uma chave. Você pode assinar uma SAS de uma das duas maneiras:
- Com uma chave criada utilizando as credenciais do Microsoft Entra. Uma SAS que é assinada pelas credenciais do Microsoft Entra é uma SAS de delegação de usuário. É necessário atribuir um cliente que cria uma SAS de delegação de usuário a uma função RBAC do Azure que inclua a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Para saber mais, consulte Criar uma SAS de delegação de usuário.
- Com uma chave da conta de armazenamento. Tanto uma SAS de serviço quanto uma SAS de conta são assinadas com a chave da conta de armazenamento. É necessário que o cliente que cria uma SAS de serviço tenha acesso direto à chave da conta ou receba a permissão Microsoft.Storage/storageAccounts/listkeys/action. Para saber mais, consulte Criar uma SAS de serviço ou Criar uma SAS de conta.
Observação
Uma SAS de delegação de usuário oferece mais segurança do que uma SAS que é assinada com a chave da conta de armazenamento. A Microsoft recomenda usar uma SAS de delegação de usuário quando possível. Para saber mais, confira Conceder acesso limitado a dados com assinaturas de acesso compartilhado (SAS).
Este artigo mostra como usar a chave de conta de armazenamento para criar uma SAS de conta com a biblioteca de clientes do Armazenamento do Microsoft Azure para Java.
Sobre a conta SAS
Uma SAS de conta é criada no nível da conta de armazenamento e é assinada com a chave de acesso da conta. Ao criar uma conta SAS, você pode:
- Delegue acesso a operações de nível de serviço que não estão atualmente disponíveis com um SAS específico de serviço, como Obter Propriedades do Serviço de Blob, Definir as Propriedades do Serviço de Blob e Obter as Estatísticas do Serviço de Blob .
- Delegue o acesso a mais de um serviço em uma conta de armazenamento ao mesmo tempo. Por exemplo, você pode delegar o acesso a recursos no Armazenamento de Blobs do Azure e nos Arquivos do Azure usando uma conta SAS.
As políticas de acesso armazenado não são suportadas em uma conta SAS.
Configurar o seu projeto
Para trabalhar com os exemplos de código nesta seção, adicione a seguinte diretivas de importação:
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;
import com.azure.storage.common.sas.AccountSasPermission;
import com.azure.storage.common.sas.AccountSasResourceType;
import com.azure.storage.common.sas.AccountSasService;
import com.azure.storage.common.sas.AccountSasSignatureValues;
Criar uma SAS de conta
Você pode criar uma SAS de conta para delegar acesso limitado aos recursos da conta de armazenamento usando o seguinte método:
Para configurar os valores de assinatura para a SAS da conta, use as seguintes classes auxiliares:
- AccountSasPermission: representa as permissões permitidas pela SAS. Em nosso exemplo, definimos a permissão de leitura como
true
. - AccountSasService: representa os serviços acessíveis pela SAS. Em nosso exemplo, permitimos o acesso ao serviço Blob.
- AccountSasResourceType: representa os tipos de recursos acessíveis pela SAS. Em nosso exemplo, permitimos o acesso a APIs de nível de serviço.
Depois que as classes auxiliares forem configuradas, você poderá inicializar parâmetros para a SAS com uma instância AccountSasSignatureValues .
O exemplo de código a seguir mostra como configurar parâmetros SAS e chamar o método generateAccountSas para obter a SAS da conta:
public String createAccountSAS(BlobServiceClient blobServiceClient) {
// Configure the SAS parameters
OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
AccountSasPermission accountSasPermission = new AccountSasPermission()
.setReadPermission(true);
AccountSasService services = new AccountSasService()
.setBlobAccess(true);
AccountSasResourceType resourceTypes = new AccountSasResourceType()
.setService(true);
// Generate the account SAS
AccountSasSignatureValues accountSasValues = new AccountSasSignatureValues(
expiryTime,
accountSasPermission,
services,
resourceTypes);
String sasToken = blobServiceClient.generateAccountSas(accountSasValues);
return sasToken;
}
Usar uma Assinatura de Acesso Compartilhado de conta de um cliente
O exemplo de código a seguir mostra como usar a SAS de serviço criada no exemplo anterior para autorizar um objeto BlobServiceClient. Esse objeto cliente pode então ser usado para acessar APIs de nível de serviço com base nas permissões concedidas pela SAS.
Primeiro, crie um objeto BlobServiceClient assinado com a chave de acesso da conta:
String accountName = "<account-name>";
String accountKey = "<account-key>";
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint(String.format("https://%s.blob.core.windows.net/", accountName))
.credential(credential)
.buildClient();
Em seguida, gere a SAS de serviço conforme mostrado no exemplo anterior e use a SAS para autorizar um objeto BlobServiceClient:
// Create a SAS token
String sasToken = createAccountSAS(blobServiceClient);
// Create a new BlobServiceClient using the SAS token
BlobServiceClient sasServiceClient = new BlobServiceClientBuilder()
.endpoint(blobServiceClient.getAccountUrl())
.sasToken(sasToken)
.buildClient();
Você também pode usar uma SAS de conta para autorizar e trabalhar com um objeto BlobContainerClient ou um objeto BlobClient, se esses tipos de recursos receberem acesso como parte dos valores de assinatura.
Recursos
Para saber mais sobre como criar uma SAS de conta usando a biblioteca de clientes do Armazenamento de Blobs do Azure para Java, confira os recursos a seguir.
Exemplos de código
Recursos da biblioteca de clientes
- Documentação de referência da biblioteca de clientes
- Código-fonte da biblioteca de clientes
- Pacote (Maven)