為持久任務排程器設定管理身份

Durable Task Scheduler 使用受管理身份來進行認證。 你可以使用 使用者指派 或 系統指派 的管理身份。 建議使用使用者指派身份 ,因為它們不受應用程式生命週期綁定,且應用程式停用後仍可重複使用。

本文介紹兩種配置受管理身份的方式:

  • 快速設定 — 一個 CLI 指令,可自動化角色指派、身份綁定及環境變數設定。
  • 手動設定 — 逐步說明,讓你能完全掌控每個配置步驟。

先決條件

  • 一個有有效訂閱的 Azure 帳號。 免費註冊帳號。
  • 一個已配置好的 耐用任務排程器和任務中心 資源。
  • Azure CLI,安裝了 durabletask 擴充功能(az extension add --name durabletask)。
  • 排程資源上的擁有者或使用者存取管理員角色(建立角色指派所必需)。

Durable Task Scheduler RBAC 角色

您可以將下列長期工作排程器相關角色授予身分:

角色 說明
Durable Task 資料參與者 所有資料存取作業的角色。 此角色是所有其他角色的超集。
耐用任務工作者 工背景工作角色應用程式用來與長期工作排程器互動的角色。 如果您的應用程式 僅用於 處理協調流程、活動和實體,請指派此角色。
持續任務數據讀取器 負責讀取所有持久性任務排程器數據的角色。 如果您只需要列出協調流程並讀取實體承載,請指派此角色。

備註

大多數應用程式都需要「 持久任務資料貢獻 者」的角色。

快速設定使用 az durabletask scheduler attach

此 az durabletask scheduler attach 指令能在單一指令中自動化角色指派、身份附加及環境變數設定。

以下範例展示如何使用使用者指派的受管理身分,將排程器連接到功能應用程式,並賦予持久任務資料貢獻者(Durable Task Data Contributor)角色:

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. 選擇 Review + 指派 以完成角色指派。

將受控識別指派給應用程式

身分識別現在具有存取長期工作排程器所需的 RBAC,您必須將它指派給您的應用程式。

  1. 取得受控識別的資源識別碼。

    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. 選取 + 新增,然後挑選上一節中建立的識別身分。 選取 ,然後新增。

    螢幕擷取畫面顯示在入口網站中將使用者指派的受控識別新增至您的函數應用程式。

在你的應用程式中加入環境變數

請為你的應用程式新增以下兩個環境變數:

環境變數 價值觀 範例
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
    

    取得受控識別的用戶端識別碼:

    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. 獲取連線字串所需的資訊。

    要取得你的排程器端點,請前往排程資源的「概覽」標籤,並在「Essentials」區塊中找到端點。

    要取得你的受管理身份客戶 ID,請前往你管理身份資源的「概覽」標籤,並在 Essentials 區塊中找到 Client ID。

     管理身份總覽頁面的截圖,顯示 Azure 入口網站中的客戶端 ID 位置。

  2. 在入口網站導航至你的應用程式。

  3. 在左側選單中,選擇 設定>環境變數。

  4. 新增一個名為 DURABLE_TASK_SCHEDULER_CONNECTION_STRING 的環境變數,並將其值設定為 Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID>。

  5. 新增一個以任務中心名稱命名 TASKHUB_NAME 的環境變數。

  6. 選擇 套用,然後 確認 以儲存變數。