在 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
必要條件
Azure 帳戶和訂用帳戶。 如果您沒有訂用帳戶,請註冊一個免費的 Azure 帳戶。 受控識別與您需要指派存取權的目標 Azure 資源必須使用相同的 Azure 訂用帳戶。
您想要存取的目標 Azure 資源。 在此資源上,您必須新增受控身分識別的必要角色,以代表邏輯應用程式或連線來存取該資源。 若要將角色新增至受控身分識別,您需要可將角色指派給對應 Microsoft Entra 租用戶中的身分識別的 Microsoft Entra 系統管理員權限。
您想要使用支援受控身分識別之觸發程序或動作的邏輯應用程式資源和工作流程。
使用量與標準邏輯應用程式之間的受控識別差異
根據您的邏輯應用程式資源類型,您可以啟用系統指派的身分識別、使用者指派的身分識別,或同時啟用兩者:
邏輯應用程式 | Environment | 受控識別支援 |
---|---|---|
耗用 | - 多租用戶 Azure Logic Apps | - 您可以啟用系統指派的身分識別「或」使用者指派的身分識別,但在邏輯應用程式上則無法。 - 您可以在邏輯應用程式資源層級和連線層級使用受控身分識別。 - 如果您建立並啟用使用者指派的身分識別,則邏輯應用程式一次「只能有一個」使用者指派的身分識別。 |
標準 | - 單一租用戶 Azure Logic Apps - App Service 環境 v3 (ASEv3) - 已啟用 Azure Arc 的 Logic Apps |
- 您可以同時啟用系統指派的身分識別 (預設予以啟用) 和使用者指派的身分識別。 您也可以將多個使用者指派的身分識別新增至邏輯應用程式。 不過,邏輯應用程式一次只能使用一個受控識別。 - 您可以在邏輯應用程式資源層級和連線層級使用受控身分識別。 |
如需 Azure Logic Apps 中受控身分識別限制的詳細資訊,請參閱邏輯應用程式的受控身分識別限制。 如需使用量和標準邏輯應用程式資源類型和環境的詳細資訊,請參閱下列文件:
您可以使用受控識別的位置
在 Azure Logic Apps 中,只有支援 OAuth 搭配 Microsoft Entra ID 的特定內建和受控連接器作業,才能使用受控識別進行驗證。 下表僅提供範例選取項目。 如需更完整的清單,請參閱下列文件:
針對使用量邏輯應用程式工作流程,下表列出支援受控身分識別驗證的範例連接器:
連接器類型 | 支援的連接器 |
---|---|
內建 | - Azure API 管理 - Azure App Service - Azure Functions - HTTP - HTTP + Webhook 注意:HTTP 作業可以使用系統指派的身分識別來驗證 Azure 防火牆後方的 Azure 儲存體帳戶連線。 不過,HTTP 作業不支援使用者指派的身分識別用於驗證相同的連線。 |
受控 | - Azure App Service - Azure 自動化 - Azure Blob 儲存體 - Azure 容器執行個體 - Azure Cosmos DB - Azure 資料總管 - Azure Data Factory - Azure Data Lake - Azure Digital Twins - Azure 事件方格 - Azure 事件中樞 - Azure IoT Central V2 - Azure Key Vault - Azure 監視器記錄 - Azure 佇列 - Azure Resource Manager - Azure 服務匯流排 - Azure Sentinel - Azure 表格儲存體 - Azure VM - SQL Server |
在 Azure 入口網站中啟用系統指派的身分識別
在使用量邏輯應用程式資源上,您必須手動啟用系統指派的身分識別。
在 Azure 入口網站中,開啟您的使用量邏輯應用程式資源。
在邏輯應用程式功能表的 [設定] 下,選取 [身分識別]。
在 [身分識別] 頁面上的 [系統指派] 底下,選取 [開啟] > [儲存]。 Azure 提示您確認時,請選取 [是]。
注意
如果您收到錯誤,表示您只能有一個受控識別,則您的邏輯應用程式資源已與使用者指派的身分識別建立關聯。 在您可以新增系統指派的身分識別之前,您必須先從邏輯應用程式資源移除使用者指派的身分識別。
您的邏輯應用程式資源現在可以使用系統指派的身分識別。 此身分識別會使用 Microsoft Entra ID 註冊,並以物件識別碼表示。
屬性 數值 Description 物件 (主體) 識別碼 <identity-resource-ID> 代表 Microsoft Entra 租用戶中邏輯應用程式的系統指派身分識別的全域唯一識別碼 (GUID)。 現在遵循本指南後面的將資源的存取權給予系統指派身分識別的步驟。
在 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": "<Entra-tenant-ID>"
}
Property (JSON) | 值 | Description |
---|---|---|
principalId | <principal-ID> | 受控識別服務主體物件的全域唯一識別碼 (GUID),代表 Microsoft Entra 租用戶中的邏輯應用程式。 此 GUID 有時候會顯示為「物件識別碼」或 objectID。 |
tenantId | <Microsoft-Entra-ID-tenant-ID> | 代表邏輯應用程式現在已是其成員的 Microsoft Entra 租用戶的全域唯一識別碼 (GUID)。 在 Microsoft Entra 租用戶中,服務主體會有與邏輯應用程式執行個體相同的名稱。 |
在 Azure 入口網站中建立使用者指派的識別
您必須先將該身分識別建立為個別的 Azure 資源,才能在 [邏輯應用程式 (使用量)] 或 [邏輯應用程式 (標準)] 資源上啟用使用者指派的身分識別。
在 Azure 入口網站搜尋方塊中,輸入受控識別。 從結果清單中,選取 [受控識別]。
在 [受控識別] 頁面工具列上,選取 [建立]。
提供受控識別的相關資訊,並選取 [檢閱 + 建立],例如:
屬性 必填 值 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 入口網站中的邏輯應用程式
在 Azure 入口網站中,開啟您的使用量邏輯應用程式資源。
在邏輯應用程式功能表的 [設定] 下,選取 [身分識別]。
在 [身分識別] 頁面上,選取 [使用者指派],然後選取 [新增]。
在 [新增使用者指派的受控識別] 窗格上,遵循下列步驟:
從 [選取訂用帳戶] 清單,選取您的 Azure 訂用帳戶。
從具有該訂用帳戶中全部受控識別的清單中,選取您想要的使用者指派身分識別。 若要篩選清單,請在 [使用者指派的受控識別] 搜尋方塊中,輸入身分識別或資源群組的名稱。
完成後,選取 [新增]。
注意
如果您收到錯誤,表示您只能有一個受控識別,則您的邏輯應用程式已與系統指派的身分識別建立關聯。 在您新增使用者指派的身分識別之前,必須先停用系統指派的身分識別。
您的邏輯應用程式現在與使用者指派的身分識別相關聯。
現在遵循本指南後面的將資源的存取權給予身分識別的步驟。
在 ARM 範本中建立使用者指派的身分識別
若要自動建立和部署邏輯應用程式資源,您可以使用 ARM 範本。 這些範本支援使用者指派的身分識別來進行驗證。
在範本的 [資源] 區段中,邏輯應用程式的資源定義需要下列專案:
type 屬性設定為 UserAssigned 的 identity 物件
指定使用者指派資源與名稱的子 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 物件如何參考您在範本的 [變數] 區段中定義的 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 角色型存取控制 (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 金鑰保存庫,支援多個選項,因此您可以選擇角色型存取或具有該身分識別目標資源之適當權限的存取原則。
在 Azure 入口網站中,開啟您要在其中使用身分識別的資源。
在資源功能表上,選取 [存取控制 (IAM)] > [新增] > [新增角色指派]。
注意
如果 [新增角色指派] 選項已停用,您就沒有指派角色的權限。 如需詳細資訊,請參閱 Microsoft Entra 內建角色。
請將必要的角色指派給受控識別。 在 [角色] 索引標籤上,指派角色,為您的身分識別提供目前資源的必要存取權。
在此範例中,請指派名為儲存體 Blob 資料參與者的角色,其中包含 Azure 儲存體容器中 Blob 的寫入權限。 如需特定儲存體容器角色的詳細資訊,請參閱可存取 Azure 儲存體容器中 Blob 的角色。
接下來,選擇您要指派角色的受控識別。 在 [指派存取權給] 之下,選取 [受控識別]>[新增成員]。
根據您的受控識別類型,選取或提供下列值:
類型 Azure 服務執行個體 訂用帳戶 member 系統指派 邏輯應用程式 <Azure-訂閱-名稱> <your-logic-app-name> 使用者指派 不適用 <Azure-訂閱-名稱> <your-user-assigned-identity-name> 如需角色指派的詳細資訊,請參閱使用 Azure 入口網站指派角色。
完成之後,您可以使用身分識別來驗證可支援受控識別之觸發程序和動作的存取權。
如需此工作的一般資訊,請參閱將受控識別存取權指派給 Azure 資源或另一個資源。
使用 Azure 入口網站建立存取原則
為了使用受控識別進行驗證,其他 Azure 資源也會支援或要求您建立存取原則,讓該身分識別具有目標資源的適當權限。 其他 Azure 資源 (例如 Azure 儲存體帳戶) 會改為要求您將該身分識別指派給具有目標資源適當權限的角色。
在 Azure 入口網站中,開啟您要在其中使用身分識別的目標資源。 此範例使用 Azure 金鑰保存庫作為目標資源。
在資源功能表上,選取 [存取原則]>[建立],這會開啟 [建立存取原則] 窗格。
注意
如果資源沒有 [存取原則] 選項,請嘗試改為指派角色指派。
在 [權限] 索引標籤上,選取身分識別存取目標資源所需的必要權限。
例如,若要使用身分識別搭配 Azure Key Vault 受控連接器的 [列出祕密] 作業,身分識別需要 [列出] 權限。 因此,在 [秘密權限] 資料行中,選取 [列出]。
在您準備就緒後,選取 [下一步]。 在 [主體] 索引標籤上,尋找並選取受控識別,這是此範例中使用者指派的身分識別。
略過選擇性 [應用程式] 步驟,選取 [下一步],然後完成建立存取原則。
下一節說明如何使用受控識別搭配觸發程序或動作來驗證存取權。 此範例會繼續進行前一節中的步驟,其中您使用 RBAC 和 Azure 儲存體帳戶作為範例設定受控識別的存取權。 不過,使用受控識別進行驗證的一般步驟相同。
使用受控識別驗證存取權
當您啟用邏輯應用程式資源的受控識別並授與 Azure 目標資源或服務的身分識別存取權時,您可以在支援受控識別的觸發和動作中使用該身分識別。
重要
如果您有想要使用系統指派身分識別的Azure 函式,請先啟用 Azure Functions 的驗證功能。
下列步驟示範如何使用 Azure 入口網站,使用受控識別搭配觸發或動作。 若要在觸發或動作的基礎 JSON 定義中指定受控識別,請參閱受控識別驗證。
在 Azure 入口網站中,開啟您的使用量邏輯應用程式資源。
如果您尚未這麼做,請新增支援受控識別的觸發或動作。
注意
並非所有的連接器作業都支援讓您新增驗證類型。 如需詳細資訊,請參閱支援驗證的觸發程序和動作驗證類型。
在您新增的觸發程序或動作上,遵循下列步驟:
支援受控識別驗證的內建連接器作業
這些步驟會繼續使用 HTTP 動作作為範例。
如果 [驗證] 屬性尚未出現,請從 [進階參數] 清單加以新增。
現在,[驗證] 屬性和 [驗證類型] 清單都會出現在動作上。
從 [驗證類型] 清單中,選取 [受控識別]。
[驗證] 區段現在會顯示下列選項:
您可以從中選取特定受控識別的 [受控識別] 清單
對象屬性會出現在特定觸發程序和動作上,以便您可以設定 Azure 目標資源或服務的資源識別碼。 否則,根據預設,[物件] 屬性會使用
https://management.azure.com/
資源識別碼,也就是 Azure Resource Manager 的資源識別碼。
從 [受控識別] 清單,選取您想使用的身分識別,例如:
注意
預設選取的選項是系統指派的受控識別,即使您未啟用任何受控識別也一樣。
若要成功使用受控識別,您必須先在邏輯應用程式上啟用該身分識別。 在使用量邏輯應用程式上,您可以擁有系統指派或使用者指派的受控識別,但不能同時擁有。
如需詳細資訊,請參閱範例:使用受控識別來驗證內建觸發程序或動作。
支援受控識別驗證的受控連接器作業
在 [建立連線] 窗格的 [驗證] 清單中,選取 [受控識別],例如:
在下一個窗格,針對 [連線名稱],提供要用於連線的名稱。
針對驗證類型,根據您的受控連接器選擇下列其中一個選項:
單一驗證:這些連接器僅支援一種驗證類型,在此案例中為受控識別。
從 [受控識別] 清單中,選取目前啟用的受控識別。
當您準備好時,選取 [新建]。
多重驗證:這些連接器支援多個驗證類型,但您一次只能選取和使用一種類型。
這些步驟會繼續使用 Azure Blob 儲存體動作作為範例。
如需詳細資訊,請參閱範例:使用受控識別來驗證受控連接器觸發程序或動作。
範例:使用受控識別來驗證內建觸發程序或動作
內建 HTTP 觸發程序或動作可以使用您為邏輯應用程式資源啟用的系統指派身分識別。 一般來說,HTTP 觸發程序或動作會使用下列屬性來指定您想要存取的資源或實體:
屬性 | 必要 | 描述 |
---|---|---|
方法 | Yes | 您想要執行之作業所使用的 HTTP 方法 |
URI | Yes | 用於存取目標 Azure 資源或實體的端點 URL。 URI 語法通常包含目標 Azure 資源或服務的資源識別碼。 |
標題 | No | 您需要包含在連出要求中的任何標題值,例如內容類型 |
查詢 | No | 您需要或想要包含在要求中的任何查詢參數。 例如,特定作業的查詢參數,或您想要執行之作業的 API 版本。 |
驗證 | Yes | 用來驗證對 Azure 目標資源或服務存取的驗證類型 |
在特定的範例中,假設您想要在先前設定身分識別存取權的 Azure 儲存體帳戶中,於 Blob 上執行快照集 Blob 作業。 不過,Azure Blob 儲存體連接器目前不提供這種操作。 相反地,您可以使用 HTTP 動作或其他 Blob 服務 REST API 作業來執行這項作業。
重要
若要使用 Azure Blob 儲存體連接器和受控識別存取防火牆後方的 Azure 儲存體帳戶,請確定您也使用允許受信任Microsoft 服務存取的例外狀況設定儲存體帳戶。
若要執行快照集 Blob 作業,HTTP 動作會指定下列屬性:
屬性 | 必要 | 範例值 | 描述 |
---|---|---|---|
URI | Yes | https://<storage-account-name>/<folder-name>/{name} |
Azure 全域 (公用) 環境中 Azure Blob 儲存體檔案的資源識別碼會使用此語法 |
方法 | Yes | PUT |
快照集 Blob 操作所使用的HTTP 方法 |
標題 | 適用於 Azure 儲存體 | x-ms-blob-type = BlockBlob x-ms-version = 2024-05-05 x-ms-date = formatDateTime(utcNow(),'r') |
Azure 儲存體作業所需的 x-ms-blob-type 、x-ms-version 和 x-ms-date 標題值。 重要事項:在 Azure 儲存體的傳出 HTTP 觸發和動作要求中,標題需要您要執行的作業所用的 x-ms-version 屬性和 API 版本。 x-ms-date 必須是目前的日期。 否則,您的工作流程會失敗並出現 403 FORBIDDEN 錯誤。 若要取得所需格式的目前日期,您可以在範例值中使用運算式。 如需詳細資訊,請參閱下列文件: - 要求標題 - 快照集 Blob - Azure 儲存體服務的版本設定 |
查詢 | 僅適用於快照集 Blob 作業 | comp = snapshot |
此作業的查詢參數名稱和值。 |
在工作流程設計工具上,新增您想要的任何觸發程序,然後新增 HTTP 動作。
下列範例顯示範例 HTTP 動作,包含用於快照集 Blob 作業的所有先前描述屬性值:
在 HTTP 動作中,新增驗證屬性。 從 [進階參數] 清單,選取 [驗證]。
[驗證] 區段現在會出現在您的 HTTP 動作中。
注意
並非所有的觸發和動作都支援讓您新增驗證類型。 如需詳細資訊,請參閱支援驗證的觸發程序和動作驗證類型。
從 [驗證類型] 清單中,選取 [受控識別]。
從 [受控識別] 清單中,根據您的案例從可用的選項中選取。
此範例會繼續使用系統指派的受控識別。
在某些觸發程序和動作上會出現 [對象] 屬性,以便您可以設定目標 Azure 資源或服務的資源識別碼。
例如,若要驗證對全域 Azure 雲端中金鑰保存庫資源的存取權,您必須將 [對象] 屬性設定為「完全符合」下列資源識別碼:
https://vault.azure.net
如果您並未設定 [對象] 屬性,則根據預設,[對象] 屬性會使用
https://management.azure.com/
資源識別碼,也就是 Azure Resource Manager 的資源識別碼。重要
請確定目標資源識別碼「完全符合」Microsoft Entra ID 預期的值。 否則,您可能會收到
400 Bad Request
錯誤或401 Unauthorized
錯誤。 因此,如果資源識別碼包含任何後置斜線,請務必包含它們。 否則,請勿包含它們。例如,所有 Azure Blob 儲存體帳戶的資源識別碼都需要後置斜線。 不過,特定儲存體帳戶的資源識別碼不需要尾端斜線。 勾選 [支援 Microsoft Entra ID 的 Azure 服務的資源識別碼]。
這個範例會將 [物件] 屬性設定為
https://storage.azure.com/
,讓用於驗證的存取權杖對所有儲存體帳戶都有效。 不過,您也可以指定特定儲存體帳戶的根服務 URLhttps://<your-storage-account>.blob.core.windows.net
。如需透過 Microsoft Entra ID 授權 Azure 儲存體存取的詳細資訊,請參閱下列文件:
繼續按照您想要的方式建置工作流程。
範例:使用受控識別來驗證受控連接器觸發程序或動作
Azure Resource Manager 受控連接器具有名為 [讀取資源] 的動作,其可使用您在邏輯應用程式資源上啟用的受控識別。 此範例示範如何搭配受控連接器使用系統指派的受控識別。
在工作流程設計工具上,新增名為 [讀取資源] 的 Azure Resource Manager 動作。
在 [建立連線] 窗格的 [驗證] 清單中,選取 [受控識別],然後選取 [登入]。
注意
在其他連接器中,[驗證類型] 清單會改為顯示 Logic Apps 受控識別,因此請選取此選項。
請提供連線的名稱,然後選取您想要使用的受控識別。
如果您已啟用系統指派的身分識別,[受控識別] 清單會自動選取 [系統指派的受控識別]。 如果您改為啟用使用者指派的身分識別,則清單會自動選取使用者指派的身分識別。
在此範例中,系統指派的受控識別是唯一可用的選項。
注意
如果受控識別在您嘗試建立或變更連線時並未啟用,或受控識別在已啟用受控識別的連線仍然存在時遭到移除,則會收到錯誤,指出您必須啟用身分識別並授與目標資源的存取權。
當您準備好時,選取 [新建]。
設計工具成功建立連線之後,設計工具可以使用受控識別驗證來擷取任何動態值、內容或結構描述。
繼續按照您想要的方式建置工作流程。
使用受控識別的邏輯應用程式資源定義和連線
啟用和使用受控識別的連線,是僅適用於受控識別的特殊連線類型。 在執行階段,連線會使用邏輯應用程式資源上啟用的受控識別。 Azure Logic Apps 會檢查工作流程中的任何受控連接器作業是否已設定為使用受控識別,以及所有必要權限都存在,才能使用受控識別來存取連接器作業所指定的目標資源。 如果此檢查成功,Azure Logic Apps 會擷取與受控識別相關聯的 Microsoft Entra 權杖、使用該身分識別來驗證目標 Azure 資源的存取權,以及在工作流程中執行已設定的作業。
在使用量邏輯應用程式資源中,啟用使用者指派的身分識別時,連線設定會儲存在資源定義的 parameters
物件,該物件包含 $connections
物件,其中包含連線資源識別碼以及受控識別資源識別碼的指標。
這個範例顯示邏輯應用程式啟用系統指派的身分識別時的 parameters
物件組態:
"parameters": {
"$connections": {
"value": {
"<action-name>": {
"connectionId": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.Web/connections/<connector-name>",
"connectionName": "<connector-name>",
"connectionProperties": {
"authentication": {
"type": "ManagedServiceIdentity"
}
},
"id": "/subscriptions/<Azure-subscription-ID>/providers/Microsoft.Web/locations/<Azure-region>/managedApis/<managed-connector-type>"
}
}
}
}
這個範例顯示邏輯應用程式啟用使用者指派的受控識別時的 parameters
物件組態:
"parameters": {
"$connections": {
"value": {
"<action-name>": {
"connectionId": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.Web/connections/<connector-name>",
"connectionName": "<connector-name>",
"connectionProperties": {
"authentication": {
"type": "ManagedServiceIdentity",
"identity": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<resource-group-name>/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 連線,且此連線是由使用受控是別的受控連接器所建立,則需採取額外的步驟。
在 ARM 範本中,基礎連接器資源定義會根據您有使用量或標準邏輯應用程式資源,以及連接器顯示單一驗證或多重驗證選項而有所不同。
下列範例適用於使用量邏輯應用程式資源,並說明單一驗證連接器與多重驗證連接器之間的基礎連接器資源定義有何差異。
單一驗證
這個範例顯示連接器動作的基礎連線資源定義,該動作僅支援一個驗證類型,且在定義包含下列屬性的使用量邏輯應用程式工作流程中使用受控識別:
kind
屬性已針對取用邏輯應用程式設定為V1
。parameterValueType
屬性會設定為Alternative
。
{
"type": "Microsoft.Web/connections",
"apiVersion": "[providers('Microsoft.Web','connections').apiVersions[0]]",
"name": "[variables('connections_<connector-name>_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_<connector-name>_name')]",
"parameterValueSet": {},
"parameterValueType": "Alternative"
}
},
多重驗證
這個範例顯示連接器動作的基礎連線資源定義,該動作支援多個驗證類型,且在定義包含下列屬性的使用量邏輯應用程式工作流程中使用受控識別:
kind
屬性已針對取用邏輯應用程式設定為V1
。parameterValueSet
物件包含設定為managedIdentityAuth
的name
屬性,以及設定為空白物件的values
屬性。
{
"type": "Microsoft.Web/connections",
"apiVersion": "[providers('Microsoft.Web','connections').apiVersions[0]]",
"name": "[variables('connections_<connector-name>_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_<connector-name>_name')]",
"parameterValueSet":{
"name": "managedIdentityAuth",
"values": {}
},
"parameterValueType": "Alternative"
}
}
設定 API 連線驗證的進階控制
當您的標準邏輯應用程式工作流程使用由受控連接器建立的 API 連線時,Azure Logic Apps 會使用兩個連線來與目標資源通訊,例如您的電子郵件帳戶、金鑰保存庫等:
連線 #1 是使用內部權杖存放區的驗證來設定。
連線 #2 是使用目標資源的驗證來設定。
不過,當使用量邏輯應用程式工作流程使用 API 連線時,連線 #1 會從您擷取,而不需要任何組態選項。 使用標準邏輯應用程式資源時,您可以更充分掌控邏輯應用程式和工作流程。 根據預設,連線 #1 會自動設定為使用系統指派的身分識別。
如果您的案例需要更精細地控制驗證 API 連線,您可以選擇性地將連線 #1 的驗證從預設系統指派的身分識別變更為您已新增至邏輯應用程式的任何使用者指派的身分識別。 此驗證適用於每個 API 連線,因此您可將系統指派和使用者指派的身分識別混用於相同目標資源的不同連線。
在您標準邏輯應用程式的 connections.json 檔案中,該檔案儲存每個 API 連線的相關資訊,而每個連線定義都有兩個 authentication
區段,例如:
"keyvault": {
"api": {
"id": "/subscriptions/<Azure-subscription-ID>/providers/Microsoft.Web/locations/<Azure-region>/managedApis/keyvault"
},
"authentication": {
"type": "ManagedServiceIdentity",
},
"connection": {
"id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.Web/connections/<connector-name>"
},
"connectionProperties": {
"authentication": {
"audience": "https://vault.azure.net",
"type": "ManagedServiceIdentity"
}
},
"connectionRuntimeUrl": "<connection-runtime-URL>"
}
第一個
authentication
區段對應至連線 #1。本節描述用來與內部權杖存放區通訊的驗證。 在過去,此區段一律會針對部署至 Azure 且沒有可設定選項的應用程式設為
ManagedServiceIdentity
。第二個
authentication
區段對應至連線 #2。本節描述用來與目標資源通訊的驗證可能會根據您為該連線選取的驗證類型而有所不同。
為何變更權杖存放區的驗證?
在某些情況下,您可能想要跨多個邏輯應用程式資源共用和使用相同的 API 連線,但不會將每個邏輯應用程式資源的系統指派身分識別新增至目標資源的存取原則。
在其他情況下,您可能不想在邏輯應用程式上完全設定系統指派的身分識別,因此您可將驗證變更為使用者指派的身分識別,並完全停用系統指派的身分識別。
變更權杖存放區的驗證
在 Azure 入口網站中,開啟您的標準邏輯應用程式資源。
在資源功能表的 [工作流程] 之下,選取 [連線]。
在 [連線] 窗格中,選取 [JSON 檢視]。
在 JSON 編輯器中,尋找
managedApiConnections
區段,其中包含邏輯應用程式資源中所有工作流程的 API 連線。尋找您要在其中新增使用者指派受控識別的連線。
例如,假設您的工作流程具有 Azure Key Vault 連線:
"keyvault": { "api": { "id": "/subscriptions/<Azure-subscription-ID>/providers/Microsoft.Web/locations/<Azure-region>/managedApis/keyvault" }, "authentication": { "type": "ManagedServiceIdentity" }, "connection": { "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.Web/connections/<connector-name>" }, "connectionProperties": { "authentication": { "audience": "https://vault.azure.net", "type": "ManagedServiceIdentity" } }, "connectionRuntimeUrl": "<connection-runtime-URL>" }
在連線定義中,完成下列步驟:
尋找第一個
authentication
區段。 如果這個authentication
區段中沒有identity
屬性存在,則邏輯應用程式會隱含地使用系統指派的身分識別。使用此步驟中的範例來新增
identity
屬性。將屬性值設定為使用者指派身分識別的資源識別碼。
"keyvault": { "api": { "id": "/subscriptions/<Azure-subscription-ID>/providers/Microsoft.Web/locations/<Azure-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/<connector-name>" }, "connectionProperties": { "authentication": { "audience": "https://vault.azure.net", "type": "ManagedServiceIdentity" } }, "connectionRuntimeUrl": "<connection-runtime-URL>" }
在 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 角色指派。
在 Azure 入口網站中停用受控識別
若要移除受控識別的存取權,請從目標資源移除身分識別的角色指派,然後停用受控識別。
移除角色指派
下列步驟會從受控識別移除目標資源的存取權:
在 Azure 入口網站中,移至您想要針對受控識別移除存取權的目標 Azure 資源。
從目標資源的功能表中,選取 [存取控制 (IAM)]。 在工具列底下,選取 [角色指派]。
在角色清單中,選取您想要移除的受控識別。 在工具列上,選取 [移除]。
提示
如果 [移除] 選項已停用,您很可能沒有權限。 如需可讓您管理資源角色的權限的詳細資訊,請參閱 Microsoft Entra ID 中的系統管理員角色權限。
停用邏輯應用程式資源上的受控識別
在 Azure 入口網站中,開啟您的邏輯應用程式資源。
在邏輯應用程式資源功能表的 [設定] 下,選取 [身分識別],然後依照您的身分識別步驟執行:
選取 [系統指派]>[開啟]>[儲存]。 Azure 提示您確認時,請選取 [是]。
選取 [使用者指派] 和 [受控識別],然後選取 [移除]。 Azure 提示您確認時,請選取 [是]。
停用 ARM 範本中的受控識別
如果您使用 ARM 範本建立邏輯應用程式的受控識別,請將 identity
物件的 type
子屬性設定為 None
。
"identity": {
"type": "None"
}