Vytvoření SAS služby 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í klíče účtu úložiště vytvořit SAS služby pro objekt blob s klientskou knihovnou Azure Blob Storage pro .NET.

Informace o SAS služby

Sdílený přístupový podpis služby je podepsaný přístupovým klíčem účtu. Pomocí třídy StorageSharedKeyCredential můžete vytvořit přihlašovací údaje, které se používají k podepsání sdíleného přístupového podpisu služby.

K definování oprávnění a doby trvání sdíleného přístupového podpisu můžete použít také uložené zásady přístupu. Pokud je zadaný název existující uložené zásady přístupu, je tato zásada přidružená k SAS. Další informace o uložených zásadách přístupu najdete v tématu Definování uložených zásad přístupu. Pokud nejsou k dispozici žádné uložené zásady přístupu, příklady kódu v tomto článku ukazují, jak definovat oprávnění a dobu trvání sas.

Vytvoření SAS služby pro objekt blob

Následující příklad kódu ukazuje, jak vytvořit SAS služby pro prostředek objektu blob. Nejprve kód ověří, že objekt BlobClient je autorizovaný pomocí přihlašovacích údajů sdíleného klíče kontrolou CanGenerateSasUri vlastnost. Potom vygeneruje SAS služby prostřednictvím třídy BlobSasBuilder a volá GenerateSasUri pro vytvoření identifikátoru URI SAS služby založeného na objektech klienta a tvůrce.

public static async Task<Uri> CreateServiceSASBlob(
    BlobClient blobClient,
    string storedPolicyName = null)
{
    // Check if BlobContainerClient object has been authorized with Shared Key
    if (blobClient.CanGenerateSasUri)
    {
        // Create a SAS token that's valid for one day
        BlobSasBuilder sasBuilder = new BlobSasBuilder()
        {
            BlobContainerName = blobClient.GetParentBlobContainerClient().Name,
            BlobName = blobClient.Name,
            Resource = "b"
        };

        if (storedPolicyName == null)
        {
            sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddDays(1);
            sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
        }
        else
        {
            sasBuilder.Identifier = storedPolicyName;
        }

        Uri sasURI = blobClient.GenerateSasUri(sasBuilder);

        return sasURI;
    }
    else
    {
        // Client object is not authorized via Shared Key
        return null;
    }
}

Použití sdíleného přístupového podpisu služby k autorizaci objektu klienta

Následující příklad kódu ukazuje, jak pomocí SAS služby 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.

Nejprve vytvořte objekt BlobServiceClient podepsaný přístupovým klíčem účtu:

string accountName = "<storage-account-name>";
string accountKey = "<storage-account-key";
StorageSharedKeyCredential storageSharedKeyCredential =
    new(accountName, accountKey);
BlobServiceClient blobServiceClient = new BlobServiceClient(
    new Uri($"https://{accountName}.blob.core.windows.net"),
    storageSharedKeyCredential);

Potom vygenerujte SAS služby, jak je znázorněno v předchozím příkladu, a použijte SAS k autorizaci objektu BlobClient :

// Create a Uri object with a service SAS appended
BlobClient blobClient = blobServiceClient
    .GetBlobContainerClient("sample-container")
    .GetBlobClient("sample-blob.txt");
Uri blobSASURI = await CreateServiceSASBlob(blobClient);

// Create a blob client object representing 'sample-blob.txt' with SAS authorization
BlobClient blobClientSAS = new BlobClient(blobSASURI);

Definování uložených zásad přístupu

Uložené zásady přístupu poskytují další úroveň kontroly nad sdíleným přístupovým podpisem na úrovni služby (SAS) na straně serveru. Vytvoření uložených zásad přístupu slouží k seskupení sdílených přístupových podpisů a k poskytnutí dalších omezení podpisů, které jsou vázány zásadou.

Pomocí uložených zásad přístupu můžete změnit čas spuštění, čas vypršení platnosti nebo oprávnění podpisu. Uložené zásady přístupu můžete použít také k odvolání podpisu po jeho vydání. Tato část se zaměřuje na kontejnery objektů blob, ale uložené zásady přístupu se podporují také pro sdílené složky, fronty a tabulky.

Pokud chcete spravovat uložené zásady přístupu u prostředku kontejneru, zavolejte jednu z následujících metod z objektu BlobContainerClient :

Vytvoření nebo úprava uložených zásad přístupu

U prostředku můžete nastavit maximálně pět zásad přístupu najednou. Každé SignedIdentifier pole s jedinečným Id polem odpovídá jedné zásadě přístupu. Pokus o nastavení více než pěti zásad přístupu najednou způsobí, že služba vrátí stavový kód 400 (Bad Request).

Následující příklad kódu ukazuje, jak vytvořit dvě uložené zásady přístupu pro prostředek kontejneru:

public static async Task CreateStoredAccessPolicyAsync(BlobContainerClient containerClient)
{
    // Create a stored access policy with read and write permissions, valid for one day
    List<BlobSignedIdentifier> signedIdentifiers = new List<BlobSignedIdentifier>
    {
        new BlobSignedIdentifier
        {
            Id = "sample-read-write-policy",
            AccessPolicy = new BlobAccessPolicy
            {
                StartsOn = DateTimeOffset.UtcNow,
                ExpiresOn = DateTimeOffset.UtcNow.AddDays(1),
                Permissions = "rw"
            }
        },
        new BlobSignedIdentifier
        {
            Id = "sample-read-policy",
            AccessPolicy = new BlobAccessPolicy
            {
                StartsOn = DateTimeOffset.UtcNow,
                ExpiresOn = DateTimeOffset.UtcNow.AddDays(1),
                Permissions = "r"
            }
        }
    };

    // Set the container's access policy
    await containerClient.SetAccessPolicyAsync(permissions: signedIdentifiers);
}

Můžete také upravit existující zásadu. Následující příklad kódu ukazuje, jak upravit jednu uloženou zásadu přístupu pro aktualizaci data vypršení platnosti zásad:

public static async Task ModifyStoredAccessPolicyAsync(BlobContainerClient containerClient)
{
    BlobContainerAccessPolicy accessPolicy = await containerClient.GetAccessPolicyAsync();
    List<BlobSignedIdentifier> signedIdentifiers = accessPolicy.SignedIdentifiers.ToList();

    // Modify the expiration date a single policy
    var samplePolicy = signedIdentifiers.FirstOrDefault(item => item.Id == "sample-read-policy");
    samplePolicy.AccessPolicy.PolicyExpiresOn = DateTimeOffset.UtcNow.AddDays(7);

    // Update the container's access policy
    await containerClient.SetAccessPolicyAsync(permissions: signedIdentifiers);
}

Odvolání nebo odstranění uložených zásad přístupu

Pokud chcete odvolat uložené zásady přístupu, můžete je odstranit, přejmenovat tak, že změníte podepsaný identifikátor nebo změníte čas vypršení platnosti na hodnotu v minulosti. Změna podepsaného identifikátoru přeruší přidružení mezi existujícími podpisy a uloženými zásadami přístupu. Změna doby vypršení platnosti na hodnotu v minulosti způsobí vypršení platnosti všech přidružených podpisů. Odstranění nebo úprava uložených zásad přístupu okamžitě ovlivní všechny sdílené přístupové podpisy přidružené k ní.

Následující příklad kódu ukazuje, jak odvolat zásadu změnou Id vlastnosti pro podepsaný identifikátor:

public static async Task RevokeStoredAccessPolicyAsync(BlobContainerClient containerClient)
{
    BlobContainerAccessPolicy accessPolicy = await containerClient.GetAccessPolicyAsync();
    List<BlobSignedIdentifier> signedIdentifiers = accessPolicy.SignedIdentifiers.ToList();

    // Revoke a single policy by changing its name
    var samplePolicy = signedIdentifiers.FirstOrDefault(item => item.Id == "sample-read-policy");
    samplePolicy.Id = "sample-read-policy-revoke";

    // Update the container's access policy
    await containerClient.SetAccessPolicyAsync(permissions: signedIdentifiers);
}

Všechny zásady přístupu z prostředku kontejneru můžete také odebrat voláním SetAccessPolicyAsync s prázdným permissions parametrem. Následující příklad ukazuje, jak odstranit všechny uložené zásady přístupu ze zadaného kontejneru:

public static async Task DeleteStoredAccessPolicyAsync(BlobContainerClient containerClient)
{
    // Remove all stored access policies for the container resource
    await containerClient.SetAccessPolicyAsync();
}

Zdroje informací

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

Prostředky klientské knihovny

Viz také