Szolgáltatás SAS létrehozása blobhoz .NET-tel

A közös hozzáférésű jogosultságkód (SAS) lehetővé teszi, hogy korlátozott hozzáférést biztosítson a tárfiókban lévő tárolókhoz és blobokhoz. Sas létrehozásakor meg kell adnia annak korlátait, beleértve az ügyfelek számára engedélyezett Azure Storage-erőforrásokat, az ezen erőforrásokra vonatkozó engedélyeiket és az SAS érvényességének érvényességét.

Minden SAS egy kulccsal van aláírva. SAS-t kétféleképpen írhat alá:

  • A Microsoft Entra hitelesítő adataival létrehozott kulccsal. A Microsoft Entra hitelesítő adataival aláírt SAS egy felhasználódelegálási SAS. A felhasználói delegálási SAS-t létrehozó ügyfélhez olyan Azure RBAC-szerepkört kell hozzárendelni, amely tartalmazza a Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey műveletet. További információ: Felhasználói delegálási SAS létrehozása.
  • A tárfiók kulccsal. A szolgáltatás SAS és a fiók SAS is a tárfiók kulccsal van aláírva. A szolgáltatás SAS-t létrehozó ügyfélnek közvetlen hozzáféréssel kell rendelkeznie a fiókkulcshoz, vagy hozzá kell rendelnie a Microsoft.Storage/storageAccounts/listkeys/action engedélyt. További információ: Szolgáltatás SAS létrehozása vagy fiók SAS létrehozása.

Megjegyzés:

A felhasználói delegálási SAS kiváló biztonságot nyújt a tárfiók kulccsal aláírt SAS-nek. A Microsoft javasolja, hogy lehetőség szerint használjon felhasználói delegálási SAS-t. További információ: Korlátozott hozzáférés biztosítása megosztott hozzáférésű jogosultságkódokkal (SAS) rendelkező adatokhoz.

Ez a cikk bemutatja, hogyan hozhat létre szolgáltatás SAS-t a .NET-hez készült Azure Blob Storage ügyfélkódtárral rendelkező blobhoz a tárfiók kulcsával.

Tudnivalók a szolgáltatás SAS-járól

A szolgáltatás SAS-jének aláírása a fiók hozzáférési kulcsával történik. A StorageSharedKeyCredential osztály használatával létrehozhatja a szolgáltatás SAS aláírásához használt hitelesítő adatokat.

Tárolt hozzáférési szabályzattal is meghatározhatja az SAS engedélyeit és időtartamát. Ha meg van adva egy meglévő tárolt hozzáférési szabályzat neve, akkor a szabályzat az SAS-hez van társítva. A tárolt hozzáférési szabályzatokról további információt a tárolt hozzáférési szabályzatok definiálása című témakörben talál. Ha nincs megadva tárolt hozzáférési szabályzat, az ebben a cikkben szereplő kód példák bemutatják, hogyan határozhatja meg az SAS engedélyeit és időtartamát.

Szolgáltatás SAS létrehozása blobhoz

Az alábbi példakód bemutatja, hogyan hozhat létre szolgáltatás SAS-t egy bloberőforráshoz. Először is a kód ellenőrzi, hogy a BlobClient objektum megosztott kulcsú hitelesítő adatokkal van-e engedélyezve a CanGenerateSasUri tulajdonság ellenőrzésével. Ezután létrehozza a szolgáltatás SAS-ját a BlobSasBuilder osztályon keresztül, és meghívja a GenerateSasUri-t , hogy hozzon létre egy szolgáltatás SAS URI-t az ügyfél és a szerkesztőobjektumok alapján.

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

Szolgáltatás SAS használata ügyfélobjektum engedélyezéséhez

Az alábbi példakód bemutatja, hogyan engedélyezheti a BlobClient-objektumokat a szolgáltatás SAS használatával. Ez az ügyfélobjektum az SAS által megadott engedélyek alapján a bloberőforráson végzett műveletek végrehajtására használható.

Először hozzon létre egy BlobServiceClient objektumot, amely a fiók hozzáférési kulcsával van aláírva:

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

Ezután hozza létre a szolgáltatás SAS-t a korábbi példában látható módon, és használja az SAS-t egy BlobClient-objektum engedélyezéséhez:

// 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);

Tárolt hozzáférési szabályzat meghatározása

A tárolt hozzáférési szabályzatok további szintű vezérlést biztosítanak egy szolgáltatásszintű közös hozzáférésű jogosultságkód (SAS) felett a kiszolgáló oldalán. A tárolt hozzáférési szabályzatok létrehozása a megosztott hozzáférésű jogosultságkódok csoportosítását és a szabályzat által kötött aláírások további korlátozását szolgálja.

Tárolt hozzáférési szabályzattal módosíthatja az aláírás kezdő időpontját, lejárati idejét vagy engedélyeit. Tárolt hozzáférési szabályzattal is visszavonhatja az aláírást a kiállítása után. Ez a szakasz a blobtárolókra összpontosít, de a tárolt hozzáférési szabályzatok fájlmegosztásokhoz, üzenetsorokhoz és táblákhoz is támogatottak.

A tárolóerőforrás tárolt hozzáférési szabályzatainak kezeléséhez hívja meg az alábbi módszerek egyikét egy BlobContainerClient-objektumból :

Tárolt hozzáférési szabályzat létrehozása vagy módosítása

Egyszerre legfeljebb öt hozzáférési szabályzatot állíthat be egy erőforráson. Minden SignedIdentifier mező egyedi mezővel Id egy hozzáférési szabályzatnak felel meg. Ha egyszerre több mint öt hozzáférési szabályzatot próbál beállítani, a szolgáltatás állapotkódot 400 (Bad Request)ad vissza.

Az alábbi példakód bemutatja, hogyan hozhat létre két tárolt hozzáférési szabályzatot egy tárolóerőforráson:

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

Meglévő szabályzatot is módosíthat. Az alábbi példakód bemutatja, hogyan módosítható egyetlen tárolt hozzáférési szabályzat a szabályzat lejárati dátumának frissítéséhez:

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

Tárolt hozzáférési szabályzat visszavonása vagy törlése

A tárolt hozzáférési szabályzat visszavonásához törölheti, átnevezheti az aláírt azonosító módosításával, vagy a lejárati időt egy korábbi értékre módosíthatja. Az aláírt azonosító módosítása megszakítja a társításokat a meglévő aláírások és a tárolt hozzáférési szabályzat között. Ha a lejárati időt egy korábbi értékre módosítja, a társított aláírások lejárnak. A tárolt hozzáférési szabályzat törlése vagy módosítása azonnal hatással van a hozzá társított összes közös hozzáférésű jogosultságkódra.

Az alábbi példakód bemutatja, hogyan vonhat vissza egy szabályzatot az aláírt azonosító tulajdonságának Id módosításával:

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

A SetAccessPolicyAsync üres permissions paraméterrel való meghívásával az összes hozzáférési szabályzatot eltávolíthatja egy tárolóerőforrásból. Az alábbi példa bemutatja, hogyan törölheti az összes tárolt hozzáférési szabályzatot egy megadott tárolóból:

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

Források

Ha többet szeretne megtudni arról, hogyan hozhat létre szolgáltatás SAS-t a .NET-hez készült Azure Blob Storage ügyfélkódtár használatával, tekintse meg az alábbi erőforrásokat.

Ügyfélkódtár erőforrásai

Kapcsolódó információk