Durable Task Scheduler 使用受管理身份來進行認證。 你可以使用 使用者指派 或 系統指派 的管理身份。 建議使用使用者指派身份 ,因為它們不受應用程式生命週期綁定,且應用程式停用後仍可重複使用。
本文介紹兩種配置受管理身份的方式:
先決條件
- 一個有有效訂閱的 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) 指派給受控識別資源
建立使用者指派的管理型身分識別
az identity create -g RESOURCE_GROUP_NAME -n IDENTITY_NAME將受託人設定至新建立的身分識別資源
assignee=$(az identity show --name IDENTITY_NAME --resource-group RESOURCE_GROUP_NAME --query 'clientId' --output tsv)設定範圍。 使用 任務樞紐範圍 來進行最低權限存取。 只有當身份需要存取排程器中的所有任務樞紐時,才使用排程範圍。
任務中心範圍(建議)
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"授與存取權。 執行下列命令以建立角色指派並授與存取權。
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" }
備註
下列指示顯示限定於特定工作中樞的角色指派。 如果您需要存取排程器 中的所有 工作中樞,請在排程器層級上執行工作分派。
請前往入口網站中的「持久任務排程器」資源。
選擇一個任務中心名稱。
在左側功能表中,選取 [存取控制 (IAM)]。
選擇 新增 以新增角色分配。
搜尋並選取 [長期工作資料參與者]。 選取 下一步。
在 [ 成員] 索引標籤上,針對 [ 指派存取權] 選取 [ 受控識別]。
對於 成員,請選擇 + 選擇成員。
在 [ 選取受控識別 ] 窗格中,展開 [ 受控識別 ] 下拉式清單,然後選取 [ 使用者指派的受控識別]。
選擇先前建立的使用者管理身份,並選擇選擇。
選擇 Review + 指派 以完成角色指派。
將受控識別指派給應用程式
身分識別現在具有存取長期工作排程器所需的 RBAC,您必須將它指派給您的應用程式。
取得受控識別的資源識別碼。
resource_id=$(az resource show --resource-group RESOURCE_GROUP_NAME --name IDENTITY_NAME --resource-type Microsoft.ManagedIdentity/userAssignedIdentities --query id --output tsv)將身分識別指派給應用程式。
az functionapp identity assign --resource-group RESOURCE_GROUP_NAME --name FUNCTION_APP_NAME --identities "$resource_id"
從入口網站中的應用程式,選取 [ 設定>身分識別]。
選取 使用者指派的 索引標籤。
選取 + 新增,然後挑選上一節中建立的識別身分。 選取 ,然後新增。
在你的應用程式中加入環境變數
請為你的應用程式新增以下兩個環境變數:
| 環境變數 | 價值觀 | 範例 |
|---|---|---|
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"。
獲取連線字串所需的資訊。
取得排程器端點:
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在你的應用程式中設定兩個環境變數。
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>"
獲取連線字串所需的資訊。
要取得你的排程器端點,請前往排程資源的「概覽」標籤,並在「Essentials」區塊中找到端點。
要取得你的受管理身份客戶 ID,請前往你管理身份資源的「概覽」標籤,並在 Essentials 區塊中找到 Client ID。
在入口網站導航至你的應用程式。
在左側選單中,選擇 設定>環境變數。
新增一個名為
DURABLE_TASK_SCHEDULER_CONNECTION_STRING的環境變數,並將其值設定為Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID>。新增一個以任務中心名稱命名
TASKHUB_NAME的環境變數。選擇 套用,然後 確認 以儲存變數。