Criar uma SAS de serviço para um contêiner ou um blob com o 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 assinada com 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 serviço para um contêiner ou um blob com a biblioteca de clientes do Armazenamento de Blobs para Java.

Sobre a SAS de serviço

Uma SAS de serviço é assinada com a chave de acesso da conta. Você pode usar a classe StorageSharedKeyCredential para criar a credencial usada para assinar a SAS de serviço.

Você também pode usar uma política de acesso armazenada para definir as permissões e a duração da SAS. Se o nome de uma política de acesso armazenada existente for fornecido, essa política está associada com a SAS. Para saber mais sobre as políticas de acesso armazenadas, veja Definir uma política de acesso armazenada. Se nenhuma política de acesso armazenada for fornecida, os exemplos de código neste artigo mostrarão como definir permissões e duração para a SAS.

Criar uma SAS de serviço

Você pode criar uma SAS de serviço para um contêiner ou um blob, de acordo com as necessidades do seu aplicativo.

Você pode criar uma SAS de serviço para delegar acesso limitado a um recurso de contêiner usando o seguinte método:

Os valores de assinatura SAS, como tempo de expiração e permissões assinadas, são passados para o método como parte de uma instância BlobServiceSasSignatureValues. As permissões são especificadas como uma instância BlobContainerSasPermission.

O exemplo de código a seguir mostra como criar uma SAS de serviço com permissões de leitura para um recurso de contêiner:

public String createServiceSASContainer(BlobContainerClient containerClient) {
    // Create a SAS token that's valid for 1 day, as an example
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);

    // Assign read permissions to the SAS token
    BlobContainerSasPermission sasPermission = new BlobContainerSasPermission()
            .setReadPermission(true);

    BlobServiceSasSignatureValues sasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, sasPermission)
            .setStartTime(OffsetDateTime.now().minusMinutes(5));

    String sasToken = containerClient.generateSas(sasSignatureValues);
    return sasToken;
}

Usar uma SAS de serviço para autorizar um objeto cliente

Use uma SAS de serviço para autorizar um objeto cliente a executar operações em um contêiner ou em um blob com base nas permissões concedidas pela SAS.

Os exemplos de código a seguir mostram como usar o serviço SAS para autorizar um objeto BlobContainerClient. Esse objeto cliente pode ser usado para executar operações no recurso de contêiner 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 o SAS do serviço conforme mostrado no exemplo anterior e use o SAS para autorizar um objeto BlobContainerClient:

// Create a SAS token
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("sample-container");
String sasToken = createServiceSASContainer(containerClient);

// Create a new BlobContainerClient using the SAS token
BlobContainerClient sasContainerClient = new BlobContainerClientBuilder()
        .endpoint(containerClient.getBlobContainerUrl())
        .sasToken(sasToken)
        .buildClient();

Recursos

Para saber mais sobre como usar a biblioteca cliente do Armazenamento de Blobs do Azure para Java, veja os seguintes recursos.

Exemplos de código

Recursos da biblioteca de clientes

Confira também