快速入門:使用受控識別設定 Durable Functions

這個快速入門說明如何配置 Durable Functions 應用程式,使其能在 Durable Task Scheduler 後端或 Azure 儲存體 提供者中使用基於身份的連線。 Azure 平台會管理來自 Microsoft Entra ID 的受控識別,你不需要佈建或輪替任何祕密。

這條路徑假設你的應用程式已經設定為使用 Durable Task Scheduler 的後端。 如果你的應用程式仍在使用 Azure 儲存體 提供者,請選擇本文中的 Azure 儲存體 路徑。

本文內容:

Note

受控識別支援於 2.7.0 及更新版本的 Durable Functions 擴充功能中。

如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶 。

先決條件

若要完成本快速入門,您需要:

  • 在 Azure 入口網站建立的現有 Durable Functions 專案,或是部署到 Azure 的本地 Durable Functions 專案。
  • 熟悉在 Azure 上執行 Durable Functions 應用程式。

如果你在 Azure 中尚未部署現有的 Durable Functions 專案,我們建議你從以下其中一個快速入門開始:

在地開發架構

你有兩個地方開發的選擇。 使用本地的 Durable Task Scheduler 模擬器,無需 Azure 憑證即可快速測試。 如果你需要針對實際運作中的排程器資源測試以身分識別為基礎的連線,請改用你的開發人員憑證。

選項一:使用本地的 Durable Task Scheduler 模擬器

在本地開發時,請使用 Durable Task Scheduler 模擬器,這樣你可以在沒有 Azure 憑證的情況下測試你的應用程式。 把你的應用程式設定設定成指向模擬器,並使用預設的任務中心。

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "DTS_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None",
    "TASKHUB_NAME": "default"
  }
}

選項二:基於身份的連結以促進地方發展

嚴格來說,受管理身份只有在 Azure 執行時才會被應用程式使用。 不過,你仍然可以透過開發者憑證對排程資源進行認證,設定本地執行的應用程式使用基於身份的連線。 然後,當應用程式部署到 Azure 時,會改用受管理身份設定。

當你使用開發者憑證時,連線會嘗試從以下地點取得令牌,順序如下:

  1. Microsoft 應用程式之間共用的本機快取
  2. 目前 Visual Studio 中的使用者情境
  3. 目前 Visual Studio Code 的使用者情境
  4. Azure CLI 中的當前使用者上下文

如果以上選項都不成功,會跳出錯誤提示應用程式無法取得認證令牌。 確認你已登入上述工具之一,且帳號有權限存取排程資源。

設定執行階段以使用本機開發人員身分識別

  1. 在本機設定中,設定排程器端點,並使用 Authentication=DefaultAzure 以讓應用程式使用你的開發者憑證。

    {
      "IsEncrypted": false,
      "Values": {
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "DTS_CONNECTION_STRING": "Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=DefaultAzure",
        "TASKHUB_NAME": "<your-task-hub>"
      }
    }
    
  2. 在排程器資源或特定工作中樞範圍上,授與您的開發人員身分識別Durable Task Data Contributor角色。

基於身分識別的連線用於部署在 Azure 的應用程式

啟用受管理身份資源

為您的函式應用程式啟用受控識別。 您的函數應用程式必須要有系統指派的受控識別或使用者指派的受控識別。 若要為函數應用程式啟用受控識別,並深入了解這兩種身分識別之間的差異,請參閱受控識別概觀。

將存取角色指派給受控識別

在 Azure 入口網站中導覽至您的排程器資源,並將Durable Task Data Contributor角色指派至您的受控身分識別。 為實現最低權限存取,請在任務中樞範圍而非整個排程器上指派角色。 如果你使用使用者指派的身份,請選擇 管理身份 ,然後 + 選擇成員。

把管理身份設定加入你的應用程式

在使用應用程式的受控識別之前,必須先對應用程式設定進行一些變更:

  1. 在 Azure 入口網站的函式應用程式資源功能表中,選擇「設定」下的「環境變數」。

  2. 新增或更新設定 DTS_CONNECTION_STRING ,讓應用程式能透過應用程式的管理身份連接到你的排程器。

    Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=ManagedIdentity
    

    如果你使用使用者指派的管理身份,請在 連接字串 中包含客戶端 ID:

    Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=ManagedIdentity;ClientID=<your-user-assigned-identity-client-id>
    
  3. 新增或更新 TASKHUB_NAME 設定,將其設為相同的任務中樞名稱。

  4. 如果你的函式主機需要 Azure 儲存體 來進行主機層級操作,請另外設定AzureWebJobsStorage。 排程器後端針對 Durable 狀態使用 DTS 連接字串,而非 AzureWebJobsStorage。

驗證你的設定

要確認你的管理身份設定是否有效:

  1. 在 Azure 入口網站中,導覽至您的函數應用程式並觸發 Durable Functions 協調流程。
  2. 請透過查詢狀態端點或勾選 監控 標籤來確認編排是否成功完成。
  3. 如果看到認證錯誤,請確認:
    • 受控身分識別在排程器資源或工作中心範圍具備Durable Task Data Contributor角色。
    • TASKHUB_NAME 和 DTS_CONNECTION_STRING 設定正確。
    • 應用程式在 Azure 執行時使用了預期的身份。

在地開發架構

你有兩個地方開發的選擇。 使用 Azurite 快速本地測試,無需 Azure 憑證。 如果你需要用真實的 Azure 儲存體 帳號測試基於身份的連線,請改用你的開發者憑證。

選項一:使用 Azure 儲存體 模擬器

本地開發時,建議使用 Azurite,這是 Azure 儲存體 的本地模擬器。 在 local.settings.json 中指定 "AzureWebJobsStorage": "UseDevelopmentStorage=true",即可將您的應用程式設定為模擬器。

選項二:基於身份的連結以促進地方發展

嚴格來說,受管理身份只在 Azure 執行時才會被應用程式使用。 不過,你仍然可以透過開發者憑證對 Azure 資源進行認證,設定本地執行的應用程式使用基於身份的連線。 然後,當應用程式部署在 Azure 時,會改用你已管理的身分識別設定。

使用開發者憑證時,連線會嘗試從以下地點取得令牌,順序如下:

  1. Microsoft 應用程式之間共用的本機快取
  2. 目前 Visual Studio 中的使用者情境
  3. 目前 Visual Studio Code 的使用者情境
  4. Azure CLI 中的當前使用者上下文

如果以上選項都不成功,會跳出錯誤提示應用程式無法取得認證令牌。 確認你已登入上述工具之一,且帳號有權限存取你的 Azure 儲存體 帳號。

設定執行階段以使用本機開發人員身分識別

  1. 例如,請在 local.settings.json中指定您的Azure 儲存體帳戶名稱:

    {
       "IsEncrypted": false,
       "Values": {
          "AzureWebJobsStorage__accountName": "<<your Azure Storage account name>>",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
       }
    }
    
  2. 在 Azure 入口網站中,導覽到你的 Azure 儲存體 帳戶資源。

  3. 選擇 存取控制 (IAM) 標籤,然後選擇 新增角色分配。

  4. 把以下每個角色分配給自己。 對於每個角色,選擇」+ 選擇成員」,並搜尋你用來登入Visual Studio、Visual Studio Code或Azure CLI的電子郵件。

    • 儲存體佇列資料撰寫者
    • Storage Blob 資料貢獻者
    • 儲存資料表資料貢獻者

    Note

    這三個角色與部署至 Azure 時受控識別所需的角色相同。 請參見 「將存取權角色分配給受管理身份」。

     在Azure入口網站存取控制頁面中指派儲存資料貢獻者角色給使用者的截圖。

基於身分識別的連線用於部署在 Azure 的應用程式

啟用受管理身份資源

若要開始,請為應用程式啟用受控識別。 您的函數應用程式必須要有系統指派的受控識別或使用者指派的受控識別。 若要為函數應用程式啟用受控識別,並深入了解這兩種身分識別之間的差異,請參閱受控識別概觀。

將存取角色指派給受控識別

瀏覽至 Azure 入口網站中您應用程式的 Azure 儲存體資源,並將三個角色型存取控制 (RBAC) 角色指派給您的受控識別資源:

  • 儲存體佇列資料撰寫者
  • Storage Blob 資料貢獻者
  • 儲存資料表資料貢獻者

若要找到您的身分識別資源,請選擇指派存取給 受控識別,然後按一下 + 選取成員

在 Azure 入口網站中將儲存體存取角色指派給受控身分的截圖。

把管理身份設定加入你的應用程式

在使用應用程式的受控識別之前,必須先對應用程式設定進行一些變更:

  1. 在 Azure 入口網站的函式應用程式資源功能表中,選擇「設定」下的「環境變數」。

  2. 在設定清單中,找到 [AzureWebJobsStorage],然後選取刪除圖示。 Azure portal 功能應用程式設置中 AzureWebJobsStorage 環境變數的截圖。

  3. 新增一個設定,讓你的 Azure 儲存帳號連結到應用程式。

    視您應用程式執行的雲端而定,使用下列其中一種方法:

    • Azure cloud:如果你的應用程式在 global Azure 運行,請新增設定 AzureWebJobsStorage__accountName,以識別Azure儲存帳號名稱。 範例值:mystorageaccount123

    • Non-Azure cloud:如果您的應用程式運行於Azure外的雲端,您必須新增以下三個設定,以提供儲存帳號的特定服務 URI(或 endpoints)而非帳號名稱。

      • 設定名稱:AzureWebJobsStorage__blobServiceUri

        範例值:https://mystorageaccount123.blob.core.windows.net/

      • 設定名稱:AzureWebJobsStorage__queueServiceUri

        範例值:https://mystorageaccount123.queue.core.windows.net/

      • 設定名稱:AzureWebJobsStorage__tableServiceUri

        範例值:https://mystorageaccount123.table.core.windows.net/

    您可以在 [端點] 索引標籤上的儲存體帳戶資訊中找到這些 URI 變數的值。

    顯示儲存體帳戶端點索引標籤的螢幕擷取畫面,其中包含 Blob、佇列和資料表服務 URI。

    Note

    如果你使用的是 Azure Government 或其他獨立於全域 Azure 的雲端,你必須使用提供特定服務 URI 的選項,而非僅僅使用儲存體帳戶名稱。 欲了解更多關於使用 Azure 儲存體 搭配 Azure Government 的資訊,請參閱 Azure Government 中的使用 Storage API 開發。

  4. 完成受控識別組態 (請記得在進行設定變更之後按一下[套用]):

    • 如果您使用系統指派的身分識別,則不必進行任何其他變更。

    • 如果您使用使用者指派的身分識別,請將下列設定新增至您的應用程式組態:

      • 針對 AzureWebJobsStorage__credential,請輸入 managedidentity

      • AzureWebJobsStorage__clientId,請從您的受控識別資源取得這個 GUID 值

    使用者指派的管理身份資源截圖,顯示客戶端 ID 值。

    Note

    Durable Functions 在使用使用者指派身份時不支援 。 請改用 clientId。

驗證你的設定

要確認你的管理身份設定是否有效:

  1. 在 Azure 入口網站中,瀏覽至您的函數應用程式,並觸發 Durable Functions 協調流程 (例如使用 HTTP 觸發函數)。
  2. 請透過查詢狀態端點或檢查 監控標籤來 確認編排是否成功完成。
  3. 如果看到認證錯誤,請確認:
    • 三個儲存資料貢獻者角色皆被指派到正確的身份。
    • AzureWebJobsStorage 連接字串 設定已被移除。
    • AzureWebJobsStorage__accountName (或服務 URI)設定是正確的。

下一步