使用托管身份从 WebJob 连接到队列

问题描述 投票:0回答:1

我有一个具有系统分配的托管标识的应用程序服务,以及一个通过队列触发器运行的 WebJob。如果我为应用程序服务提供 AzureWebJobsStorage 连接字符串,它就可以工作,没有问题。它从队列中获取消息并执行其操作。但这不太安全,到目前为止我还无法让它在托管身份下工作。

我使用以下设置来提供所需的信息:

AzureWebJobsStorage__accountName:[我的存储帐户名称]

AzureWebJobsStorage__credential:托管身份

它应该拥有使用存储帐户名称和队列触发器中设置的队列名称所需的一切(加上托管身份上存储帐户的权限,我已为其提供了贡献者、Key Vault Secrets 用户和存储队列Data Contributor)来监听队列。但它没有给出任何迹象表明它正在这样做。它也不会给出错误。它只是说“作业主机已开始”。

哦,我设置了 AzureWebJobsDashboard,因为似乎有必要使用仪表板,但显然它不使用它来与队列交互。

如果有什么区别的话,应用程序服务是 Windows。

我的问题是:

  1. 有什么我遗漏的东西可以让它发挥作用吗?缺少权限、缺少应用程序设置等
  2. 它甚至可以作为 WebJob 使用吗?我在网上看到的所有内容都提到了 Function 应用程序,虽然有很多交叉,但严格来说,它是 WebJob,而不是 Function 应用程序。至少 Azure 门户中没有这样定义。
  3. 如果不起作用,最好的替代方案是什么?以前我们有来自 Key Vault 的连接字符串。
azure azure-web-app-service azure-webjobs azure-managed-identity
1个回答
0
投票

我的

appsettings.json
文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Azure.Core": "None"
    }
  }  
}

确保您已设置 LogLevel。

  • 将 Web 作业部署到 Azure 应用服务。

enter image description here

  • 启用 Azure WebApp 的身份。

感谢@techcommunity提供清晰的步骤。

我从这个博客中获取了参考资料,并对 WebApp 遵循相同的做法。

  • 在环境变量中添加
    AzureWebJobsStorage__accountname
    设置,并将其值设置为您的存储帐户名称。

enter image description here

  • 在存储帐户中,您需要为您的Web应用程序分配以下3个角色分配。
Storage Account Contributor
Storage Blob Data Owner
Storage Queue Data Contributor

enter image description here

  • 在队列中添加消息

enter image description here

并运行 Web 作业

enter image description here

输出: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.