Maak een gebruikersdelegatie-SAS aan voor een container of 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 Microsoft Entra-aanmeldgegevens. Een SAS die is ondertekend met behulp van 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 clienttoepassing die een service-SAS maakt, moet rechtstreeks toegang hebben tot de accountsleutel of de machtiging Microsoft.Storage/storageAccounts/listkeys/action toegewezen krijgen. Zie Een service-SAS maken of Een account-SAS maken voor meer informatie.

Opmerking

Een SAS voor gebruikersdelegatie biedt betere beveiliging dan 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.

Dit artikel laat zien hoe je Microsoft Entra-credentials kunt gebruiken om een gebruikersdelegatie-SAS te maken voor een container of blob met behulp van de Azure Storage-clientbibliotheek voor Java.

Over de SAS voor gebruikersoverdracht

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 om waar mogelijk Microsoft Entra-referenties te gebruiken als beveiligingsbest practice, in plaats van de accountsleutel, omdat die eenvoudiger kan worden gecompromitteerd. 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 een SAS voor gebruikersdelegatie.

Caution

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 uitdelen van een SAS en zorg dat je een plan hebt om een gecompromitteerde SAS in te trekken. Om onbedoeld gebruik te voorkomen, gebruikt u een gebruikersgebonden, door gebruikers gedelegeerde SAS, waarmee het SAS-token aan de beoogde eindgebruiker wordt gekoppeld en die door niemand anders kan worden gebruikt.

Voor meer informatie over gedeelde toegangssignaturen, zie Beperkte toegang tot Azure-opslagbronnen verlenen met gedeelde toegangssignaturen (SAS).

Azure-rollen toewijzen voor toegang tot gegevens

Wanneer een Microsoft Entra-beveiligingsprincipaal probeert toegang te krijgen tot gegevens, 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 gegevens. Zie Een Azure-rol toewijzen voor toegang tot blobgegevens voor informatie over het toewijzen van machtigingen via Azure RBAC.

Stel uw project in

Om met de codevoorbeelden in dit artikel te werken, voeg je 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 . Voor meer informatie over het gebruik van de DefaultAzureCredential-klasse om een beheerde identiteit te autoriseren voor toegang tot Blob Storage, zie Azure Identity clientbibliotheek voor Java.

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

Voor meer informatie over het autoriseren van toegang tot Blob Storage vanuit uw applicaties met de Java SDK, zie Azure authentication with Java and Azure Identity.

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:

Het volgende codevoorbeeld laat zien hoe je de gebruikersdelegatiesleutel kunt aanvragen:

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

Maak een gebruikersdelegatie SAS

Je kunt een gebruikersdelegatie-SAS maken voor een container of blob, gebaseerd op de behoeften van je app.

Zodra je de gebruikersdelegatiesleutel hebt verkregen, kun je een gebruikersdelegatie-SAS aanmaken. Je kunt een gebruikersdelegatie-SAS maken om beperkte toegang te delegeren aan een containerresource met de volgende methode vanuit een BlobContainerClient-instantie :

De gebruikersdelegatiesleutel om de SAS te ondertekenen wordt aan deze methode doorgegeven, samen met gespecificeerde waarden voor BlobServiceSasSignatureValues. Rechten worden gespecificeerd als een BlobContainerSasPermission-instantie .

In het volgende codevoorbeeld ziet u hoe u een SAS voor gebruikersdelegering voor een container maakt:

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

Een SAS voor gebruikersdelegering gebruiken om een clientobject te autoriseren

Je kunt een gebruikersdelegatie-SAS gebruiken om een clientobject te autoriseren om bewerkingen uit te voeren op een container of blob op basis van de door de SAS verleende permissies.

Het volgende codevoorbeeld laat zien hoe je de gebruikersdelegatie SAS die in het eerdere voorbeeld is aangemaakt gebruikt om een BlobContainerClient-object te autoriseren. Dit clientobject kan worden gebruikt om bewerkingen uit te voeren op de containerresource op basis van de machtigingen die zijn verleend door de SAS.

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

Resources

Voor meer informatie over het maken van een gebruikersdelegatie-SAS met behulp van de Azure Blob Storage clientbibliotheek voor Java, zie de volgende bronnen.

Codevoorbeelden

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:

Bronnen van cliëntbibliotheek

Zie ook

  • Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Java. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Uw Java-app bouwen voor meer informatie.