azure - 使用托管身份时的存储帐户 SAS

标签 azure azure-storage-account azure-sas

我的应用程序在 Azure 中作为 Function App 运行。有存储帐户,应用程序使用托管身份连接到存储帐户(因此不使用连接字符串)。 现在我需要为队列(位于存储帐户中)生成 SAS Url。 SAS Url 的有效期应为 30 天。

而且,我还需要确保存储帐户访问 key 正在轮换。

我遵循这种方法https://learn.microsoft.com/en-us/azure/key-vault/secrets/tutorial-rotation-dual?tabs=azure-cli旋转按键。

在使用连接字符串的情况下,如何交换 SAS Url 生成的键是很清楚的。我们只需要在 key 旋转时更改连接字符串即可。然后我们在代码中生成SAS Url,它是根据连接字符串中存储的 key 生成的。

但是在托管身份访问的情况下该怎么做?如何选择用于 SAS Url 生成的 key ?

最佳答案

But how to do it in case of Managed Identity access? How to select key which is used for SAS Url generation?

如果是托管身份访问,您不需要使用访问 key 。 SAS URL 将使用分配给托管标识的权限来生成 SAS URL。您将生成的 SAS URL 称为 User Delegation SAS .

以下是在具有读取权限的 Blob 容器上生成用户委托(delegate) sas token 的伪代码。 sas token 的有效期为 1 小时。

var credentials = new ManagedIdentityCredential();
var blobServiceClient = new BlobServiceClient(new Uri("https://account.blob.core.windows.net", credentials));
var sasExpiry = DateTimeOffset.UtcNow.AddHours(1);
var userDelegationKey = await blobServiceClient.GetUserDelegationKeyAsync(null, sasExpiry, CancellationToken.None);
var containerClient = blobServiceClient.GetBlobContainerClient("containername");
var sasBuilder = new BlobSasBuilder()
{
    BlobContainerName = "containername",
    Resource = "c",
    ExpiresOn = sasExpiry
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);
var blobUriBuilder = new BlobUriBuilder(containerClient.Uri)
{
    Sas = sasBuilder.ToSasQueryParameters(userDelegationKey,
        blobServiceClient.AccountName)
};
return blobUriBuilder.ToUri();

关于azure - 使用托管身份时的存储帐户 SAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76380917/

相关文章:

azure - 有没有办法在 TFS 服务 Web Hook 事件失败或 Web Hook 状态发生任何变化时设置通知

node.js - 使用 Azure 存储/Blob 服务设置 Azure Node.js 应用服务的最佳方式是什么

azure - 如何查找Azure存储帐户内不同访问层中的blob大小?

Azure 存储帐户 - 克隆文件共享?

Azure存储帐户静态网站需要很长时间才能加载

c# - 实体应该映射到它自己的数据库表吗?

powershell - Azure VM 设置中的 DefaultWinRMCertificateThumbprint 字段为空

python - 如何在 Python 中生成 Azure blob SAS URL?

c# - 我可以在 C# 中创建 SAS url 来访问 Azure 文件共享(即不是 Blob)中目录的所有文件和文件夹吗?