具有托管身份的 WebJobs 存储

WebJobs storage with Managed Identity

默认情况下,WebJobs 需要使用 AzureWebJobsStorage 连接字符串指定 Azure 存储帐户。

但我已经可以使用托管身份访问我的存储:

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
StorageCredentials storageCredentials = new StorageCredentials(new TokenCredential(accessToken));
CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, "mystorageaccount", "core.windows.net", true);

我可以将 WebJobs 配置为使用此 cloudStorageAccount 而不是 AzureWebJobsStorage 连接字符串吗?

Can I configure WebJobs to use this cloudStorageAccount instead of AzureWebJobsStorage connection string?

是的,您可以使用 cloudStorageAccount 获取 blob 帐户并对 blob 进行一些操作。但是,您在使用Webjob 时仍然需要提供AzureWebJobsDashboardAzureWebJobsStorage。因为它们不仅是connectionstring,还是log path。

在我的测试中,我使用 storage1 连接设置了 AzureWebJobsStorage 值,在代码中我得到了 storage2 帐户并且它有效。

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/").Result;
StorageCredentials storageCredentials = new StorageCredentials(new TokenCredential(accessToken));
CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, "storage2", "core.windows.net", true);
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("mycontainer");
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference("hello.txt");
cloudBlockBlob.UploadTextAsync("aaaaaaaa").Wait();

有关分配角色和获取访问令牌的更多详细信息,您可以参考此 article