Skapa en SAS för användardelegering för en container eller blob med .NET
Med en signatur för delad åtkomst (SAS) kan du bevilja begränsad åtkomst till containrar och blobar i ditt lagringskonto. När du skapar en SAS anger du dess begränsningar, inklusive vilka Azure Storage-resurser en klient har åtkomst till, vilka behörigheter de har för dessa resurser och hur länge SAS är giltigt.
Varje SAS signeras med en nyckel. Du kan signera en SAS på något av två sätt:
- Med en nyckel som skapats med Microsoft Entra-autentiseringsuppgifter. En SAS som är signerad med Microsoft Entra-autentiseringsuppgifter är en SAS för användardelegering . En klient som skapar en SAS för användardelegering måste tilldelas en Azure RBAC-roll som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Mer information finns i Skapa en SAS för användardelegering.
- Med lagringskontonyckeln. Både en tjänst-SAS och ett sas-konto signeras med lagringskontonyckeln. Klienten som skapar en tjänst-SAS måste antingen ha direkt åtkomst till kontonyckeln eller tilldelas behörigheten Microsoft.Storage/storageAccounts/listkeys/action . Mer information finns i Skapa en tjänst-SAS eller Skapa ett konto-SAS.
Kommentar
En SAS för användardelegering ger överlägsen säkerhet till en SAS som är signerad med lagringskontonyckeln. Microsoft rekommenderar att du använder en SAS för användardelegering när det är möjligt. Mer information finns i Bevilja begränsad åtkomst till data med signaturer för delad åtkomst (SAS).
Den här artikeln visar hur du använder Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för en container eller blob med hjälp av Azure Storage-klientbiblioteket för .NET.
Om SAS för användardelegering
En SAS-token för åtkomst till en container eller blob kan skyddas med hjälp av antingen Microsoft Entra-autentiseringsuppgifter eller en kontonyckel. En SAS som skyddas med Microsoft Entra-autentiseringsuppgifter kallas sas för användardelegering eftersom den OAuth 2.0-token som används för att signera SAS begärs för användarens räkning.
Microsoft rekommenderar att du använder Microsoft Entra-autentiseringsuppgifter när det är möjligt som bästa praxis för säkerhet, i stället för att använda kontonyckeln, som är enklare att kompromettera. När din programdesign kräver signaturer för delad åtkomst använder du Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för överlägsen säkerhet. Mer information om SAS för användardelegering finns i Skapa en SAS för användardelegering.
Varning
Alla klienter som har en giltig SAS kan komma åt data i ditt lagringskonto enligt sas-tillstånd. Det är viktigt att skydda en SAS från skadlig eller oavsiktlig användning. Använd diskretion när du distribuerar en SAS och ha en plan för att återkalla en komprometterad SAS.
Mer information om signaturer för delad åtkomst finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).
Tilldela Azure-roller för åtkomst till data
När ett Microsoft Entra-säkerhetsobjekt försöker komma åt data måste det säkerhetsobjektet ha behörighet till resursen. Oavsett om säkerhetsobjektet är en hanterad identitet i Azure eller ett Microsoft Entra-användarkonto som kör kod i utvecklingsmiljön måste säkerhetsobjektet tilldelas en Azure-roll som ger åtkomst till data. Information om hur du tilldelar behörigheter via Azure RBAC finns i Tilldela en Azure-roll för åtkomst till blobdata.
Konfigurera projektet
Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.
Installera paket
Installera följande paket:
dotnet add package Azure.Identity
dotnet add package Azure.Storage.Blobs
Konfigurera appkoden
Lägg till följande using
direktiv:
using Azure;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Sas;
Hämta en autentiserad tokenautentiseringsuppgift
Om du vill hämta en tokenautentiseringsuppgift som koden kan använda för att auktorisera begäranden till Blob Storage skapar du en instans av klassen DefaultAzureCredential . Mer information om hur du använder klassen DefaultAzureCredential för att auktorisera en hanterad identitet för åtkomst till Blob Storage finns i Azure Identity-klientbiblioteket för .NET.
Följande kodfragment visar hur du hämtar autentiseringsuppgifterna för autentiserade token och använder det för att skapa en tjänstklient för Blob Storage:
// 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());
Mer information om hur du auktoriserar åtkomst till Blob Storage från dina program med .NET SDK finns i Autentisera .NET-program med Azure-tjänster.
Hämta användardelegeringsnyckeln
Varje SAS signeras med en nyckel. Om du vill skapa en SAS för användardelegering måste du först begära en användardelegeringsnyckel som sedan används för att signera SAS. Användardelegeringsnyckeln motsvarar den kontonyckel som används för att signera en tjänst-SAS eller ett SAS-konto, förutom att den förlitar sig på dina Microsoft Entra-autentiseringsuppgifter. När en klient begär en användardelegeringsnyckel med en OAuth 2.0-token returnerar Blob Storage användarens delegeringsnyckel för användarens räkning.
När du har användardelegeringsnyckeln kan du använda den nyckeln för att skapa valfritt antal signaturer för delad åtkomst för användare under nyckelns livslängd. Användarens delegeringsnyckel är oberoende av den OAuth 2.0-token som används för att hämta den, så token behöver inte förnyas om nyckeln fortfarande är giltig. Du kan ange hur lång tid nyckeln är giltig, upp till högst sju dagar.
Använd någon av följande metoder för att begära användarens delegeringsnyckel:
Följande kodexempel visar hur du begär användarens delegeringsnyckel:
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;
}
Skapa en SAS för användardelegering
Du kan skapa en SAS för användardelegering för en container eller blob baserat på appens behov.
När du har hämtat användardelegeringsnyckeln kan du skapa en SAS för användardelegering för att delegera begränsad åtkomst till en container. Följande kodexempel visar hur du skapar en SAS för användardelegering för en container:
public static async Task<Uri> CreateUserDelegationSASContainer(
BlobContainerClient containerClient,
UserDelegationKey userDelegationKey)
{
// Create a SAS token for the container resource that's also valid for 1 day
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = containerClient.Name,
Resource = "c",
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(containerClient.Uri)
{
// Specify the user delegation key
Sas = sasBuilder.ToSasQueryParameters(
userDelegationKey,
containerClient.GetParentBlobServiceClient().AccountName)
};
return uriBuilder.ToUri();
}
Använda en SAS för användardelegering för att auktorisera ett klientobjekt
Du kan använda en SAS för användardelegering för att auktorisera ett klientobjekt för att utföra åtgärder på en container eller blob baserat på de behörigheter som beviljas av SAS.
I följande kodexempel visas hur du använder SAS för användardelegering för att auktorisera ett BlobContainerClient-objekt . Det här klientobjektet kan användas för att utföra åtgärder på containerresursen baserat på de behörigheter som beviljas av SAS.
// Create a Uri object with a user delegation SAS appended
BlobContainerClient containerClient = blobServiceClient
.GetBlobContainerClient("sample-container");
Uri containerSASURI = await CreateUserDelegationSASContainer(containerClient, userDelegationKey);
// Create a container client object with SAS authorization
BlobContainerClient containerClientSAS = new BlobContainerClient(containerSASURI);
Resurser
Mer information om hur du skapar en SAS för användardelegering med hjälp av Azure Blob Storage-klientbiblioteket för .NET finns i följande resurser.
Kodexempel
REST API-åtgärder
Azure SDK för .NET innehåller bibliotek som bygger på Azure REST API, så att du kan interagera med REST API-åtgärder via välbekanta .NET-paradigm. Klientbiblioteksmetoden för att hämta en användardelegeringsnyckel använder följande REST API-åtgärd:
- Hämta användardelegeringsnyckel (REST API)
Klientbiblioteksresurser
Se även
- Grant limited access to Azure Storage resources using shared access signatures (SAS) (Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS))
- Skapa en SAS för användardelegering
Relaterat innehåll
- Den här artikeln är en del av utvecklarguiden för Blob Storage för .NET. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din .NET-app.