你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Durable Task Scheduler 配置托管标识

持久任务计划程序使用托管标识进行身份验证。 可以使用 用户分配 的托管标识或 系统分配的 托管标识。 建议使用用户分配的标识 ,因为它们未绑定到应用的生命周期,并且可以在取消预配应用后重复使用。

本文介绍两种配置托管标识的方法:

  • 快速设置 - 一个 CLI 命令,用于自动执行角色分配、标识附件和环境变量配置。
  • 手动设置 - 有关完全控制每个配置步骤的分步说明。

先决条件

持久任务计划程序 RBAC 角色

可以向标识授予以下持久任务计划程序相关角色:

角色 说明
持久任务数据参与者 所有数据访问操作的角色。 此角色是所有其他角色的超集。
持久任务辅助角色 辅助角色应用程序用来与持久任务计划程序交互的角色。 如果应用 仅用于 处理业务流程、活动和实体,请分配此角色。
持久任务数据读取器 用于读取所有持久任务计划程序数据的角色。 如果只需要列出业务流程和读取实体有效负载,请分配此角色。

注释

大多数应用都需要 持久任务数据参与者 角色。

快速设置 az durabletask scheduler attach

az durabletask scheduler attach 命令在单个命令中自动执行角色分配、标识附件和环境变量配置。

以下示例使用具有持久任务数据参与者角色的用户分配的托管标识将计划程序附加到函数应用:

az durabletask scheduler attach \
  --resource-group RESOURCE_GROUP_NAME \
  --name SCHEDULER_NAME \
  --task-hub-name TASKHUB_NAME \
  --role-type contributor \
  --target /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.Web/sites/FUNCTION_APP_NAME \
  --identity /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME

对于容器应用:

az durabletask scheduler attach \
  --resource-group RESOURCE_GROUP_NAME \
  --name SCHEDULER_NAME \
  --task-hub-name TASKHUB_NAME \
  --role-type contributor \
  --target /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.App/containerApps/CONTAINER_APP_NAME \
  --identity /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME

注释

如果省略参数 --identity ,该命令将改用系统分配的托管标识。

有关详细信息,请参阅 az durabletask scheduler attach

手动安装

如果需要精细控制每个步骤,请按照下面的手动说明分配 RBAC、附加标识并单独配置环境变量。

将基于角色的访问控制 (RBAC) 分配给托管标识资源

  1. 创建用户分配的托管标识

    az identity create -g RESOURCE_GROUP_NAME -n IDENTITY_NAME
    
  2. 将被分配者设置为创建的标识资源

    assignee=$(az identity show --name IDENTITY_NAME --resource-group RESOURCE_GROUP_NAME --query 'clientId' --output tsv) 
    
  3. 设置范围。 使用 任务中心作用域 实现最低特权访问。 仅当标识需要访问计划程序中的所有任务中心时,才使用计划程序范围

    任务中心范围(建议)

    scope="/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.DurableTask/schedulers/SCHEDULER_NAME/taskHubs/TASKHUB_NAME"
    

    调度程序范围(所有任务集线器)

    scope="/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.DurableTask/schedulers/SCHEDULER_NAME"
    
  4. 授予访问权限。 运行以下命令以创建角色分配并授予访问权限。

    az role assignment create \
      --assignee "$assignee" \
      --role "Durable Task Data Contributor" \
      --scope "$scope"
    

    预期输出

    以下输出示例显示了在计划程序级别上分配有持久任务数据参与者角色的开发人员标识:

    {
      "condition": null,
      "conditionVersion": null,
      "createdBy": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "createdOn": "2024-12-20T01:36:45.022356+00:00",
      "delegatedManagedIdentityResourceId": null,
      "description": null,
      "id": "/subscriptions/YOUR_SUBSCRIPTION_ID/resourceGroups/YOUR_RESOURCE_GROUP/providers/Microsoft.DurableTask/schedulers/YOUR_DTS_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID",
      "name": "ROLE_ASSIGNMENT_ID",
      "principalId": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "principalName": "YOUR_EMAIL",
      "principalType": "User",
      "resourceGroup": "YOUR_RESOURCE_GROUP",
      "roleDefinitionId": "/subscriptions/YOUR_SUBSCRIPTION/providers/Microsoft.Authorization/roleDefinitions/ROLE_DEFINITION_ID",
      "roleDefinitionName": "Durable Task Data Contributor",
      "scope": "/subscriptions/YOUR_SUBSCRIPTION/resourceGroups/YOUR_RESOURCE_GROUP/providers/Microsoft.DurableTask/schedulers/YOUR_DTS_NAME",
      "type": "Microsoft.Authorization/roleAssignments",
      "updatedBy": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "updatedOn": "2024-12-20T01:36:45.022356+00:00"
    }
    

注释

以下说明展示了针对特定任务中心的角色分配。 如果需要在计划程序中访问所有任务集线器,请在计划程序级别上执行分配。

  1. 创建用户分配的托管标识

  2. 在门户中访问持久任务调度程序资源。

  3. 选择任务中心名称。

  4. 在左侧菜单中,选择“访问控制(IAM)”。

  5. 选择 “添加” 以添加角色分配。

    在门户中的“访问控制”窗格中添加角色分配的屏幕截图。

  6. 搜索并选择“持久任务数据参与者”。 选择“下一步”。

    在门户中选择“持久任务数据参与者”角色分配的屏幕截图。

  7. 在“ 成员 ”选项卡上,对于 “分配访问权限”,请选择 “托管标识”。

  8. 对于 “成员”,选择“ + 选择成员”。

  9. “选择托管标识 ”窗格中,展开 “托管标识 ”下拉列表,然后选择 “用户分配的托管标识”。

    选择要在门户中使用的用户分配的托管标识类型的屏幕截图。

  10. 选择之前创建的用户托管标识,然后选择“ 选择”。

  11. 选择 “查看 + 分配 ”以完成角色分配。

将托管标识分配给应用

现在,该标识具有访问持久任务计划程序所需的 RBAC,你需要将其分配给应用。

  1. 获取托管标识的资源 ID。

    resource_id=$(az resource show --resource-group RESOURCE_GROUP_NAME --name IDENTITY_NAME --resource-type Microsoft.ManagedIdentity/userAssignedIdentities --query id --output tsv)
    
  2. 将标识分配给应用。

    az functionapp identity assign --resource-group RESOURCE_GROUP_NAME --name FUNCTION_APP_NAME --identities "$resource_id"
    
  1. 在门户中的应用中,选择 “设置>标识”。

  2. 选择“用户分配”选项卡。

  3. 选择 “+ 添加”,然后选择在上一部分创建的标识。 选择 并添加

    在门户中将用户分配的托管标识添加到函数应用的屏幕截图。

将环境变量添加到应用

将以下两个环境变量添加到应用:

环境变量 价值 Example
DURABLE_TASK_SCHEDULER_CONNECTION_STRING Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID> Endpoint=https://myscheduler.westus2.durabletask.io;Authentication=ManagedIdentity;ClientID=00000000-0000-0000-0000-000000000000
TASKHUB_NAME 任务中心的名称 my-task-hub

注释

如果使用 系统分配的标识,请从连接字符串 ClientID 中省略 "Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity" 参数。

  1. 获取连接字符串所需的信息。

    获取调度器的终结点:

    az durabletask scheduler show --resource-group RESOURCE_GROUP_NAME --name SCHEDULER_NAME --query 'properties.endpoint' --output tsv
    

    获取托管标识的客户端 ID:

    az identity show --name IDENTITY_NAME --resource-group RESOURCE_GROUP_NAME --query 'clientId' --output tsv
    
  2. 在应用上设置这两个环境变量。

    az functionapp config appsettings set \
      --resource-group RESOURCE_GROUP_NAME \
      --name FUNCTION_APP_NAME \
      --settings \
        DURABLE_TASK_SCHEDULER_CONNECTION_STRING="Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID>" \
        TASKHUB_NAME="<TASKHUB_NAME>"
    
  1. 获取连接字符串所需的信息。

    若要获取计划程序终结点,请导航到计划程序资源的“概述”选项卡,并在“概要”部分中查找终结点

    若要获取托管标识客户端 ID,请导航到托管标识资源的“概述”选项卡,并在“概要”部分中查找客户端 ID

    托管标识概述页的截图,显示了在 Azure 门户中查找客户端 ID 的位置。

  2. 在门户中导航到你的应用。

  3. 在左侧菜单中,选择 “设置>环境变量”。

  4. 添加一个用值DURABLE_TASK_SCHEDULER_CONNECTION_STRING命名Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID>的环境变量。

  5. 添加一个名为任务中心名称的环境变量 TASKHUB_NAME

  6. 选择 “应用”,然后 确认 保存变量。