Partilhar via


Criar uma conta SAS com Java

Uma assinatura de acesso compartilhado (SAS) permite que você conceda acesso limitado a contêineres e blobs em sua conta de armazenamento. Ao criar uma SAS, você especifica suas restrições, incluindo quais recursos do Armazenamento do Azure um cliente tem permissão para acessar, quais permissões eles têm nesses recursos e por quanto tempo a SAS é válida.

Cada SAS é assinado com uma chave. Você pode assinar uma SAS de duas maneiras:

  • Com uma chave criada usando credenciais do Microsoft Entra. Uma SAS assinada com credenciais do Microsoft Entra é uma SAS de delegação de usuário. Um cliente que cria uma SAS de delegação de usuário deve receber 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 a 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. O cliente que cria uma SAS de serviço deve ter acesso direto à chave da conta ou receber a permissão Microsoft.Storage/storageAccounts/listkeys/action . Para saber mais, consulte Criar uma SAS de serviço ou Criar uma SAS de conta.

Nota

Uma SAS de delegação de usuário oferece segurança superior a uma SAS assinada com a chave da conta de armazenamento. A Microsoft recomenda o uso de uma SAS de delegação de usuário quando possível. Para obter mais informações, consulte Conceder acesso limitado a dados com assinaturas de acesso compartilhado (SAS).

Este artigo mostra como usar a chave da conta de armazenamento para criar uma conta SAS com a biblioteca de cliente do Armazenamento do 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:

As políticas de acesso armazenado não são suportadas para uma SAS de conta.

Configure o seu projeto

Para trabalhar com os exemplos de código neste artigo, adicione as seguintes 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;

Create an account SAS (Criar uma SAS de conta)

Você pode criar uma conta SAS para delegar acesso limitado aos recursos da conta de armazenamento usando o seguinte método:

Para configurar os valores de assinatura para a conta SAS, use as seguintes classes auxiliares:

  • AccountSasPermission: Representa as permissões permitidas pelo SAS. Em nosso exemplo, definimos a permissão de leitura como true.
  • AccountSasService: Representa os serviços acessíveis pelo SAS. No nosso exemplo, permitimos o acesso ao serviço Blob.
  • AccountSasResourceType: Representa os tipos de recursos acessíveis pelo SAS. Em nosso exemplo, permitimos o acesso a APIs de nível de serviço.

Depois que as classes auxiliares estiverem configuradas, você poderá inicializar parâmetros para o 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 conta SAS:

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 conta SAS de um cliente

O exemplo de código a seguir mostra como usar a conta SAS criada no exemplo anterior para autorizar um objeto BlobServiceClient . Esse objeto de cliente pode ser usado para acessar APIs de nível de serviço com base nas permissões concedidas pelo 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 conta SAS como 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 conta SAS para autorizar e trabalhar com um objeto BlobContainerClient ou objeto BlobClient , se esses tipos de recursos tiverem acesso concedido como parte dos valores de assinatura.

Recursos

Para saber mais sobre como criar uma conta SAS usando a biblioteca de cliente do Armazenamento de Blobs do Azure para Java, consulte os recursos a seguir.

Amostras de código

Recursos da biblioteca do cliente

Consulte também