Een SAS voor gebruikersdelegering maken voor een blob met .NET

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

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, volgt u deze stappen om uw project in te stellen.

Pakketten installeren

Installeer de volgende pakketten:

dotnet add package Azure.Identity
dotnet add package Azure.Storage.Blobs

De app-code instellen

Voeg de volgende using-instructies toe:

using Azure;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.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 .NET 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:

// Construct the blob endpoint from the account name.
string endpoint = $"https://{accountName}.blob.core.windows.net";

// Create a blob service client object using DefaultAzureCredential
BlobServiceClient blobServiceClient = new BlobServiceClient(
    new Uri(endpoint),
    new DefaultAzureCredential());

Zie .NET-toepassingen verifiëren met Azure-services voor meer informatie over het autoriseren van toegang tot Blob Storage vanuit uw toepassingen met de .NET 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 static async Task<UserDelegationKey> RequestUserDelegationKey(
    BlobServiceClient blobServiceClient)
{
    // Get a user delegation key for the Blob service that's valid for 1 day
    UserDelegationKey userDelegationKey =
        await blobServiceClient.GetUserDelegationKeyAsync(
            DateTimeOffset.UtcNow,
            DateTimeOffset.UtcNow.AddDays(1));

    return userDelegationKey;
}

Een SAS voor gebruikersdelegering maken voor een blob

Zodra u de gebruikersdelegeringssleutel hebt verkregen, kunt u een SAS voor gebruikersdelegering maken om beperkte toegang tot een blobresource te delegeren. In het volgende codevoorbeeld ziet u hoe u een SAS voor gebruikersdelegatie voor een blob maakt:

public static async Task<Uri> CreateUserDelegationSASBlob(
    BlobClient blobClient,
    UserDelegationKey userDelegationKey)
{
    // Create a SAS token for the blob resource that's also valid for 1 day
    BlobSasBuilder sasBuilder = new BlobSasBuilder()
    {
        BlobContainerName = blobClient.BlobContainerName,
        BlobName = blobClient.Name,
        Resource = "b",
        StartsOn = DateTimeOffset.UtcNow,
        ExpiresOn = DateTimeOffset.UtcNow.AddDays(1)
    };

    // Specify the necessary permissions
    sasBuilder.SetPermissions(BlobSasPermissions.Read | BlobSasPermissions.Write);

    // Add the SAS token to the blob URI
    BlobUriBuilder uriBuilder = new BlobUriBuilder(blobClient.Uri)
    {
        // Specify the user delegation key
        Sas = sasBuilder.ToSasQueryParameters(
            userDelegationKey,
            blobClient
            .GetParentBlobContainerClient()
            .GetParentBlobServiceClient().AccountName)
    };

    return uriBuilder.ToUri();
}

Een SAS voor gebruikersdelegering gebruiken om een clientobject te autoriseren

In het volgende codevoorbeeld ziet u hoe u de SAS voor gebruikersdelegatie gebruikt 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 Uri object with a user delegation SAS appended
BlobClient blobClient = blobServiceClient
    .GetBlobContainerClient("sample-container")
    .GetBlobClient("sample-blob.txt");
Uri blobSASURI = await CreateUserDelegationSASBlob(blobClient, userDelegationKey);

// Create a blob client object with SAS authorization
BlobClient blobClientSAS = new BlobClient(blobSASURI);

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

REST API-bewerkingen

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

Clientbibliotheekbronnen

Zie ook