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

jtoj6r0c  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(241)

我的应用程序在Azure中作为Function App运行。存在存储帐户,应用程序使用托管标识连接到存储帐户(因此不使用连接字符串)。现在,我需要为队列(存在于存储帐户中)生成SAS URL。SAS Url应存在30天。
但是,我还需要确保存储帐户访问密钥正在轮换。
我采用这种方法https://learn.microsoft.com/en-us/azure/key-vault/secrets/tutorial-rotation-dual?tabs=azure-cli来旋转密钥。
在使用连接字符串的情况下,如何交换密钥以生成SAS URL是清楚的。我们只需要改变连接字符串时,关键是旋转。然后我们在代码中生成SAS Url,它是基于存储在连接字符串中的密钥生成的。
但是,在管理身份访问的情况下如何执行此操作?如何选择用于生成SAS URL的密钥?

snvhrwxg

snvhrwxg1#

但是,在管理身份访问的情况下如何执行此操作?如何选择用于生成SAS URL的密钥?
在托管身份访问的情况下,您不需要使用访问密钥。SAS URL将使用分配给托管身份的权限来生成SAS URL。您将生成的SAS URL称为User Delegation SAS
下面是在具有读取权限的blob容器上生成用户委托sas令牌的伪代码。sas令牌的有效期为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();

相关问题