为 Durable Task Scheduler 配置托管标识(预览版)

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

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

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

注释

若要使用大多数持久功能应用,需要拥有持久任务数据贡献者角色。

本文介绍如何授予对标识资源的权限,并将计算应用配置为使用标识来访问计划者和任务中心。

将基于角色的访问控制 (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 MANAGED_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. 单击 “+ 添加”,然后选择在上一部分创建的标识。 单击“ 添加 ”按钮。

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

将环境变量添加到应用

将这两个环境变量添加到应用设置:

  • TASKHUB_NAME:任务中心的名称
  • DURABLE_TASK_SCHEDULER_CONNECTION_STRING:字符串的格式是 "Endpoint={scheduler point};Authentication=ManagedIdentity;ClientID={client id}",其中 Endpoint 使计划程序终结点,client id 是标识的客户端 ID。
  1. 获取持久任务计划程序连接字符串所需的信息。

    获取计划程序终结点。

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

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

    az identity show --name MANAGED_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 KEY_NAME=KEY_VALUE
    
  3. 重复上一步,为任务中心名称添加环境变量。

  1. 获取持久任务计划程序连接字符串所需的信息。

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

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

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

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

  4. 为 Durable Task Scheduler 连接字符串添加环境变量。

  5. 为任务中心名称添加环境变量。

  6. 单击“ 应用 ”,然后 确认 添加变量。

注释

如果使用系统分配的标识,则连接字符串不需要标识资源的客户端 ID: "Endpoint={scheduler endpoint};Authentication=ManagedIdentity"

后续步骤