Een SAS voor gebruikersdelegatie maken 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 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 container of 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 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.
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 gebruikersdelegatie maken
U kunt een SAS voor gebruikersdelegering maken voor een container of blob, op basis van de behoeften van uw app.
Zodra u de gebruikersdelegeringssleutel hebt verkregen, kunt u een SAS voor gebruikersdelegering maken. U kunt een SAS voor gebruikersdelegering maken om beperkte toegang tot een containerresource te delegeren met behulp van de volgende methode vanuit een BlobContainerClient-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 BlobContainerSasPermission-exemplaar .
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
U kunt een SAS voor gebruikersdelegatie gebruiken om een clientobject te autoriseren om bewerkingen uit te voeren op een container of blob op basis van de machtigingen die door de SAS zijn verleend.
In het volgende codevoorbeeld ziet u hoe u de SAS voor gebruikersdelegatie gebruikt die in het vorige voorbeeld is gemaakt 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
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.
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:
- Sleutel voor gebruikersdelegering ophalen (REST API)
Clientbibliotheekbronnen
Zie ook
- Beperkte toegang verlenen tot Azure Storage-resources door middel van een SAS
- Een SAS voor gebruikersdelegatie maken
Gerelateerde inhoud
- 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.