Creare una firma di accesso condiviso di delega utente per un BLOB con Java

Una firma di accesso condiviso consente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i vincoli, tra cui quali Archiviazione di Azure risorse a cui un client è autorizzato ad accedere, quali autorizzazioni hanno per tali risorse e per quanto tempo la firma di accesso condiviso è valida.

Ogni firma di accesso condiviso viene firmata con una chiave. È possibile firmare una firma di accesso condiviso in uno dei due modi seguenti:

  • Con una chiave creata usando le credenziali di Microsoft Entra. Una firma di accesso condiviso firmata con le credenziali di Microsoft Entra è una firma di accesso condiviso della delega utente. A un client che crea una firma di accesso condiviso della delega utente deve essere assegnato un ruolo controllo degli accessi in base al ruolo di Azure che include Microsoft.ArchiviazioneAzione /storageAccounts/blobServices/generateUserDelegationKey. Per altre informazioni, vedere Creare una firma di accesso condiviso di delega utente.
  • Con la chiave dell'account di archiviazione. Sia una firma di accesso condiviso del servizio che una firma di accesso condiviso dell'account di archiviazione sono 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 deve essere assegnato a Microsoft.ArchiviazioneAutorizzazione /storageAccounts/listkeys/action. Per altre informazioni, vedere Creare una firma di accesso condiviso del servizio o Creare una firma di accesso condiviso dell'account.

Nota

Una firma di accesso condiviso della delega utente offre una sicurezza superiore 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 per la delega utente. Per altre informazioni, vedere Concedere l'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 BLOB usando la libreria client Archiviazione di Azure per Java.

Informazioni sulla firma di accesso condiviso della delega utente

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

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

Attenzione

Qualsiasi client che possiede una firma di accesso condiviso valido può accedere ai dati nell'account di archiviazione, come consentito da tale firma di accesso condiviso. È importante proteggere una firma di accesso condiviso da usi dannosi o imprevisti. Usare la discrezione nella distribuzione di una firma di accesso condiviso e disporre di un piano per revocare una firma di accesso condiviso compromessa.

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 BLOB, tale entità di sicurezza deve disporre delle 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 BLOB. Per informazioni sull'assegnazione di 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 usare 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 una credenziale del token autenticato

Per ottenere una credenziale token che il codice può usare per autorizzare le richieste ai Archiviazione BLOB, creare un'istanza della classe DefaultAzureCredential. Per altre informazioni sull'uso della classe DefaultAzureCredential per autorizzare un'identità gestita ad accedere alle 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 alle 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 della delega utente, è prima necessario richiedere una chiave di delega utente, che viene quindi usata per firmare la firma di accesso condiviso. La chiave di delega utente è analoga alla chiave dell'account usata per firmare una firma di accesso condiviso del servizio o una firma di accesso condiviso dell'account, ad eccezione del fatto che si basa sulle credenziali di Microsoft Entra. Quando un client richiede una chiave di delega utente usando un token OAuth 2.0, BLOB Archiviazione restituisce la chiave di delega utente per conto dell'utente.

Dopo aver ottenuto la chiave di delega utente, è possibile usare tale chiave per creare un numero qualsiasi di firme di accesso condiviso di delega utente, per tutta la durata della chiave. La chiave di delega utente è indipendente dal token OAuth 2.0 usato per acquisirlo, quindi il token non deve essere rinnovato se la chiave è ancora valida. È possibile specificare l'intervallo di tempo per cui la chiave rimane valida, fino a un massimo di sette giorni.

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

Nell'esempio di codice seguente viene illustrato 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 per un BLOB

Dopo aver ottenuto la chiave di delega utente, è possibile creare una firma di accesso condiviso per la delega utente. È possibile creare una firma di accesso condiviso di delega utente per delegare l'accesso limitato a una risorsa BLOB usando il metodo seguente da un'istanza blobClient :

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 blobSasPermission .

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

public String createUserDelegationSASBlob(BlobClient blobClient, 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
    BlobSasPermission sasPermission = new BlobSasPermission()
            .setReadPermission(true);

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

    String sasToken = blobClient.generateUserDelegationSas(sasSignatureValues, userDelegationKey);
    return sasToken;
}

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

Nell'esempio di codice seguente viene illustrato come usare la firma di accesso condiviso di delega utente creata nell'esempio precedente per autorizzare un oggetto BlobClient . Questo oggetto client può essere usato per eseguire operazioni sulla risorsa BLOB in base alle autorizzazioni concesse dalla firma di accesso condiviso.

// Create a SAS token for a blob
BlobClient blobClient = blobServiceClient
        .getBlobContainerClient("sample-container")
        .getBlobClient("sample-blob.txt");
String sasToken = createUserDelegationSASBlob(blobClient, userDelegationKey);

// Create a new BlobClient using the SAS token
BlobClient sasBlobClient = new BlobClientBuilder()
        .endpoint(blobClient.getBlobUrl())
        .sasToken(sasToken)
        .buildClient();

Risorse

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

Operazioni dell'API REST

Azure SDK per Java contiene librerie basate sull'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 usa l'operazione API REST seguente:

Esempi di codice

Risorse della libreria client

Vedi anche