快速入门:使用托管身份标识配置持久化函数

本快速入门展示如何使用默认的 Azure 存储提供程序配置 Durable Functions 应用,以便通过基于身份的连接访问存储帐户,从而无需管理机密。 Microsoft Entra ID 的托管标识由 Azure 平台管理,无需配置或更换任何机密。

本文内容:

注意

Durable Functions 扩展版本2.7.0及更高版本支持托管标识。

如果你没有 Azure 帐户,请在开始之前创建一个试用帐户。

先决条件

若要完成本快速入门指南,你需要:

  • 在 Azure 门户中创建了现有 Durable Functions 项目或 Azure 中部署了本地 Durable Functions 项目。
  • 熟悉如何在 Azure 中运行 Durable Functions 应用。

如果没有已在 Azure 中部署的现有 Durable Functions 项目,建议从以下快速入门之一开始:

本地开发设置

有两个选项用于本地开发。 在没有Azure凭据的情况下,使用 Azurite 进行快速本地测试。 如果需要针对实际Azure 存储帐户测试基于标识的连接,请改用开发人员凭据。

选项 1:使用Azure 存储模拟器

在本地开发时,建议使用 Azurite,这是Azure 存储的本地模拟器。 通过在 local.settings.json 中指定 "AzureWebJobsStorage": "UseDevelopmentStorage=true" 将应用配置到模拟器。

选项 2:用于本地开发的基于标识的连接

严格说来,托管标识仅适用于在 Azure 上执行的应用。 但是,仍可以将本地运行的应用配置为使用基于标识的连接,方法是使用开发人员凭据针对Azure资源进行身份验证。 然后,在 Azure 上部署时,应用会改为使用您配置的托管标识。

使用开发人员凭据时,连接会按以下顺序尝试从以下位置获取令牌:

  1. Microsoft 应用程序之间共享的本地缓存
  2. Visual Studio中的当前用户上下文
  3. Visual Studio Code中的当前用户上下文
  4. Azure CLI 中的当前用户上下文

如果没有这些选项成功,则会收到一个错误,指示应用无法检索身份验证令牌。 验证是否已使用有权访问Azure 存储帐户的帐户登录到其中一个列出的工具。

将运行时配置为使用本地开发人员标识

  1. 在 local.settings.json 中指定 Azure 存储帐户的名称,例如:

    {
       "IsEncrypted": false,
       "Values": {
          "AzureWebJobsStorage__accountName": "<<your Azure Storage account name>>",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
       }
    }
    
  2. 在Azure门户中导航到Azure 存储帐户资源。

  3. 选择 访问控制 (IAM) 选项卡,然后选择添加角色分配

  4. 将以下每个角色分配给自己。 对于每个角色,请选择“+ 选择成员”并搜索用于登录Visual Studio、Visual Studio Code或Azure CLI的电子邮件。

    • 存储队列数据参与者
    • Storage Blob 数据贡献者
    • 存储表数据贡献者

    注意

    在部署到 Azure 时,托管标识需要同样的三个角色。 请参阅 向托管标识分配访问角色

    在 Azure 门户的访问控制页面中为用户分配存储数据参与者角色的截图。

基于标识的连接用于部署在 Azure 上的应用

启用托管的身份资源

首先,为应用程序启用托管标识。 函数应用必须具有系统分配的托管标识或用户分配的托管标识。 若要为函数应用启用托管标识,并详细了解两种类型的标识之间的差异,请参阅托管标识概述

为托管标识分配访问角色

在 Azure 门户中导航到您应用的 Azure 存储资源,然后将三个基于角色的访问控制 (RBAC) 角色分配给托管标识资源:

  • 存储队列数据参与者
  • Storage Blob 数据贡献者
  • 存储表数据贡献者

若要查找标识资源,请选择分配对“托管标识”的访问权限,然后选择“+ 选择成员”

在 Azure 门户中,将存储访问角色分配给托管身份的截图。

将托管标识配置添加到应用

在使用应用的托管标识之前,请对应用设置进行一些更改:

  1. 在 Azure 门户中,在“设置”下的函数应用资源菜单上,选择“环境变量”

  2. 在设置列表中,找到“AzureWebJobsStorage”并选择“删除”图标 在 Azure 门户函数应用设置中 AzureWebJobsStorage 环境变量的截图。

  3. 添加一个设置,用于将 Azure 存储帐户链接到应用程序。

    根据用于应用运行时采用的云,使用以下方法之一

    • Azure云:如果您的应用在global Azure中运行,请添加标识Azure存储帐户名称的设置AzureWebJobsStorage__accountName。 示例值: mystorageaccount123

    • Non-Azure cloud:如果应用程序在 Azure 外部的云中运行,则必须添加以下三个设置来提供存储帐户的特定服务 URI(或 endpoints),而不是帐户名称。

      • 设置名称:AzureWebJobsStorage__blobServiceUri

        示例值: https://mystorageaccount123.blob.core.chinacloudapi.cn/

      • 设置名称:AzureWebJobsStorage__queueServiceUri

        示例值: https://mystorageaccount123.queue.core.chinacloudapi.cn/

      • 设置名称:AzureWebJobsStorage__tableServiceUri

        示例值: https://mystorageaccount123.table.core.chinacloudapi.cn/

    可以从“终结点”选项卡的存储帐户信息中获取这些 URI 变量的值

    存储帐户终结点选项卡的屏幕截图,其中显示了 Blob、队列和表服务 URI。

  4. 完成托管标识配置(更改设置后记得单击“应用”):

    • 如果使用系统分配的标识,不要进行其他更改。

    • 如果使用“用户分配的标识”,请将以下设置添加到应用配置中

      • AzureWebJobsStorage__credential 中,输入 managedidentity

      • AzureWebJobsStorage__clientId,请从托管标识资源中获取此 GUID 值。

    用户分配的托管标识资源的屏幕截图,其中显示了客户端 ID 值。

    注意

    在使用用户分配的标识时,Durable Functions 支持 managedIdentityResourceId。 请改用 clientId

验证配置

若要确认托管标识的配置工作正常,请执行以下操作:

  1. 在 Azure 门户中,导航到你的函数应用程序并触发 Durable Functions 编排(例如,使用 HTTP 触发器函数)。
  2. 通过查询状态终结点或检查Monitor选项卡,确认编排是否成功完成。
  3. 如果看到身份验证错误,请验证:
    • 这三个存储数据参与者角色都分配给了正确的身份。
    • 删除了 AzureWebJobsStorage 连接字符串设置。
    • AzureWebJobsStorage__accountName 设置正确(或服务 URI)。

后续步骤