Vytvoření SAS delegování uživatele pro objekt blob pomocí .NET

Sdílený přístupový podpis (SAS) umožňuje udělit omezený přístup ke kontejnerům a objektům blob ve vašem účtu úložiště. Při vytváření sdíleného přístupového podpisu zadáte jeho omezení, včetně toho, ke kterým prostředkům Azure Storage má klient povolený přístup, jaká oprávnění k těmto prostředkům má a jak dlouho je SAS platný.

Každý SAS je podepsaný klíčem. Sas můžete podepsat jedním ze dvou způsobů:

  • S klíčem vytvořeným pomocí přihlašovacích údajů Microsoft Entra. SAS podepsaný pomocí přihlašovacích údajů Microsoft Entra je SAS delegování uživatele. Klientovi, který vytvoří SAS delegování uživatele, musí být přiřazena role Azure RBAC, která zahrnuje akci Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Další informace najdete v tématu Vytvoření SAS delegování uživatele.
  • S klíčem účtu úložiště. Sas služby i SAS účtu jsou podepsané klíčem účtu úložiště. Klient, který vytvoří SAS služby, musí mít buď přímý přístup k klíči účtu, nebo musí mít přiřazené oprávnění Microsoft.Storage/storageAccounts/listkeys/action . Další informace najdete v tématu Vytvoření sdíleného přístupového podpisu služby nebo vytvoření sdíleného přístupového podpisu účtu.

Poznámka:

Sas delegování uživatele nabízí vynikající zabezpečení SAS podepsanému klíčem účtu úložiště. Microsoft doporučuje používat SAS delegování uživatele, pokud je to možné. Další informace najdete v tématu Udělení omezeného přístupu k datům pomocí sdílených přístupových podpisů (SAS).

Tento článek ukazuje, jak pomocí přihlašovacích údajů Microsoft Entra vytvořit SAS delegování uživatele pro objekt blob pomocí klientské knihovny Azure Storage pro .NET.

Informace o SAS delegování uživatele

Token SAS pro přístup ke kontejneru nebo objektu blob může být zabezpečený pomocí přihlašovacích údajů Microsoft Entra nebo klíče účtu. Sas zabezpečený pomocí přihlašovacích údajů Microsoft Entra se nazývá SAS delegování uživatele, protože token OAuth 2.0 použitý k podepsání SAS se požaduje jménem uživatele.

Microsoft doporučuje používat přihlašovací údaje Microsoft Entra, pokud je to možné jako osvědčený postup zabezpečení, a ne používat klíč účtu, který může být snadněji ohrožen. Když návrh vaší aplikace vyžaduje sdílené přístupové podpisy, použijte přihlašovací údaje Microsoft Entra k vytvoření SAS delegování uživatele pro zajištění vyššího zabezpečení. Další informace o SAS delegování uživatele najdete v tématu Vytvoření SAS delegování uživatele.

Upozornění

Každý klient, který má platný SAS, má přístup k datům ve vašem účtu úložiště, jak to povoluje tento SAS. Je důležité chránit SAS před škodlivým nebo nezamýšleným použitím. Při distribuci sdíleného přístupového podpisu použijte vlastní uvážení a vytvořte plán pro odvolání ohroženého sdíleného přístupového podpisu.

Další informace o sdílených přístupových podpisech najdete v tématu Udělení omezeného přístupu k prostředkům Azure Storage pomocí sdílených přístupových podpisů (SAS).

Přiřazení rolí Azure pro přístup k datům

Když se objekt zabezpečení Microsoft Entra pokusí získat přístup k datům objektů blob, musí mít tento objekt zabezpečení oprávnění k prostředku. Bez ohledu na to, jestli je objekt zabezpečení spravovanou identitou v Azure nebo uživatelským účtem Microsoft Entra, který spouští kód ve vývojovém prostředí, musí být instančnímu objektu zabezpečení přiřazena role Azure, která uděluje přístup k datům objektů blob. Informace o přiřazování oprávnění prostřednictvím Azure RBAC najdete v tématu Přiřazení role Azure pro přístup k datům objektů blob.

Nastavení projektu

Pokud chcete pracovat s příklady kódu v tomto článku, nastavte projekt pomocí následujícího postupu.

Instalace balíčků

Nainstalujte následující balíčky:

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

Nastavení kódu aplikace

Přidejte následující using direktivy:

using Azure;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Sas;

Získání přihlašovacích údajů ověřeného tokenu

Pokud chcete získat přihlašovací údaje tokenu, které váš kód může použít k autorizaci požadavků na Blob Storage, vytvořte instanci DefaultAzureCredential třídy. Další informace o použití DefaultAzureCredential třídy k autorizaci spravované identity pro přístup ke službě Blob Storage naleznete v klientské knihovně identit Azure pro .NET.

Následující fragment kódu ukazuje, jak získat přihlašovací údaje ověřeného tokenu a použít ho k vytvoření klienta služby pro službu 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());

Další informace o autorizaci přístupu ke službě Blob Storage z vašich aplikací pomocí sady .NET SDK najdete v tématu Ověřování aplikací .NET pomocí služeb Azure.

Získání klíče delegování uživatele

Každý SAS je podepsaný klíčem. Pokud chcete vytvořit SAS delegování uživatele, musíte nejprve požádat o klíč delegování uživatele, který se pak použije k podepsání sdíleného přístupového podpisu. Klíč delegování uživatele je podobný klíč účtu, který se používá k podepsání SAS služby nebo SAS účtu, s tím rozdílem, že spoléhá na vaše přihlašovací údaje Microsoft Entra. Když klient požádá o klíč delegování uživatele pomocí tokenu OAuth 2.0, služba Blob Storage vrátí klíč delegování uživatele jménem uživatele.

Jakmile budete mít klíč delegování uživatele, můžete tento klíč použít k vytvoření libovolného počtu sdílených přístupových podpisů delegování uživatele v průběhu životnosti klíče. Klíč delegování uživatele je nezávislý na tokenu OAuth 2.0 použitém k jeho získání, takže pokud je klíč stále platný, token se nemusí obnovovat. Můžete zadat dobu, po kterou klíč zůstane platný, až do 7 dnů.

K vyžádání klíče delegování uživatele použijte jednu z následujících metod:

Následující příklad kódu ukazuje, jak požádat o klíč delegování uživatele:

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

Vytvoření SAS delegování uživatele pro objekt blob

Po získání klíče delegování uživatele můžete vytvořit SAS delegování uživatele, který deleguje omezený přístup k prostředku objektu blob. Následující příklad kódu ukazuje, jak vytvořit SAS delegování uživatele pro objekt blob:

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

Použití SAS delegování uživatele k autorizaci objektu klienta

Následující příklad kódu ukazuje, jak pomocí SAS delegování uživatele autorizovat objekt BlobClient . Tento klientský objekt lze použít k provádění operací s prostředkem objektu blob na základě oprávnění udělených 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);

Zdroje informací

Další informace o vytvoření SAS delegování uživatele pomocí klientské knihovny Azure Blob Storage pro .NET najdete v následujících zdrojích informací.

Operace rozhraní REST API

Sada Azure SDK pro .NET obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat .NET. Metoda klientské knihovny pro získání klíče delegování uživatele používá následující operace rozhraní REST API:

Prostředky klientské knihovny

Viz také