快速入门:使用托管标识配置 Durable Functions
使用访问管理服务 Microsoft Entra ID 提供的托管标识,应用可以访问其他受 Microsoft Entra 保护的资源(例如 Azure 存储帐户),无需手动处理机密。 标识由 Azure 平台托管,因此无需预配或轮换任何机密。 建议使用此类标识来验证对 Azure 资源的访问权限。
在本快速入门中,我们完成使用默认 Azure 存储提供程序配置 Durable Functions 应用的步骤,以使用基于标识的连接进行存储帐户访问。
注意
Durable Functions 扩展 2.7.0 及更高版本支持托管标识。
如果你没有 Azure 帐户,请在开始之前创建一个试用帐户。
先决条件
若要完成本快速入门,你需要:
- 在 Azure 门户中创建了现有 Durable Functions 项目或 Azure 中部署了本地 Durable Functions 项目。
- 熟悉如何在 Azure 中运行 Durable Functions 应用。
如果没有已在 Azure 中部署的现有 Durable Functions 项目,建议从以下快速入门之一开始:
本地开发
使用 Azure 存储模拟器
在本地开发时,建议使用 Azure 存储的本地模拟器 Azurite。 通过在 local.settings.json 中指定 "AzureWebJobsStorage": "UseDevelopmentStorage = true"
将应用配置到模拟器。
用于本地开发的基于标识的连接
严格说来,托管标识仅适用于在 Azure 上执行的应用。 但是,你仍然可以使用开发人员凭据针对 Azure 资源进行身份验证,从而配置本地运行的应用以使用基于标识的连接。 然后,在 Azure 上部署时,应用会改为利用托管标识配置。
使用开发人员凭据时,连接会尝试按所述顺序从以下位置获取令牌,以访问 Azure 资源:
- Microsoft 应用程序之间共享的本地缓存
- Visual Studio 中的当前用户上下文
- Visual Studio Code 中的当前用户上下文
- Azure CLI 中的当前用户上下文
如果这些选项均不成功,则会显示一条错误,指出应用无法检索 Azure 资源的身份验证令牌。
将运行时配置为使用本地开发人员标识
在 local.settings.json 中指定 Azure 存储帐户的名称,例如:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage__accountName": "<<your Azure Storage account name>>", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }
转到 Azure 门户上的 Azure 存储帐户资源,导航到“访问控制(IAM)”选项卡,然后单击“添加角色分配”。 查找以下角色:
- 存储队列数据参与者
- 存储 Blob 数据参与者
- 存储表数据参与者
单击“+ 选择成员”并在弹出窗口中找到你的电子邮件,即可为你自己分配角色。 (此电子邮件是用于登录 Microsoft 应用程序、Azure CLI 或 Visual Studio 系列中的编辑器的电子邮件。)
部署到 Azure 的应用的基于标识的连接
启用托管标识资源
首先,为应用程序启用托管标识。 函数应用必须具有系统分配的托管标识或用户分配的托管标识。 若要为函数应用启用托管标识,并详细了解两种类型的标识之间的差异,请参阅托管标识概述。
将访问角色分配给托管标识
在 Azure 门户中导航到应用的 Azure 存储资源,将三个基于角色的访问控制 (RBAC) 角色分配给托管标识资源:
- 存储队列数据参与者
- 存储 Blob 数据参与者
- 存储表数据参与者
若要查找标识资源,请选择分配对“托管标识”的访问权限,然后选择“+ 选择成员”
将托管标识配置添加到应用
在使用应用的托管标识之前,请对应用设置进行一些更改:
在 Azure 门户中,在“设置”下的函数应用资源菜单上,选择“环境变量”。
添加一个设置,用于将 Azure 存储帐户链接到应用程序。
根据用于应用运行时采用的云,使用以下方法之一:
Azure 云:如果应用在全球 Azure 中运行,请添加用于标识 Azure 存储帐户名称的设置
AzureWebJobsStorage__accountName
。 示例值:mystorageaccount123
非 Azure 云:如果应用程序在 Azure 之外的云中运行,则必须添加以下三个设置来提供存储帐户的特定服务 URI(或终结点),而不是提供帐户名称。
设置名称:
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 变量的值。
完成托管标识配置(更改设置后记得单击“应用”):
如果使用“系统分配的标识”,则不会进行任何其他更改。
如果使用“用户分配的标识”,请将以下设置添加到应用配置中:
AzureWebJobsStorage__credential:请输入“managedidentity”
AzureWebJobsStorage__clientId,从托管标识资源中获取此 GUID 值
注意
使用用户分配的标识时,Durable Functions 不支持
managedIdentityResourceId
。 请改用clientId
。