我的应用程序在 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/