使用 .NET 创建帐户 SAS
使用共享访问签名 (SAS),可以授予对存储帐户中容器和 blob 的有限访问权限。 创建 SAS 时,需要指定其约束条件,包括允许客户端访问哪些 Azure 存储资源、它们对这些资源具有哪些权限,以及 SAS 的有效期。
每个 SAS 均使用密钥进行签名。 可通过以下两种方式之一对 SAS 进行签名:
- 使用通过 Microsoft Entra 凭据创建的密钥。 使用 Microsoft Entra 凭据签名的 SAS 是用户委托 SAS。 必须为创建用户委托 SAS 的客户端分配一个 Azure RBAC 角色,该角色包括 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 操作。 若要了解详细信息,请参阅创建用户委托 SAS。
- 使用存储帐户密钥。 服务 SAS 和帐户 SAS 均使用存储帐户密钥进行签名。 创建服务 SAS 的客户端必须具有对帐户密钥的直接访问权限,或分配有 Microsoft.Storage/storageAccounts/listkeys/action 权限。 若要了解详细信息,请参阅创建服务 SAS 或创建帐户 SAS。
注意
用户委托 SAS 为使用存储帐户密钥签名的 SAS 提供更高的安全性。 Microsoft 建议尽可能使用用户委托 SAS。 有关详细信息,请参阅向具有共享访问签名的数据授予有限的访问权限 (SAS)。
本文介绍如何使用存储帐户密钥通过用于 .NET 的 Azure 存储客户端库创建帐户 SAS。
关于帐户 SAS
帐户 SAS 是在存储帐户级别创建的。 通过创建帐户 SAS,可以:
- 委托对服务特定 SAS 当前不可用的服务级别操作的访问权限,例如获取 Blob 服务属性、设置 Blob 服务属性和获取 Blob 服务统计信息。
- 一次性委托对存储帐户中多个服务的访问权限。 例如,可以使用帐户 SAS 委托对 Azure Blob 存储和 Azure 文件存储中的资源的访问权限。
帐户 SAS 不支持存储访问策略。
创建帐户 SAS
帐户 SAS 使用帐户访问密钥进行签名。 可以使用 StorageSharedKeyCredential 类创建用于为 SAS 签名的凭据。
下面的代码示例演示如何创建新的 AccountSasBuilder 对象并调用 ToSasQueryParameters 方法以获取帐户 SAS 令牌字符串。
public static async Task<string> CreateAccountSAS(StorageSharedKeyCredential sharedKey)
{
// Create a SAS token that's valid for one day
AccountSasBuilder sasBuilder = new AccountSasBuilder()
{
Services = AccountSasServices.Blobs | AccountSasServices.Queues,
ResourceTypes = AccountSasResourceTypes.Service,
ExpiresOn = DateTimeOffset.UtcNow.AddDays(1),
Protocol = SasProtocol.Https
};
sasBuilder.SetPermissions(AccountSasPermissions.Read |
AccountSasPermissions.Write);
// Use the key to get the SAS token
string sasToken = sasBuilder.ToSasQueryParameters(sharedKey).ToString();
return sasToken;
}
通过客户端使用帐户 SAS
若要使用帐户 SAS 访问 Blob 服务的服务级别 API,请使用存储帐户的帐户 SAS 和 Blob 存储终结点创建 BlobServiceClient 对象。
string accountName = "<storage-account-name>";
string accountKey = "<storage-account-key>";
StorageSharedKeyCredential storageSharedKeyCredential =
new(accountName, accountKey);
// Create a BlobServiceClient object with the account SAS appended
string blobServiceURI = $"https://{accountName}.blob.core.chinacloudapi.cn";
string sasToken = await CreateAccountSAS(storageSharedKeyCredential);
BlobServiceClient blobServiceClientAccountSAS = new BlobServiceClient(
new Uri($"{blobServiceURI}?{sasToken}"));
资源
若要详细了解如何使用用于 .NET 的 Azure Blob 存储客户端库来创建帐户 SAS,请参阅以下资源。
客户端库资源
另请参阅
- 使用共享访问签名 (SAS) 授予对 Azure 存储资源的有限访问权限
- 创建帐户 SAS
- 有关使用已弃用的 .NET 版本 11.x SDK 的相关代码示例,请参阅使用 .NET 版本 11.x 的代码示例。