Delen via


Een SAS voor gebruikersdelegering maken voor een blob met Java

Met een Shared Access Signature (SAS) kunt u beperkte toegang verlenen tot containers en blobs in uw opslagaccount. Wanneer u een SAS maakt, geeft u de beperkingen op, waaronder welke Azure Storage-resources een client mag openen, welke machtigingen ze hebben voor deze resources en hoe lang de SAS geldig is.

Elke SAS is ondertekend met een sleutel. U kunt een SAS op twee manieren ondertekenen:

  • Met een sleutel die is gemaakt met behulp van Microsoft Entra-referenties. Een SAS die is ondertekend met Microsoft Entra-referenties is een SAS voor gebruikersdelegatie . Aan een client die een SAS voor gebruikersdelegering maakt, moet een Azure RBAC-rol worden toegewezen die de actie Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey bevat. Zie Een SAS voor gebruikersdelegatie maken voor meer informatie.
  • Met de sleutel van het opslagaccount. Zowel een service-SAS als een account-SAS zijn ondertekend met de sleutel van het opslagaccount. De client die een service-SAS maakt, moet directe toegang hebben tot de accountsleutel of de machtiging Microsoft.Storage/storageAccounts/listkeys/action toewijzen. Zie Een service-SAS maken of Een account-SAS maken voor meer informatie.

Notitie

Een SAS voor gebruikersdelegering biedt superieure beveiliging voor een SAS die is ondertekend met de sleutel van het opslagaccount. Microsoft raadt het gebruik van een SAS voor gebruikersdelegering aan, indien mogelijk. Zie Beperkte toegang verlenen tot gegevens met Shared Access Signatures (SAS) voor meer informatie.

In dit artikel wordt beschreven hoe u Microsoft Entra-referenties gebruikt om een SAS voor gebruikersdelegering te maken voor een blob met behulp van de Azure Storage-clientbibliotheek voor Java.

Over de SAS voor gebruikersdelegatie

Een SAS-token voor toegang tot een container of blob kan worden beveiligd met behulp van Microsoft Entra-referenties of een accountsleutel. Een SAS die is beveiligd met Microsoft Entra-referenties wordt een SAS voor gebruikersdelegatie genoemd, omdat het OAuth 2.0-token dat wordt gebruikt om de SAS te ondertekenen namens de gebruiker wordt aangevraagd.

Microsoft raadt u aan microsoft Entra-referenties te gebruiken als best practice voor beveiliging, in plaats van de accountsleutel te gebruiken, die gemakkelijker kan worden aangetast. Wanneer voor uw toepassingsontwerp handtekeningen voor gedeelde toegang zijn vereist, gebruikt u Microsoft Entra-referenties om een SAS voor gebruikersdelegatie te maken voor superieure beveiliging. Zie Een SAS voor gebruikersdelegatie maken voor meer informatie over de SAS voor gebruikersdelegatie.

Let op

Elke client die een geldige SAS heeft, heeft toegang tot gegevens in uw opslagaccount, zoals toegestaan door die SAS. Het is belangrijk om een SAS te beschermen tegen schadelijk of onbedoeld gebruik. Gebruik discretie bij het distribueren van een SAS en een plan voor het intrekken van een gecompromitteerde SAS.

Zie Beperkte toegang verlenen tot Azure Storage-resources met behulp van Sas (Shared Access Signatures ) voor meer informatie over handtekeningen voor gedeelde toegang.

Azure-rollen toewijzen voor toegang tot gegevens

Wanneer een Microsoft Entra-beveiligingsprincipaal probeert toegang te krijgen tot blobgegevens, moet die beveiligingsprincipaal machtigingen hebben voor de resource. Of de beveiligingsprincipaal een beheerde identiteit is in Azure of een Microsoft Entra-gebruikersaccount dat code uitvoert in de ontwikkelomgeving, de beveiligingsprincipaal moet een Azure-rol worden toegewezen die toegang verleent tot blobgegevens. Zie Een Azure-rol toewijzen voor toegang tot blobgegevens voor informatie over het toewijzen van machtigingen via Azure RBAC.

Uw project instellen

Als u wilt werken met de codevoorbeelden in dit artikel, voegt u de volgende importrichtlijnen toe:

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

Een geverifieerde tokenreferentie ophalen

Als u een tokenreferentie wilt ophalen die door uw code kan worden gebruikt om aanvragen voor Blob Storage te autoriseren, maakt u een exemplaar van de klasse DefaultAzureCredential . Zie de Azure Identity-clientbibliotheek voor Java voor meer informatie over het gebruik van de klasse DefaultAzureCredential om een beheerde identiteit te autoriseren voor toegang tot Blob Storage.

In het volgende codefragment ziet u hoe u de geverifieerde tokenreferentie kunt ophalen en deze kunt gebruiken om een serviceclient voor Blob Storage te maken:

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

Zie Azure-verificatie met Java en Azure Identity voor meer informatie over het autoriseren van toegang tot Blob Storage vanuit uw toepassingen met de Java SDK.

De gebruikersdelegeringssleutel ophalen

Elke SAS is ondertekend met een sleutel. Als u een SAS voor gebruikersdelegering wilt maken, moet u eerst een gebruikersdelegeringssleutel aanvragen, die vervolgens wordt gebruikt om de SAS te ondertekenen. De gebruikersdelegatiesleutel is vergelijkbaar met de accountsleutel die wordt gebruikt voor het ondertekenen van een service-SAS of een account-SAS, behalve dat deze afhankelijk is van uw Microsoft Entra-referenties. Wanneer een client een gebruikersdelegeringssleutel aanvraagt met behulp van een OAuth 2.0-token, retourneert Blob Storage de gebruikersdelegeringssleutel namens de gebruiker.

Zodra u de gebruikersdelegeringssleutel hebt, kunt u die sleutel gebruiken om een willekeurig aantal shared access signatures voor gebruikersdelegering te maken gedurende de levensduur van de sleutel. De gebruikersdelegeringssleutel is onafhankelijk van het OAuth 2.0-token dat wordt gebruikt om het te verkrijgen, zodat het token niet hoeft te worden vernieuwd als de sleutel nog steeds geldig is. U kunt opgeven hoe lang de sleutel geldig blijft, maximaal zeven dagen.

Gebruik een van de volgende methoden om de gebruikersdelegeringssleutel aan te vragen:

In het volgende codevoorbeeld ziet u hoe u de gebruikersdelegeringssleutel aanvraagt:

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

Een SAS voor gebruikersdelegering maken voor een blob

Zodra u de gebruikersdelegeringssleutel hebt verkregen, kunt u een SAS voor gebruikersdelegering maken. U kunt een SAS voor gebruikersdelegatie maken om beperkte toegang tot een blobresource te delegeren met behulp van de volgende methode vanuit een BlobClient-exemplaar :

De gebruikersdelegatiesleutel voor het ondertekenen van de SAS wordt doorgegeven aan deze methode, samen met de opgegeven waarden voor BlobServiceSasSignatureValues. Machtigingen worden opgegeven als een BlobSasPermission-exemplaar .

In het volgende codevoorbeeld ziet u hoe u een SAS voor gebruikersdelegatie voor een blob maakt:

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

Een SAS voor gebruikersdelegering gebruiken om een clientobject te autoriseren

In het volgende codevoorbeeld ziet u hoe u de SAS voor gebruikersdelegering gebruikt die in het vorige voorbeeld is gemaakt om een BlobClient-object te autoriseren. Dit clientobject kan worden gebruikt om bewerkingen uit te voeren op de blobresource op basis van de machtigingen die zijn verleend door de SAS.

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

Resources

Zie de volgende resources voor meer informatie over het maken van een SAS voor gebruikersdelegering met behulp van de Azure Blob Storage-clientbibliotheek voor Java.

REST API-bewerkingen

De Azure SDK voor Java bevat bibliotheken die zijn gebaseerd op de Azure REST API, zodat u kunt communiceren met REST API-bewerkingen via bekende Java-paradigma's. De clientbibliotheekmethode voor het ophalen van een gebruikersdelegatiesleutel maakt gebruik van de volgende REST API-bewerking:

Codevoorbeelden

Clientbibliotheekbronnen

Zie ook