Creare una firma di accesso condiviso di delega utente 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 le credenziali di Microsoft Entra per creare una firma di accesso condiviso di delega utente per un contenitore o un BLOB usando la libreria client di Archiviazione di Azure per Java.

Informazioni sulla firma di accesso condiviso di delega utente

Un token di firma di accesso condiviso per l'accesso a un contenitore o a un BLOB può essere protetto utilizzando le credenziali di Microsoft Entra o una chiave dell'account. Una firma di accesso condiviso protetta con le credenziali di Microsoft Entra è denominata firma di accesso condiviso di delega utente, perché il token OAuth 2.0 utilizzato per firmarla viene richiesto per conto dell'utente.

Microsoft raccomanda di usare le credenziali di Microsoft Entra, quando è possibile, come procedura consigliata per la sicurezza, invece di usare la chiave dell'account, che può essere compromessa più facilmente. Quando la progettazione dell'applicazione richiede firme di accesso condiviso, utilizzare le credenziali di Microsoft Entra per creare una firma di accesso condiviso di delega utente, per garantire maggiore sicurezza. Per altre informazioni sulla firma di accesso condiviso di delega utente, vedere Creare una firma di accesso condiviso di delega utente.

Attenzione

Qualsiasi client che disponga di una firma di accesso condiviso valida può accedere ai dati nell'account di archiviazione, in base alle autorizzazioni di tale firma. È importante proteggere una firma di accesso condiviso da eventi dannosi o imprevisti. Prestare attenzione durante la distribuzione di una firma di accesso condiviso e predisporre un piano di revoca di eventuali firme di accesso condiviso compromesse.

Per altre informazioni sulle firme di accesso condiviso, vedere Concedere accesso limitato alle risorse di archiviazione di Azure tramite firme di accesso condiviso.

Assegnare ruoli di Azure per l'accesso ai dati

Quando un'entità di sicurezza di Microsoft Entra tenta di accedere ai dati, tale entità deve avere le autorizzazioni per la risorsa. Se l'entità di sicurezza è un'identità gestita in Azure o un account utente Microsoft Entra che esegue codice nell'ambiente di sviluppo, all'entità di sicurezza deve essere assegnato un ruolo di Azure che concede l'accesso ai dati. Per informazioni sull'assegnazione delle autorizzazioni tramite il controllo degli accessi in base al ruolo di Azure, vedere Assegnare un ruolo di Azure per l'accesso ai dati BLOB.

Impostare il progetto

Per lavorare con gli esempi di codice in questo articolo, aggiungere le direttive import seguenti:

import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;

Ottenere le credenziali del token autenticato

Per ottenere le credenziali del token che il codice può utilizzare per autorizzare le richieste all'Archivio BLOB, creare un'istanza di classe DefaultAzureCredential. Per altre informazioni sull'uso della classe DefaultAzureCredential per autorizzare un'identità gestita ad accedere all'archiviazione BLOB, vedere Libreria client di Identità di Azure per Java.

Il frammento di codice seguente illustra come ottenere le credenziali del token autenticato e usarlo per creare un client del servizio per l'Archiviazione BLOB:

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

Per altre informazioni sull'autorizzazione dell'accesso all'archiviazione BLOB dalle applicazioni con Java SDK, vedere Autenticazione di Azure con Java e Identità di Azure.

Ottenere la chiave di delega utente

Ogni firma di accesso condiviso viene firmata con una chiave. Per creare una firma di accesso condiviso di delega utente, in primo luogo è necessario richiedere una chiave di delega utente, che viene quindi utilizzata per firmare la firma di accesso condiviso. La chiave di delega utente è analoga alla chiave dell'account utilizzata per firmare una firma di accesso condiviso del servizio o dell'account, a eccezione del fatto che essa si basa sulle credenziali di Microsoft Entra. Quando un client richiede una chiave di delega utente utilizzando un token OAuth 2.0, l'Archivio BLOB restituisce la chiave di delega utente per conto dell'utente.

Dopo aver ottenuto la chiave di delega utente, è possibile utilizzarla per creare un numero qualsiasi di firme di accesso condiviso di delega utente, per l'intera durata della chiave. La chiave di delega utente è indipendente dal token OAuth 2.0 utilizzato per acquisirla, quindi non è necessario rinnovare il token se la chiave è ancora valida. È possibile specificare l'intervallo di tempo di validità della chiave, fino a un massimo di sette giorni.

Utilizzare uno dei metodi seguenti per richiedere la chiave di delega utente:

L'esempio di codice seguente mostra come richiedere la chiave di delega utente:

public UserDelegationKey requestUserDelegationKey(BlobServiceClient blobServiceClient) {
    // Request a user delegation key that's valid for 1 day, as an example
    UserDelegationKey userDelegationKey = blobServiceClient.getUserDelegationKey(
        OffsetDateTime.now().minusMinutes(5),
        OffsetDateTime.now().plusDays(1));

    return userDelegationKey;
}

Creare una firma di accesso condiviso di delega utente

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

Dopo aver ottenuto la chiave di delega utente, è possibile creare una firma di accesso condiviso di delega utente. Si può creare una firma di accesso condiviso di delega utente per delegare l'accesso limitato a una risorsa del contenitore, utilizzando il metodo seguente da un'istanza BlobContainerClient:

La chiave di delega utente per firmare la firma di accesso condiviso viene passata a questo metodo insieme ai valori specificati per BlobServiceSasSignatureValues. Le autorizzazioni vengono specificate come istanza blobContainerSasPermission.

L'esempio di codice seguente illustra come creare una firma di accesso condiviso di delega utente per un contenitore:

public String createUserDelegationSASContainer(BlobContainerClient containerClient, UserDelegationKey userDelegationKey) {
    // 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.generateUserDelegationSas(sasSignatureValues, userDelegationKey);
    return sasToken;
}

Utilizzare una firma di accesso condiviso di delega utente per autorizzare un oggetto client

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

L'esempio di codice seguente illustra come utilizzare la firma di accesso condiviso di delega utente, creata nell'esempio precedente, 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.

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

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

Risorse

Per altre informazioni sulla creazione di una firma di accesso condiviso di delega utente tramite la libreria client di Archiviazione BLOB di Azure per Java, vedere le risorse riportate di seguito.

Esempi di codice

Operazioni dell'API REST

Azure SDK per Java contiene librerie basate su API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi Java noti. Il metodo della libreria client per ottenere una chiave di delega utente utilizza le seguenti operazioni API REST:

Risorse libreria client

Vedi anche

  • Questo articolo fa parte della guida per sviluppatori di Archiviazione BLOB per Java. Per altre informazioni, vedere l'elenco completo degli articoli della Guida per sviluppatori in Creare la propria app Java.