在 Azure Logic Apps 中使用受控識別來驗證對 Azure 資源的存取和連線

適用於:Azure Logic Apps (使用量 + 標準)

使用受控識別來從邏輯應用程式工作流程驗證對 Microsoft Entra 保護資源的存取或連線時,您不需要提供認證、祕密或 Microsoft Entra 權杖。 在 Azure Logic Apps 中,當您必須驗證受 Microsoft Entra ID 保護的資源存取時,某些連接器作業支援使用受控識別。 Azure 會管理此身分識別,並協助確保驗證資訊安全,因為您不需要管理此敏感性資訊。 如需詳細資訊,請參閱什麼是適用於 Azure 資源的受控識別?

Azure Logic Apps 支援系統指派的受控身分識別使用者指派的受控身分識別。 下列清單描述這些受控身分識別類型之間的一些差異:

  • 邏輯應用程式資源只能啟用並使用一個唯一的系統指派身分識別。

  • 邏輯應用程式資源可以在一組其他邏輯應用程式資源中共用相同的使用者指派身分識別。

本指南說明如何完成下列工作:

  • 為您的邏輯應用程式資源啟用和設定系統指派的受控識別。 本指南提供的範例示範如何使用身分識別進行驗證。

  • 建立和設定使用者指派的身分識別。 本指南說明如何使用 Azure 入口網站和 Azure Resource Manager 範本 (ARM 範本) 來建立使用者指派的身分識別,以及如何使用身分識別進行驗證。 若為 Azure PowerShell、Azure CLI 和 Azure REST API,請參閱下列文件:

工具 文件
Azure PowerShell Create user-assigned identity
Azure CLI Create user-assigned identity
Azure REST API Create user-assigned identity

使用量與標準邏輯應用程式

根據您的邏輯應用程式資源類型,您可以啟用系統指派的身分識別、使用者指派的身分識別,或同時啟用兩者:

邏輯應用程式 Environment 受控識別支援
耗用 - 多租用戶 Azure Logic Apps

- 整合服務環境 (ISE)
- 您的邏輯應用程式可以啟用系統指派的身分識別「或」使用者指派的身分識別。

- 您可以在邏輯應用程式資源層級和連線層級使用受控身分識別。

- 如果您啟用使用者指派的身分識別,則邏輯應用程式一次「只能有一個」使用者指派的身分識別。
標準 - 單一租用戶 Azure Logic Apps

- App Service 環境 v3 (ASEv3)

- 已啟用 Azure Arc 的 Logic Apps
- 您可以同時啟用系統指派的身分識別 (預設予以啟用) 和使用者指派的身分識別。

- 您可以在邏輯應用程式資源層級和連線層級使用受控身分識別。

- 如果您啟用使用者指派的身分識別,則邏輯應用程式資源一次可以同時有多個使用者指派的身分識別。

如需 Azure Logic Apps 中受控身分識別限制的詳細資訊,請參閱邏輯應用程式的受控身分識別限制。 如需使用量和標準邏輯應用程式資源類型和環境的詳細資訊,請參閱下列文件:

您可以使用受控識別的位置

在 Azure Logic Apps 中,只有支援 OAuth 搭配 Microsoft Entra ID 的特定內建和受控連接器作業,才能使用受控識別進行驗證。 下表僅提供範例選取項目。 如需更完整的清單,請參閱支援驗證的觸發程序和動作的驗證類型,以及 支援使用受控識別進行 Microsoft Entra 驗證的 Azure 服務

針對使用量邏輯應用程式工作流程,下表列出支援受控身分識別驗證的連接器:

連接器類型 支援的連接器
內建 - Azure API 管理
- Azure App Service
- Azure Functions
- HTTP
- HTTP + Webhook

注意:HTTP 作業可以使用系統指派的身分識別來驗證 Azure 防火牆後方的 Azure 儲存體帳戶連線。 不過,這類作業不支援使用者指派的受控識別用於驗證相同的連線。

受控 - Azure App Service
- Azure 自動化
- Azure Blob 儲存體
- Azure 容器執行個體
- Azure Cosmos DB
- Azure 資料總管
- Azure Data Factory
- Azure Data Lake
- Azure 事件方格
- Azure 事件中樞
- Azure IoT Central V2
- Azure IoT Central V3
- Azure Key Vault
- Azure Log Analytics
- Azure 佇列
- Azure Resource Manager
- Azure 服務匯流排
- Azure Sentinel
- Azure 表格儲存體
- Azure VM
- HTTP 搭配 Microsoft Entra ID
- SQL Server

必要條件

  • Azure 帳戶和訂用帳戶。 如果您沒有訂用帳戶,請註冊一個免費的 Azure 帳戶。 受控識別與您需要指派存取權的目標 Azure 資源必須使用相同的 Azure 訂用帳戶。

  • 您想要存取的目標 Azure 資源。 在此資源上,您將新增受控身分識別的必要角色,以代表邏輯應用程式或連線來存取該資源。 若要將角色新增至受控身分識別,您需要可將角色指派給對應 Microsoft Entra 租用戶中的身分識別的 Microsoft Entra 系統管理員權限

  • 您想要使用支援受控身分識別之觸發程序或動作的邏輯應用程式資源和工作流程。

在 Azure 入口網站中啟用系統指派的身分識別

  1. Azure 入口網站中,開啟您的邏輯應用程式資源。

  2. 在邏輯應用程式功能表的 [設定] 下,選取 [身分識別]

  3. 在 [身分識別] 頁面上的 [系統指派] 底下,選取 [開啟]> [儲存]。 Azure 提示您確認時,請選取 [是]

    Screenshot shows Azure portal, Consumption logic app, Identity page, and System assigned tab with selected options, On and Save.

    注意

    如果您收到錯誤,表示您只能有一個受控識別,則您的邏輯應用程式資源已與使用者指派的身分識別建立關聯。 在您可以新增系統指派的身分識別之前,您必須先從邏輯應用程式資源移除使用者指派的身分識別。

    您的邏輯應用程式資源現在可以使用系統指派的身分識別。 此身分識別會使用 Microsoft Entra ID 註冊,並以物件識別碼表示。

    Screenshot shows Consumption logic app, Identity page, and object ID for system-assigned identity.

    屬性 數值 Description
    物件 (主體) 識別碼 <identity-resource-ID> 代表 Microsoft Entra 租用戶中邏輯應用程式的系統指派身分識別的全域唯一識別碼 (GUID)。
  4. 現在遵循本指南稍後的步驟,將該身分識別存取授與資源

在 ARM 範本中啟用系統指派的身分識別

若要自動建立和部署邏輯應用程式資源,您可以使用 ARM 範本。 若要在範本中為您的邏輯應用程式資源啟用系統指派的身分識別,請將 identity 物件和 type 子屬性新增至範本中邏輯應用程式的資源定義,例如:

{
   "apiVersion": "2016-06-01",
   "type": "Microsoft.logic/workflows",
   "name": "[variables('logicappName')]",
   "location": "[resourceGroup().location]",
   "identity": {
      "type": "SystemAssigned"
   },
   "properties": {},
   <...>
}

當 Azure 建立您的邏輯應用程式資源定義時,identity 物件會取得下列其他屬性:

"identity": {
   "type": "SystemAssigned",
   "principalId": "<principal-ID>",
   "tenantId": "<Azure-AD-tenant-ID>"
}
Property (JSON) Description
principalId <principal-ID> 受控識別服務主體物件的全域唯一識別碼 (GUID),代表 Microsoft Entra 租用戶中的邏輯應用程式。 此 GUID 有時候會顯示為「物件識別碼」或 objectID
tenantId <Azure-AD-tenant-ID> 代表邏輯應用程式現在已是其成員的 Microsoft Entra 租用戶的全域唯一識別碼 (GUID)。 在 Microsoft Entra 租用戶中,服務主體會有與邏輯應用程式執行個體相同的名稱。

在 Azure 入口網站中建立使用者指派的識別

您必須先將該身分識別建立為個別的 Azure 資源,才能在 [邏輯應用程式 (使用量)] 或 [邏輯應用程式 (標準)] 資源上啟用使用者指派的身分識別。

  1. Azure 入口網站搜尋方塊 中,輸入受控識別,然後選取 [受控識別]

    Screenshot shows Azure portal with selected option named Managed Identities.

  2. 在 [受控識別] 頁面上,選取 [建立]

    Screenshot shows Managed Identities page and selected option for Create.

  3. 提供受控識別的相關資訊,並選取 [檢閱 + 建立],例如:

    Screenshot shows page named Create User Assigned Managed Identity, with managed identity details.

    屬性 必填 Description
    訂用帳戶 Yes <Azure-訂閱-名稱> Azure 訂用帳戶名稱
    資源群組 Yes <Azure-資源-群組-名稱> Azure 資源群組名稱。 建立新的群組,或選取現有的群組。 此範例會建立名為 fabrikam-managed-identities-RG 的新群組。
    區域 Yes <Azure-region> 用來存放資源相關資訊的 Azure 區域。 此範例會使用「美國西部」
    名稱 Yes <user-assigned-identity-name> 要提供給使用者指派身分識別的名稱。 此範例會使用 Fabrikam-user-assigned-identity

    在 Azure 驗證資訊之後,Azure 會建立受控識別。 現在您可以將使用者指派的身分識別新增至邏輯應用程式資源。

將使用者指派的身分識別新增至 Azure 入口網站中的邏輯應用程式

  1. 在 Azure 入口網站中,開啟您的邏輯應用程式資源。

  2. 在邏輯應用程式功能表的 [設定] 下,選取 [身分識別]

  3. 在 [身分識別] 頁面上,選取 [使用者指派]> [新增]

    Screenshot shows Consumption logic app and Identity page with selected option for Add.

  4. 在 [新增使用者指派的受控識別] 窗格上,遵循下列步驟:

    1. 從 [訂用帳戶] 清單,選取您的 Azure 訂用帳戶。

    2. 從具有該訂用帳戶中全部受控識別的清單中,選取您想要的使用者指派身分識別。 若要篩選清單,請在 [使用者指派的受控識別] 搜尋方塊中,輸入身分識別或資源群組的名稱。

      Screenshot shows Consumption logic app and selected user-assigned identity.

    3. 完成後,選取 [新增]

      注意

      如果您收到錯誤,表示您只能有一個受控識別,則您的邏輯應用程式已與系統指派的身分識別建立關聯。 在您新增使用者指派的身分識別之前,必須先停用系統指派的身分識別。

    您的邏輯應用程式現在與使用者指派的受控識別相關聯。

    Screenshot shows Consumption logic app with associated user-assigned identity.

  5. 現在遵循本指南稍後的步驟,將該身分識別存取授與資源

在 ARM 範本中建立使用者指派的身分識別

若要自動建立和部署邏輯應用程式資源,您可以使用 ARM 範本。 這些範本支援使用者指派的身分識別來進行驗證

在範本的 resources 區段中,邏輯應用程式的資源定義需要下列項目:

  • type 屬性設定為 UserAssignedidentity 物件

  • 可指定使用者指派資源和名稱的子 userAssignedIdentities 物件

此範例會顯示 HTTP PUT 要求的使用量邏輯應用程式資源和工作流程定義,並具有非參數化的 identity 物件。 PUT 要求和後續 GET 作業的回應也會包括此 identity 物件:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {<template-parameters>},
   "resources": [
      {
         "apiVersion": "2016-06-01",
         "type": "Microsoft.logic/workflows",
         "name": "[variables('logicappName')]",
         "location": "[resourceGroup().location]",
         "identity": {
            "type": "UserAssigned",
            "userAssignedIdentities": {
               "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-identity-name>": {}
            }
         },
         "properties": {
            "definition": {<logic-app-workflow-definition>}
         },
         "parameters": {},
         "dependsOn": []
      },
   ],
   "outputs": {}
}

如果您的範本也包含受控識別的資源定義,您可以將 identity 物件參數化。 下列範例會顯示子 userAssignedIdentities 物件如何參考您在範本的 variables 區段中定義的 userAssignedIdentityName 變數。 此變數會參考使用者指派的身分識別所用的資源識別碼。

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "Template_LogicAppName": {
         "type": "string"
      },
      "Template_UserAssignedIdentityName": {
         "type": "securestring"
      }
   },
   "variables": {
      "logicAppName": "[parameters(`Template_LogicAppName')]",
      "userAssignedIdentityName": "[parameters('Template_UserAssignedIdentityName')]"
   },
   "resources": [
      {
         "apiVersion": "2016-06-01",
         "type": "Microsoft.logic/workflows",
         "name": "[variables('logicAppName')]",
         "location": "[resourceGroup().location]",
         "identity": {
            "type": "UserAssigned",
            "userAssignedIdentities": {
               "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('userAssignedIdentityName'))]": {}
            }
         },
         "properties": {
            "definition": {<logic-app-workflow-definition>}
         },
         "parameters": {},
         "dependsOn": [
            "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('userAssignedIdentityName'))]"
         ]
      },
      {
         "apiVersion": "2018-11-30",
         "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
         "name": "[parameters('Template_UserAssignedIdentityName')]",
         "location": "[resourceGroup().location]",
         "properties": {}
      }
  ]
}

授與資源的身分識別存取權

在您可以使用邏輯應用程式的受控識別進行驗證之前,您必須先在您想使用該身分識別的 Azure 資源上,設定該身分識別的存取權。 您設定存取的方式會根據您想要身分識別存取的資源而有所不同。

注意

當受控識別可存取相同訂用帳戶中的 Azure 資源時,該身分識別只能存取該資源。 不過,在某些支援受控識別的觸發程序和動作中,您必須先選取包含目標資源的 Azure 資源群組。 如果身分識別在資源群組層級沒有存取權,則儘管有目標資源的存取權,仍不會列出該群組中的任何資源。

若要處理此行為,您也必須將資源群組 (而不只是資源) 的存取權給予身分識別。 同樣地,如果您必須先選取訂用帳戶,才能選取目標資源,則必須將訂用帳戶的存取權給予身分識別。

在某些情況下,您可能需要身分識別才能存取相關聯的資源。 例如,假設您有邏輯應用程式的受控識別,其需要存取權才能從工作流程更新該相同邏輯應用程式的應用程式設定。 您必須為該身分識別授與相關聯邏輯應用程式的存取權。

例如,若要使用受控識別存取 Azure Blob 儲存體帳戶,您必須使用 Azure 角色型存取控制 (Azure RBAC) 設定存取權,並將該身分識別的適當角色指派給儲存體帳戶。 本節中的步驟說明如何使用 Azure 入口網站Azure Resource Manager 範本 (ARM 範本) 來完成這項工作。 若為 Azure PowerShell、Azure CLI 和 Azure REST API,請參閱下列文件:

工具 文件
Azure PowerShell 新增角色指派
Azure CLI 新增角色指派
Azure REST API 新增角色指派

不過,若要使用受控識別來存取 Azure 金鑰保存庫,您必須為該身分識別建立您金鑰保存庫的存取原則,並為該金鑰保存庫上的該身分識別指派適當的權限。 本節稍後的步驟說明如何使用 Azure 入口網站來完成這項工作。 如需 Resource Manager 範本、PowerShell 和 Azure CLI,請參閱下列文件:

工具 文件
Azure Resource Manager 範本 (ARM 範本) 金鑰保存庫存取原則資源定義
Azure PowerShell 指派 Key Vault 存取原則
Azure CLI 指派 Key Vault 存取原則

在 Azure 入口網站中指派受控識別角色型存取

若要使用受控識別進行驗證,有些 Azure 資源 (例如 Azure 儲存體帳戶) 要求您將該身分識別指派給具有目標資源適當權限的角色。 其他 Azure 資源 (例如 Azure 金鑰保存庫) 要求您建立存取原則,讓該身分識別具有目標資源的適當權限

  1. Azure 入口網站中,開啟您要在其中使用身分識別的資源。

  2. 在資源功能表上,選取 [存取控制 (IAM)]> [新增]> [新增角色指派]

    注意

    如果 [新增角色指派] 選項已停用,您就沒有指派角色的權限。 如需詳細資訊,請參閱 Microsoft Entra 內建角色

  3. 現在,將必要的角色指派給受控識別。 在 [角色] 索引標籤上,指派角色,為您的身分識別提供目前資源的必要存取權。

    在此範例中,請指派名為儲存體 Blob 資料參與者的角色,其中包含 Azure 儲存體容器中 Blob 的寫入權限。 如需特定儲存體容器角色的詳細資訊,請參閱可存取 Azure 儲存體容器中 Blob 的角色

  4. 接下來,選擇您要指派角色的受控識別。 在 [指派存取權給] 之下,選取 [受控識別]>[新增成員]

  5. 根據您的受控識別類型,選取或提供下列值:

    類型 Azure 服務執行個體 訂用帳戶 member
    系統指派 邏輯應用程式 <Azure-訂閱-名稱> <your-logic-app-name>
    使用者指派 不適用 <Azure-訂閱-名稱> <your-user-assigned-identity-name>

    如需角色指派的詳細資訊,請參閱使用 Azure 入口網站指派角色

  6. 完成之後,您可以使用身分識別來驗證可支援受控識別之觸發程序和動作的存取權

如需此工作的一般資訊,請參閱使用 Azure RBAC 將受控識別存取權指派給另一個資源

在 Azure 入口網站中建立存取原則

若要使用受控識別進行驗證,有些 Azure 資源 (例如 Azure 金鑰保存庫) 要求您建立存取原則,讓該身分識別具有目標資源的適當權限。 其他 Azure 資源 (例如 Azure 儲存體帳戶) 要求您將該身分識別指派給具有目標資源適當權限的角色

  1. Azure 入口網站中,開啟您要在其中使用身分識別的目標資源。 此範例使用 Azure 金鑰保存庫作為目標資源。

  2. 在資源的功能表上,選取 [存取原則]>[建立],這會開啟 [建立存取原則] 窗格。

    注意

    如果資源沒有 [存取原則] 選項,請嘗試改為指派角色指派

    Screenshot shows Azure portal and key vault example with open pane named Access policies.

  3. 在 [權限] 索引標籤上,選取身分識別存取目標資源所需的必要權限。

    例如,若要使用身分識別搭配受控 Azure Key Vault 連接器的 [列出秘密] 作業,身分識別需要 [列出] 權限。 因此,在 [秘密權限] 資料行中,選取 [列出]

    Screenshot shows Permissions tab with selected List permissions.

  4. 在您準備就緒後,選取 [下一步]。 在 [主體] 索引標籤上,尋找並選取受控識別,這是此範例中使用者指派的身分識別。

  5. 略過選擇性 [應用程式] 步驟,選取 [下一步],然後完成建立存取原則。

下一節討論如何使用受控識別來驗證觸發程序或動作的存取權。 此範例會繼續進行前一節中的步驟,其中您使用 RBAC 設定受控識別的存取權,且不會使用 Azure Key Vault 作為範例。 不過,使用受控識別進行驗證的一般步驟相同。

使用受控識別驗證存取權

當您啟用邏輯應用程式資源的受控識別授與目標資源或實體的身分識別存取權時,您可以在支援受控識別的觸發和動作中使用該身分識別。

重要

如果您有想要使用系統指派身分識別的Azure 函式,請先啟用 Azure Functions 的驗證功能

這些步驟示範如何透過 Azure 入口網站,使用受控識別搭配觸發或動作。 若要在觸發或動作的基礎 JSON 定義中指定受控識別,請參閱受控識別驗證

  1. Azure 入口網站中,開啟您的邏輯應用程式資源。

  2. 如果您尚未這麼做,請新增支援受控識別的觸發或動作

    注意

    並非所有的連接器作業都支援讓您新增驗證類型。 如需詳細資訊,請參閱支援驗證的觸發程序和動作驗證類型

  3. 在您新增的觸發程序或動作上,遵循下列步驟:

    • 支援受控識別驗證的內建連接器作業

      1. 如果 [驗證] 屬性尚未出現,請從 [新增參數] 清單加以新增。

        Screenshot shows Consumption workflow with built-in action and opened list named Add new parameter, with selected option for Authentication.

      2. 從 [驗證類型] 清單中,選取 [受控識別]

        Screenshot shows Consumption workflow with built-in action and opened list named Authentication type, with selected option for Managed identity.

      如需詳細資訊,請參閱範例:使用受控識別來驗證內建觸發程序或動作

    • 支援受控識別驗證的受控連接器作業

      1. 在租用戶選取頁面上,選取 [使用受控識別進行連線],例如:

        Screenshot shows Consumption workflow with Azure Resource Manager action and selected option for Connect with managed identity.

      2. 在下一頁,針對 [連線名稱],提供要用於連線的名稱。

      3. 針對驗證類型,根據您的受控連接器選擇下列其中一個選項:

        • 單一驗證:這些連接器僅支援一種驗證類型。 從 [受控識別] 清單,選取目前啟用的受控識別,若尚未選取,請選取 [建立],例如:

          Screenshot shows Consumption workflow, connection name box, and selected option for system-assigned managed identity.

        • 多重驗證:這些連接器會顯示多個驗證類型,但您仍然可以只選取一個類型。 從 [驗證類型] 清單,選取 [Logic Apps 受控識別]>[建立],例如:

          Screenshot shows Consumption workflow, connection name box, and selected option for Logic Apps Managed Identity.

        如需詳細資訊,請參閱範例:使用受控識別來驗證受控連接器觸發程序或動作

範例:使用受控識別來驗證內建觸發程序或動作

內建 HTTP 觸發程序或動作可以使用您為邏輯應用程式資源啟用的系統指派身分識別。 一般來說,HTTP 觸發程序或動作會使用下列屬性來指定您想要存取的資源或實體:

屬性 必要 描述
方法 Yes 您想要執行之作業所使用的 HTTP 方法
URI Yes 用於存取目標 Azure 資源或實體的端點 URL。 URI 語法通常包含 Azure 資源或服務的資源識別碼
標題 No 您需要包含在連出要求中的任何標題值,例如內容類型
查詢 No 您需要或想要包含在要求中的任何查詢參數。 例如,特定作業的查詢參數,或您想要執行之作業的 API 版本。
驗證 Yes 用來驗證對目標資源或實體存取的驗證類型

在特定的範例中,假設您想要在先前設定身分識別存取權的 Azure 儲存體帳戶中,於 Blob 上執行快照集 Blob 作業。 不過,Azure Blob 儲存體連接器目前不提供這種操作。 相反地,您可以使用 HTTP 動作或其他 Blob 服務 REST API 作業來執行這項作業。

重要

若要使用 Azure Blob 連接器和受控識別存取防火牆後方的 Azure 儲存體帳戶,請確定您也使用允許受信任Microsoft 服務存取的例外狀況設定儲存體帳戶。

若要執行快照集 Blob 作業,HTTP 動作會指定下列屬性:

屬性 必要 範例值 描述
方法 Yes PUT 快照集 Blob 操作所使用的HTTP 方法
URI Yes https://<storage-account-name>/<folder-name>/{name} Azure 全域 (公用) 環境中 Azure Blob 儲存體檔案的資源識別碼會使用此語法
標題 適用於 Azure 儲存體 x-ms-blob-type = BlockBlob

x-ms-version = 2019-02-02

x-ms-date = @{formatDateTime(utcNow(),'r')}

Azure 儲存體作業所需的 x-ms-blob-typex-ms-versionx-ms-date 標題值。

重要事項:在 Azure 儲存體的傳出 HTTP 觸發和動作要求中,標題需要您要執行的作業所用的 x-ms-version 屬性和 API 版本。 x-ms-date 必須是目前的日期。 否則,您的工作流程會失敗並出現 403 FORBIDDEN 錯誤。 若要取得所需格式的目前日期,您可以在範例值中使用運算式。

如需詳細資訊,請參閱下列文件:

- 要求標題 - 快照集 Blob
- Azure 儲存體服務的版本設定

查詢 僅適用於快照集 Blob 作業 comp = snapshot 此作業的查詢參數名稱和值。

下列範例顯示範例 HTTP 動作,包含用於快照集 Blob 作業的所有先前描述屬性值:

Screenshot shows Azure portal, Consumption workflow, and HTTP action set up to access resources.

  1. 新增 HTTP 動作之後,請將 [驗證] 屬性新增至 HTTP 動作。 從 [新增參數] 清單中,選取 [驗證]

    Screenshot shows Consumption workflow with HTTP action and opened Add new parameter list with selected property named Authentication.

    注意

    並非所有的觸發和動作都支援讓您新增驗證類型。 如需詳細資訊,請參閱支援驗證的觸發程序和動作驗證類型

  2. 從 [驗證類型] 清單中,選取 [受控識別]

    Screenshot shows Consumption workflow, HTTP action, and Authentication property with selected option for Managed identity.

  3. 從 [受控識別] 清單中,根據您的案例從可用的選項中選取。

    • 如果您設定系統指派的身分識別,請選取 [系統指派的受控識別] (如果尚未選取)。

      Screenshot shows Consumption workflow, HTTP action, and Managed identity property with selected option for System-assigned managed identity.

    • 如果您設定使用者指派的身分識別,請選取該身分識別 (如果尚未選取)。

      Screenshot shows Consumption workflow, HTTP action, and Managed identity property with selected user-assigned identity.

    此範例會繼續使用系統指派的受控識別

  4. 在某些觸發和動作上,也會顯示 [物件] 屬性,讓您設定目標資源識別碼。 將 [物件] 屬性設定為目標資源或服務的資源識別碼。 否則,根據預設,[物件] 屬性會使用 https://management.azure.com/ 資源識別碼,也就是 Azure Resource Manager 的資源識別碼。

    例如,如果您想要驗證對全域 Azure 雲端中金鑰保存庫資源的存取權,您必須將 [受眾] 屬性設定為「完全如同」下列資源識別碼:https://vault.azure.net。 此特定資源識別碼「沒有」任何後置斜線。 事實上,包含後置斜線可能會產生 400 Bad Request 錯誤或 401 Unauthorized 錯誤。

    重要

    請確定目標資源識別碼完全符合Microsoft Entra ID 所預期的值,包括任何必要的尾端斜線。 例如,所有 Azure Blob 儲存體帳戶的資源識別碼都需要後置斜線。 不過,特定儲存體帳戶的資源識別碼不需要尾端斜線。 勾選 [支援 Microsoft Entra ID 的 Azure 服務的資源識別碼]

    這個範例會將 [物件] 屬性設定為 https://storage.azure.com/,讓用於驗證的存取權杖對所有儲存體帳戶都有效。 不過,您也可以指定特定儲存體帳戶的根服務 URL https://<your-storage-account>.blob.core.windows.net

    Screenshot shows Consumption workflow, HTTP action, and Audience

    如需透過 Microsoft Entra ID 授權 Azure 儲存體存取的詳細資訊,請參閱下列文件:

  5. 繼續按照您想要的方式建置工作流程。

範例:使用受控識別來驗證受控連接器觸發程序或動作

Azure Resource Manager 受控連接器具有名為 [讀取資源] 的動作,其可使用您在邏輯應用程式資源上啟用的受控識別。 此範例示範如何使用系統指派的受控識別。

  1. 將動作新增至工作流程並選取您的 Microsoft Entra 租用戶之後,請選取 [使用受控識別連線]

    Screenshot shows Consumption workflow, Azure Resource Manager action, and selected option for Connect with managed identity.

  2. 在 [連線名稱] 頁面上,提供連線的名稱,然後選取您想要使用的受控識別。

    Azure Resource Manager 動作是單一驗證動作,因此連線資訊方塊會顯示 [受控識別] 清單,其中自動選取邏輯應用程式資源上目前啟用的受控識別。 如果您已啟用系統指派的受控識別,[受控識別] 清單會選取 [系統指派的受控識別]。 如果您已改為啟用使用者指派的受控識別,則清單會改為選取該身分識別。

    如果您使用多重驗證觸發程序或動作 (例如 Azure Blob 儲存體),則連線資訊方塊會顯示 [驗證類型] 清單,其中包含其他驗證類型的 [Logic Apps 受控識別] 選項。

    在此範例中,系統指派的受控識別是唯一可用的選項。

    Screenshot shows Consumption workflow and Azure Resource Manager action with connection name entered and selected option for System-assigned managed identity.

    注意

    如果受控識別在您嘗試建立連線、變更連線時並未啟用,或在已啟用受控識別的連線仍然存在時遭到移除,則會出現錯誤,指出您必須啟用身分識別並授與目標資源的存取權。

  3. 當您準備好時,選取 [建立]

  4. 設計工具成功建立連線之後,設計工具可以使用受控識別驗證來擷取任何動態值、內容或結構描述。

  5. 繼續按照您想要的方式建置工作流程。

使用受控識別的邏輯應用程式資源定義和連線

啟用和使用受控識別的連線,是僅適用於受控識別的特殊連線類型。 在執行階段,連線會使用邏輯應用程式資源上啟用的受控識別。 在執行階段,Azure Logic Apps 服務會檢查邏輯應用程式工作流程中的任何受控連接器觸發程序和動作是否已設為使用受控識別,以及所有必要權限都已設為使用受控識別來存取觸發程序和動作所指定的目標資源。 如果成功,Azure Logic Apps 會擷取與受控識別相關聯的 Microsoft Entra 權杖,並使用該身分識別來驗證目標資源的存取權,以及在觸發程序和動作中執行已設定的作業。

在使用量邏輯應用程式資源中,如果已啟用使用者指派的身分識別,則連線設定會儲存在邏輯應用程式資源定義的 parameters 物件,該物件包含 $connections 物件,其中包含連線資源識別碼以及身分識別資源識別碼的指標。

此範例顯示當邏輯應用程式啟用「系統指派」的受控識別時的組態外觀:

"parameters": {
   "$connections": {
      "value": {
         "<action-name>": {
            "connectionId": "/subscriptions/{Azure-subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/connections/{connection-name}",
            "connectionName": "{connection-name}",
            "connectionProperties": {
               "authentication": {
                  "type": "ManagedServiceIdentity"
               }
            },
            "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{Azure-region}/managedApis/{managed-connector-type}"
         }
      }
   }
}

此範例顯示當邏輯應用程式啟用「使用者指派」的受控識別時的組態外觀:

"parameters": {
   "$connections": {
      "value": {
         "<action-name>": {
            "connectionId": "/subscriptions/{Azure-subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/connections/{connection-name}",
            "connectionName": "{connection-name}",
            "connectionProperties": {
               "authentication": {
                  "type": "ManagedServiceIdentity",
                  "identity": "/subscriptions/{Azure-subscription-ID}/resourceGroups/{resourceGroupName}/providers/microsoft.managedidentity/userassignedidentities/{managed-identity-name}"
               }
            },
            "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{Azure-region}/managedApis/{managed-connector-type}"
         }
      }
   }
}

適用於 API 連線和受控識別的 ARM 範本

如果您使用 ARM 範本來自動化部署,而您的工作流程包含 API 連線,此連線是由受控連接器 (例如 Office 365 Outlook、Azure Key Vault 等等) 所建立,則需採取額外的步驟。

在 ARM 範本中,基礎連接器資源定義會根據您有取用或標準邏輯應用程式,以及連接器顯示單一驗證或多重驗證選項而有所不同。

下列範例適用於使用量邏輯應用程式資源,並說明單一驗證連接器 (例如 Azure 自動化) 與多重驗證連接器 (例如 Azure Blob 儲存體) 之間的基礎連接器資源定義有何差異。

單一驗證

此範例顯示在使用受控識別的取用邏輯應用程式中 Azure 自動化動作的基礎連線資源定義,其中定義包含下列屬性:

  • kind 屬性已針對取用邏輯應用程式設定為 V1
  • parameterValueType 屬性會設定為 Alternative
{
    "type": "Microsoft.Web/connections",
    "apiVersion": "[providers('Microsoft.Web','connections').apiVersions[0]]",
    "name": "[variables('connections_azureautomation_name')]",
    "location": "[parameters('location')]",
    "kind": "V1",
    "properties": {
        "alternativeParameterValues": {},
        "api": {
            "id": "[subscriptionResourceId('Microsoft.Web/locations/managedApis', parameters('location'), 'azureautomation')]"
        },
        "authenticatedUser": {},
        "connectionState": "Enabled",
        "customParameterValues": {},
        "displayName": "[variables('connections_azureautomation_name')]",
        "parameterValueSet": {},
        "parameterValueType": "Alternative"
    }
},

多重驗證

此範例顯示在使用受控識別的取用邏輯應用程式中 Azure Blob 儲存體動作的基礎連線資源定義,其中定義包含下列屬性:

  • kind 屬性已針對取用邏輯應用程式設定為 V1
  • parameterValueSet 物件包含設定為 managedIdentityAuthname 屬性,以及設定為空白物件的 values 屬性。
{
    "type": "Microsoft.Web/connections",
    "apiVersion": "[providers('Microsoft.Web','connections').apiVersions[0]]",
    "name": "[variables('connections_azureblob_name')]",
    "location": "[parameters('location')]",
    "kind": "V1",
    "properties": {
        "alternativeParameterValues":{},
        "api": {
            "id": "[subscriptionResourceId('Microsoft.Web/locations/managedApis', parameters('location'), 'azureblob')]"
        },
        "authenticatedUser": {},
        "connectionState": "Enabled",
        "customParameterValues": {},
        "displayName": "[variables('connections_azureblob_name')]",
        "parameterValueSet":{
            "name": "managedIdentityAuth",
            "values": {}
        },
        "parameterValueType": "Alternative"
    }
}

設定 API 連線驗證的進階控制

當您的工作流程使用由受控連接器 (例如 Office 365 Outlook、Azure Key Vault 等等) 所建立的 API 連線時,Azure Logic Apps 服務會使用兩個連線來與目標資源 (例如您的電子郵件帳戶、金鑰保存庫等等) 通訊:

Conceptual diagram showing first connection with authentication between logic app and token store plus second connection between token store and target resource.

  • 連線 #1 是使用內部權杖存放區的驗證來設定。

  • 連線 #2 是使用目標資源的驗證來設定。

在取用邏輯應用程式資源中,連線 #1 是從您擷取,而不需任何設定選項。 在標準邏輯應用程式資源類型中,您可以更充分掌控邏輯應用程式。 根據預設,連線 #1 會自動設定為使用系統指派的身分識別。

不過,如果您的案例需要更精細地控制驗證 API 連線,您可以選擇性地將連線 #1 的驗證從預設系統指派的身分識別變更為您已新增至邏輯應用程式的任何使用者指派的身分識別。 此驗證適用於每個 API 連線,因此您可將系統指派和使用者指派的身分識別混用於相同目標資源的不同連線。

在您的標準邏輯應用程式 connections.json 檔案中,該檔案儲存每個 API 連線的相關資訊,而每個連線定義都有兩個 authentication 區段,例如:

"keyvault": {
   "api": {
      "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{region}/managedApis/keyvault"
   },
   "authentication": {
      "type": "ManagedServiceIdentity",
   },
   "connection": {
      "id": "/subscriptions/{Azure-subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/connections/<connection-name>"
   },
   "connectionProperties": {
      "authentication": {
         "audience": "https://vault.azure.net",
         "type": "ManagedServiceIdentity"
      }
   },
   "connectionRuntimeUrl": "<connection-runtime-URL>"
}
  • 第一個 authentication 區段對應至連線 #1。 本節描述用來與內部權杖存放區通訊的驗證。 在過去,此區段一律會針對部署至 Azure 且沒有可設定選項的應用程式設為 ManagedServiceIdentity

  • 第二個 authentication 區段對應至連線 #2。 本節描述用來與目標資源通訊的驗證可能會根據您為該連線選取的驗證類型而有所不同。

為何變更權杖存放區的驗證?

在某些情況下,您可能想要跨多個邏輯應用程式共用和使用相同的 API 連線,但不會將每個邏輯應用程式的系統指派身分識別新增至目標資源的存取原則。

在其他情況下,您可能不想在邏輯應用程式上完全設定系統指派的身分識別,因此您可將驗證變更為使用者指派的身分識別,並完全停用系統指派的身分識別。

變更權杖存放區的驗證

  1. Azure 入口網站中,開啟您的標準邏輯應用程式資源。

  2. 在資源功能表的 [工作流程] 之下,選取 [連線]

  3. 在 [連線] 窗格中,選取 [JSON 檢視]

    Screenshot showing the Azure portal, Standard logic app resource,

  4. 在 JSON 編輯器中,尋找 managedApiConnections 區段,其中包含邏輯應用程式資源中所有工作流程的 API 連線。

  5. 尋找您要在其中新增使用者指派受控識別的連線。 例如,假設您的工作流程具有 Azure Key Vault 連線:

    "keyvault": {
       "api": {
          "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{region}/managedApis/keyvault"
       },
       "authentication": {
          "type": "ManagedServiceIdentity"
       },
       "connection": {
          "id": "/subscriptions/{Azure-subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/connections/<connection-name>"
       },
       "connectionProperties": {
          "authentication": {
             "audience": "https://vault.azure.net",
             "type": "ManagedServiceIdentity"
          }
       },
       "connectionRuntimeUrl": "<connection-runtime-URL>"
    }
    
  6. 在連線定義中,完成下列步驟:

    1. 尋找第一個 authentication 區段。 如果這個 identity 區段中沒有 authentication 屬性存在,則邏輯應用程式會隱含地使用系統指派的身分識別。

    2. 使用此步驟中的範例來新增 identity 屬性。

    3. 將屬性值設定為使用者指派身分識別的資源識別碼。

    "keyvault": {
       "api": {
          "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{region}/managedApis/keyvault"
       },
       "authentication": {
          "type": "ManagedServiceIdentity",
          // Add "identity" property here
          "identity": "/subscriptions/{Azure-subscription-ID}/resourcegroups/{resource-group-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-resource-ID}" 
       },
       "connection": {
          "id": "/subscriptions/{Azure-subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/connections/<connection-name>"
       },
       "connectionProperties": {
          "authentication": {
             "audience": "https://vault.azure.net",
             "type": "ManagedServiceIdentity"
          }
       },
       "connectionRuntimeUrl": "<connection-runtime-URL>"
    }
    
  7. 在 Azure 入口網站中,移至目標資源,並根據目標資源的需求授與使用者指派的受控識別存取權

    例如,針對 Azure Key Vault,將身分識別新增至金鑰保存庫的存取原則。 針對 Azure Blob 儲存體,將身分識別的必要角色指派給儲存體帳戶。

停用受控識別

若要停止使用受控識別進行驗證,請先移除身分識別對目標資源的存取權。 接下來,在您的邏輯應用程式資源上,關閉系統指派的身分識別,或移除使用者指派的身分識別。

當您在邏輯應用程式資源上停用受控識別時,您會移除該身分識別的能力,以要求身分識別具有存取權的 Azure 資源存取權。

注意

如果您停用系統指派的身分識別,即使您立即再次啟用身分識別,該邏輯應用程式工作流程中的工作流程所使用的任何和所有連線都不會在執行階段運作。 發生此行為的原因是停用身分識別會刪除物件識別碼。 每次啟用身分識別時,Azure 都會產生具有不同且唯一物件識別碼的身分識別。 若要解決此問題,您必須重新建立連線,使其使用目前系統指派身分識別的目前物件識別碼。

請嘗試盡可能避免停用系統指派的身分識別。 如果您想要移除身分識別對 Azure 資源的存取權,請從目標資源移除身分識別的角色指派。 如果您刪除邏輯應用程式資源,Azure 會自動從 Microsoft Entra ID 移除移除受控識別。

本節中的步驟涵蓋如何使用 Azure 入口網站Azure Resource Manager 範本 (ARM 範本)。 若為 Azure PowerShell、Azure CLI 和 Azure REST API,請參閱下列文件:

工具 文件
Azure PowerShell 1.移除角色指派
2.刪除使用者指派的身分識別
Azure CLI 1.移除角色指派
2.刪除使用者指派的身分識別
Azure REST API 1.移除角色指派
2.刪除使用者指派的身分識別

在 Azure 入口網站中停用受控識別

若要移除受控識別的存取權,請從目標資源移除身分識別的角色指派,然後停用受控識別。

移除角色指派

下列步驟會從受控識別移除目標資源的存取權:

  1. Azure 入口網站中,移至您想要針對受控識別移除存取權的目標 Azure 資源。

  2. 從目標資源的功能表中,選取 [存取控制 (IAM)]。 在工具列底下,選取 [角色指派]

  3. 在角色清單中,選取您想要移除的受控識別。 在工具列上,選取 [移除]

    提示

    如果 [移除] 選項已停用,您很可能沒有權限。 如需可讓您管理資源角色的權限的詳細資訊,請參閱 Microsoft Entra ID 中的系統管理員角色權限

停用邏輯應用程式資源上的受控識別

  1. Azure 入口網站中,開啟您的邏輯應用程式資源。

  2. 在邏輯應用程式導覽功能表的 [設定] 之下,選取 [身分識別],然後依照您的身分識別步驟執行:

    • 選取 [系統指派]>[開啟]>[儲存]。 Azure 提示您確認時,請選取 [是]

    • 選取 [使用者指派] 和 [受控識別],然後選取 [移除]。 Azure 提示您確認時,請選取 [是]

停用 ARM 範本中的受控識別

如果您使用 ARM 範本建立邏輯應用程式的受控識別,請將 identity 物件的 type 子屬性設定為 None

"identity": {
   "type": "None"
}

下一步