Vytvoření SAS služby pro kontejner nebo 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 kontejner nebo 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
Sas služby pro kontejner nebo objekt blob můžete vytvořit na základě potřeb vaší aplikace.
Následující příklad kódu ukazuje, jak vytvořit SAS služby pro prostředek kontejneru. Nejprve kód ověří, že objekt BlobContainerClient 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> CreateServiceSASContainer(
BlobContainerClient containerClient,
string storedPolicyName = null)
{
// Check if BlobContainerClient object has been authorized with Shared Key
if (containerClient.CanGenerateSasUri)
{
// Create a SAS token that's valid for one day
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = containerClient.Name,
Resource = "c"
};
if (storedPolicyName == null)
{
sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddDays(1);
sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
}
else
{
sasBuilder.Identifier = storedPolicyName;
}
Uri sasURI = containerClient.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
Sas služby můžete použít k autorizaci klientského objektu k provádění operací s kontejnerem nebo objektem blob na základě oprávnění udělených SAS.
Následující příklady kódu ukazují, jak pomocí SAS služby autorizovat objekt BlobContainerClient . Tento objekt klienta lze použít k provádění operací s prostředkem kontejneru 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 BlobContainerClient :
// Create a Uri object with a service SAS appended
BlobContainerClient containerClient = blobServiceClient
.GetBlobContainerClient("sample-container");
Uri containerSASURI = await CreateServiceSASContainer(containerClient);
// Create a container client object representing 'sample-container' with SAS authorization
BlobContainerClient containerClientSAS = new BlobContainerClient(containerSASURI);
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, Microsoft doporučuje odstranit podepsaný identifikátor a vytvořit nový. Změna podepsaného identifikátoru přeruší přidružení mezi existujícími podpisy a uloženými zásadami přístupu. 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. Tento přístup efektivně odstraní podepsaný identifikátor a vytvoří nový 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í.