Creare una firma di accesso condiviso del servizio per un contenitore o un BLOB 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 del servizio per un contenitore o BLOB con la libreria client di archiviazione BLOB per Java.

Informazioni sulla firma di accesso condiviso del servizio

Una firma di accesso condiviso del servizio viene firmata con la chiave di accesso dell'account. È possibile usare la classe StorageSharedKeyCredential per creare le credenziali usate per firmare la firma di accesso condiviso del servizio.

È anche possibile usare un criterio di accesso archiviato per definire le autorizzazioni e la durata della firma di accesso condiviso. Se viene specificato il nome di un criterio di accesso archiviato esistente, tale criterio è associato alla firma di accesso condiviso. Per altre informazioni sui criteri di accesso archiviati, vedere Definire un criterio di accesso archiviato. Se non viene fornito alcun criterio di accesso archiviato, gli esempi di codice di questo articolo mostrano come definire le autorizzazioni e la durata per la firma di accesso condiviso del servizio.

Creare un SAS di servizio

È possibile creare una firma di accesso condiviso del servizio per un contenitore o un BLOB, in base alle esigenze dell'app.

È possibile creare una firma di accesso condiviso del servizio per delegare l'accesso limitato a una risorsa contenitore usando il metodo seguente:

I valori della firma di accesso condiviso, ad esempio l'ora di scadenza e le autorizzazioni firmate, vengono passati al metodo come parte di un'istanza di BlobServiceSasSignatureValues. Le autorizzazioni vengono specificate come istanza blobContainerSasPermission.

L'esempio di codice seguente mostra come creare una firma di accesso condiviso del servizio con autorizzazioni di lettura per una risorsa contenitore:

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

Usare una firma di accesso condiviso del servizio per autorizzare un oggetto client

È possibile usare una firma di accesso condiviso del servizio per autorizzare un oggetto client a eseguire operazioni su un contenitore o un BLOB in base alle autorizzazioni concesse dalla firma di accesso condiviso.

Gli esempi di codice seguenti illustrano come usare la firma di accesso condiviso del servizio per autorizzare un oggetto BlobContainerClient. Questo oggetto client può essere usato per eseguire operazioni sulla risorsa del contenitore 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 del servizio come illustrato nell'esempio precedente e usare la firma di accesso condiviso per autorizzare un oggetto 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();

Risorse

Per altre informazioni sull'uso della libreria client di Archiviazione BLOB di Azure per Java, vedere le risorse seguenti.

Esempi di codice

Risorse della libreria client

Vedi anche