Creare una firma di accesso condiviso dell'account con Java

Una firma di accesso condiviso (SAS) permette all'utente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i relativi vincoli, incluse le risorse di Archiviazione di Azure alle quali un client è autorizzato ad accedere, le autorizzazioni di cui dispone per tali risorse e la durata della validità della firma di accesso condiviso.

Ogni firma di accesso condiviso viene firmata con una chiave. Questa operazione può essere eseguita in due modi:

  • Con una chiave creata utilizzando le credenziali di Microsoft Entra. Una firma di accesso condiviso firmata con le credenziali di Microsoft Entra è una firma di accesso condiviso di delega utente. A un client che crea una firma di accesso condiviso di delega utente deve essere assegnato un ruolo di Controllo degli accessi in base al ruolo di Azure che include l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Per altre informazioni, vedere Creare una firma di accesso condiviso di delega utente.
  • Con la chiave dell'account di archiviazione. Una firma di accesso condiviso del servizio e una firma di accesso condiviso dell'account, vengono entrambe firmate con la chiave dell'account di archiviazione. Il client che crea una firma di accesso condiviso del servizio deve avere accesso diretto alla chiave dell'account o disporre dell'autorizzazione Microsoft.Storage/storageAccounts/listkeys/action. Per altre informazioni, vedere Creare una firma di accesso condiviso del servizio oppure Creare una firma di accesso condiviso dell'account.

Nota

Una firma di accesso condiviso di delega utente offre una protezione maggiore rispetto a una firma di accesso condiviso firmata con la chiave dell'account di archiviazione. Quando possibile, Microsoft consiglia di usare una firma di accesso condiviso di delega utente. Per altre informazioni, vedere Concedere accesso limitato ai dati con firme di accesso condiviso.

Questo articolo illustra come usare la chiave dell'account di archiviazione per creare una firma di accesso condiviso dell'account con la libreria client di Archiviazione di Azure per Java.

Informazioni sulla firma di accesso condiviso dell'account

Una firma di accesso condiviso dell'account viene creata al livello di account di archiviazione e viene firmata con la chiave di accesso dell'account. Creando una firma di accesso condiviso dell'account, è possibile:

I criteri di accesso archiviati non sono supportati per la firma di accesso condiviso dell'account.

Impostare il progetto

Per utilizzare gli esempi di codice di questo articolo, aggiungere le direttive import seguenti:

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;

Creare un SAS dell'account

È possibile creare una firma di accesso condiviso dell'account per delegare l'accesso limitato alle risorse dell'account di archiviazione usando il metodo seguente:

Per configurare i valori per la firma di accesso condiviso dell'account, usare le classi helper seguenti:

  • AccountSasPermission: rappresenta le autorizzazioni consentite dalla firma di accesso condiviso. In questo esempio, viene impostata l'autorizzazione di lettura su true.
  • AccountSasService: rappresenta i servizi accessibili dalla firma di accesso condiviso. In questo esempio, viene consentito l'accesso al servizio BLOB.
  • AccountSasResourceType: rappresenta i tipi di risorse accessibili dalla firma di accesso condiviso. In questo esempio, viene consentito l'accesso alle API a livello di servizio.

Dopo aver configurato le classi helper, è possibile inizializzare i parametri per la firma di accesso condiviso con un'istanza di AccountSasSignatureValues .

L'esempio di codice seguente illustra come configurare i parametri di firma di accesso condiviso e chiamare il metodo generateAccountSas per ottenere la firma di accesso condiviso dell'account:

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;
}

Usare una firma di accesso condiviso dell'account da un client

Nell'esempio di codice seguente, viene illustrato come usare la firma di accesso condiviso dell'account creata nell'esempio precedente per autorizzare un oggetto BlobServiceClient. Questo oggetto client può quindi essere usato per accedere alle API a livello di servizio in base alle autorizzazioni concesse dalla firma di accesso condiviso.

Creare prima di tutto un oggetto BlobServiceClient firmato con la chiave di accesso dell'account:

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();

Generare quindi la firma di accesso condiviso dell'account come illustrato nell'esempio precedente e usare la firma di accesso condiviso per autorizzare un oggetto 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();

È anche possibile usare una firma di accesso condiviso dell'account per autorizzare e usare un oggetto BlobContainerClient o un oggetto BlobClient, se a tali tipi di risorse viene concesso l'accesso come parte dei valori della firma.

Risorse

Per altre informazioni sulla creazione di una firma di accesso condiviso dell'account usando la libreria client di Archiviazione BLOB di Azure per Java, vedere le risorse seguenti.

Esempi di codice

Risorse della libreria client

Vedi anche