Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
适用于:Azure 逻辑应用(消耗 + 标准)
为了对从逻辑应用工作流到由 Microsoft Entra 保护的 Azure 资源的连接进行身份验证,请设置托管标识。 此标识代表逻辑应用访问受保护的资源,并不需要存储和管理凭据、机密或访问令牌。 由于此行为,建议使用托管标识进行身份验证。 Azure管理此标识,以帮助确保身份验证详细信息安全。
在Azure 逻辑应用中,许多连接器都支持这两种托管标识类型:
- 系统分配 的标识
- 用户分配的身份标识
本指南演示如何完成以下任务:
- 在逻辑应用资源上设置系统分配的标识。
- 在逻辑应用资源上创建和设置用户分配的标识。
本指南提供Azure门户和Azure 资源管理器模板(ARM 模板)的步骤。 有关 Azure PowerShell、Azure CLI 和 Azure REST API,请参阅:
| 工具 | 文档 |
|---|---|
| Azure PowerShell |
-
系统分配 - 用户分配 |
| Azure CLI |
-
系统分配 - 用户分配 |
| Azure REST API |
-
系统分配 - 用户分配 |
有关详细信息,请参见:
先决条件
Azure 帐户和订阅。 获取Azure帐户。
必须为要访问的逻辑应用资源、托管标识和目标Azure资源使用相同的Azure订阅。
要使用的托管标识的逻辑应用资源和工作流。
有关详细信息,请参见:
要访问的目标Azure资源。
-
在本指南的后面,您必须为托管标识分配一个Azure角色,以便其在目标资源上拥有所需的访问权限。 对于此任务,您需要具有将 Azure 角色分配给 Microsoft Entra 租户中的主体的权限。
使用托管标识的注意事项
在设置和使用逻辑应用托管标识之前,请查看以下注意事项:
逻辑应用资源只有一个唯一的系统分配标识。
默认情况下,标准逻辑应用会自动启用系统分配的标识。
逻辑应用资源可以同时启用系统分配的标识和一个或多个用户分配的标识。
逻辑应用可以使用系统分配的标识或用户分配的标识,但不能同时使用这两者。
逻辑应用一次只能使用一个用户分配的标识。
逻辑应用资源可以跨其他逻辑应用资源共享相同的用户分配标识。
您可以在逻辑应用资源级别和连接级别使用托管标识。
有关详细信息,请参见:
支持托管标识的连接器
对于 Azure 逻辑应用 中的内置和托管连接器操作,以支持托管身份认证,它们必须支持使用 Microsoft Entra 的 OAuth。
下表显示了基于逻辑应用类型支持托管标识身份验证的示例连接器。
| 连接器类型 | 受支持的连接器 |
|---|---|
| 内置 | - Azure API 管理 - Azure 应用服务 - Azure Functions - HTTP - HTTP + Webhook Note:HTTP 操作可以使用系统分配的标识对Azure防火墙后面的Azure 存储帐户的连接进行身份验证。 但是,HTTP 操作不支持使用用户分配的标识对上述连接进行身份验证。 |
| 托管 | - Azure 应用服务 - Azure 自动化 - Azure Blob 存储 - Azure容器实例 - Azure Cosmos DB - Azure 数据资源管理器 - Azure 数据工厂 - Azure Data Lake - Azure 数字孪生 - Azure 事件网格 - Azure 事件中心 - Azure IoT Central V2 - Azure 密钥保管库 -Azure Monitor 日志 - Azure队列 - Azure 资源管理器 - Azure 服务总线 - Azure Sentinel - Azure 表存储 (Azure 表存储) - Azure VM - SQL Server |
有关更完整的列表,请参阅:
启用系统分配的身份(门户)
根据逻辑应用类型,按照Azure门户的相应步骤操作:
在消费逻辑应用资源上,手动启用系统分配的身份。
在 Azure 门户中,打开消费逻辑应用程序资源。
在逻辑应用边栏的 “设置”下,选择“ 标识”。
在“ 标识 ”页上的“ 系统分配”下,选择“ 开”,然后选择“ 保存”。 选择“是”以确认。
逻辑应用资源现在可以使用系统分配的标识。 此标识已在 Microsoft Entra ID 中注册,并由对象 ID 表示。
属性 价值 说明 对象(主体) ID < identity-resource-ID> 一个全局唯一标识符 (GUID),用于表示 Microsoft Entra 租户中的您的逻辑应用的系统分配标识。
启用系统分配的标识(ARM 模板)
若要自动创建和部署逻辑应用资源,请使用 ARM 模板。
在您的模板中,在根级别,逻辑应用资源定义需要一个包含identity属性并设为type的SystemAssigned对象,例如:
{
"apiVersion": "2016-06-01",
"type": "Microsoft.logic/workflows",
"name": "[variables('logicappName')]",
"location": "[resourceGroup().location]",
"identity": {
"type": "SystemAssigned"
},
"properties": {},
<...>
}
Azure创建逻辑应用资源定义时,identity 对象获取以下 principalId 和 tenantId 属性:
"identity": {
"type": "SystemAssigned",
"principalId": "<principal-ID>",
"tenantId": "<Entra-tenant-ID>"
}
| 属性 (JSON) | 价值 | 说明 |
|---|---|---|
principalId |
< principal-ID> | Microsoft Entra 用于管理在 Microsoft Entra 租户中托管身份的服务主体对象的全局唯一标识符(GUID)。 此 GUID 有时显示为“对象 ID”或 objectID。 |
tenantId |
< Microsoft-Entra-tenant-ID> | 表示逻辑应用当前所属的微软Entra租户的全局唯一标识符(GUID)。 在Microsoft Entra租户中,服务主体的名称与逻辑应用实例相同。 |
创建用户分配的标识(门户)
需要先将标识创建为单独的Azure资源,然后才能在消耗或标准逻辑应用资源上启用用户分配的标识。
在 Azure 门户搜索框中,输入
managed identities。 在结果列表中,选择“托管标识”。 截图显示 Azure 门户,其中选择了名为“Managed Identities”的选项。 在“托管标识”页工具栏上,选择“创建”。
输入托管标识信息,例如:
属性 需要 价值 说明 订阅 是 < Azure-subscription-name> Azure订阅名称。 资源组 是 < Azure-resource-group-name> Azure资源组名称。 创建新组或选择现有组。 此示例创建一个名为 fabrikam-managed-identities-RG的新组。区域 是 < Azure-region> 用于存储有关资源信息的 Azure 区域。 此示例使用 China North。Name 是 < 用户指定身份名称> 赋予用户分配的标识的名称。 此示例使用 Fabrikam-user-assigned-identity。完成后,选择“查看 + 创建”。
Azure验证信息后,Azure创建托管标识。 现在,可以将用户分配的标识添加到逻辑应用资源中。
将用户分配的标识添加到逻辑应用(门户)
创建用户分配的身份后,将该身份添加到您的消费型或标准型逻辑应用程序资源中。
在 Azure 门户中,打开 Consumption Logic App 资源。
在逻辑应用边栏的 “设置”下,选择“ 标识”。
在标识页上,选择用户分配,然后选择添加。
在“添加用户分配的托管标识”窗格上,请执行以下步骤:
你的逻辑应用现已与用户分配的标识相关联。
创建用户分配的标识(ARM 模板)
若要自动创建和部署逻辑应用资源,请使用 ARM 模板。 这些模板支持用于身份验证的用户分配的标识。
在模板的 resources 部分中,逻辑应用资源定义需要以下项:
- 一个
identity对象,其中type属性设置为UserAssigned。 - 一个指定用户分配的资源和名称的子
userAssignedIdentities对象。
以下示例演示具有非参数化PUT对象的 HTTP 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 引用 variables 的。 此变量引用用户指定身份的资源 ID。
{
"$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": {}
}
]
}
模板创建逻辑应用资源定义时,该 identity 对象包括以下 principalId 属性和 clientId 属性:
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<resource-ID>": {
"principalId": "<principal-ID>",
"clientId": "<client-ID>"
}
}
}
| 属性 (JSON) | 价值 | 说明 |
|---|---|---|
principalId |
< principal-ID> | Microsoft Entra用于管理Microsoft Entra租户中托管标识的服务主体对象的全局唯一标识符(GUID)。 此 GUID 有时显示为“对象 ID”或 objectID。 在Microsoft Entra租户中,服务主体的名称与逻辑应用实例相同。 |
clientId |
< 客户端 ID> | 表示逻辑应用的标识的全局唯一标识符(GUID),并指定要在运行时调用期间使用的标识。 |
有关 Azure 资源管理器 模板和 Azure Functions 的托管标识的更多信息,请参阅 ARM 模板 - Azure Functions。
授予对标识的资源访问权限
在使用托管标识进行身份验证之前,需要向目标受保护Azure资源授予标识访问权限。 设置访问权限的方式可能因目标资源而异,例如:
Azure基于角色的访问控制 (RBAC)
某些 Azure 资源,例如存储帐户,要求您使用 RBAC 在目标资源上分配角色,以确保您的标识具备必要的权限。
例如,若要向托管身份授予对 Azure 中 Blob 存储帐户的访问权限,需要将存储帐户资源上所需的 Azure 角色分配给您的身份。
本部分介绍如何使用 Azure 门户和Azure 资源管理器模板(ARM 模板)分配角色。
有关 Azure PowerShell、Azure CLI 和 Azure REST API,请参阅:
工具 文档 Azure PowerShell 添加角色分配 Azure CLI 添加角色分配 Azure REST API 添加角色分配 访问策略
其他 Azure 资源(例如密钥保管库)也允许你在目标资源上创建访问策略,并为你的身份提供所需的权限。
例如,可以在密钥保管库资源上创建访问策略,为托管标识分配必要的权限。
本部分介绍如何使用 Azure 门户创建访问策略。
有关资源管理器模板、Azure PowerShell和Azure CLI,请参阅:
工具 文档 Azure 资源管理器模板(ARM 模板) 密钥保管库 访问策略资源定义 Azure PowerShell 分配密钥保管库的访问策略 Azure CLI 分配密钥保管库的访问策略
对更高级别的资源的托管标识访问
如果托管标识有权访问同一订阅中的资源,则标识只能访问该资源,而不能访问该资源的父层次结构中的其他资源。 在工作流设计器中,某些触发器和操作要求先选择订阅或资源组,然后才能选择目标资源。 如果标识缺少对这些更高级别资源的访问,设计器不会显示目标资源。
若要解决此问题,请对每个需优先选择的更高级别资源给予标识访问权限。
在其他情况下,标识还需要访问已启用标识的资源。 例如,假设你有一个工作流操作,用于更新工作流的父逻辑应用上的应用程序设置。 如果操作使用托管标识访问这些设置,请向标识授予对该父逻辑应用的访问权限。
分配对托管标识的基于角色的访问权限(门户)
对于需要为托管标识分配角色的Azure资源,请执行以下步骤:
在 Azure 门户中,打开身份需要访问的资源。
此示例使用存储帐户作为目标Azure资源。
在资源边栏上,选择“访问控制”(IAM)。
在 访问控制(IAM) 页面工具栏上,选择“ 添加添加>角色分配”。
注意
如果无法选择 “添加角色分配”,则无权分配角色。 需要Microsoft Entra管理员权限,以便能够将角色分配给托管标识。
若要将所需角色分配给您的托管的身份,请执行以下步骤:
在Role选项卡上,找到并选择Microsoft Entra 内置角色,以便为标识提供对当前资源所需的访问权限,然后选择下一步。
此示例选择名为Storage Blob Data Contributor的角色。 此角色提供对Azure存储容器中的 blob 内容的写入访问权限。
有关详细信息,请参阅 访问 Azure 存储容器中 blob 内容的角色。
在“ 成员 ”选项卡上,按照以下步骤选择托管标识:
在“将访问权限分配到”下,选择“托管标识”。
对于 “添加成员”,请选择“ + 选择成员”。
在选择托管标识窗格中,选择Azure订阅。
根据托管标识,选择 托管标识 类型,然后选择托管标识。
托管标识类型 说明 用户分配的托管标识 在任何Azure资源上查看并选择已启用的用户分配托管标识。 所有系统分配的托管标识 在任何Azure资源上查看并选择已启用的系统分配托管标识。 逻辑应用 仅查看并选择逻辑应用资源上已启用的托管标识。 完成后,选择 “选择”。
有关详细信息,请参见:
在 Azure 门户中创建访问策略
对于想要为其托管标识创建访问策略的 Azure 资源,请执行以下步骤:
在 Azure 门户中,打开身份需要访问的资源。
此示例使用密钥保管库作为目标Azure资源。
在资源边栏上,选择 “访问策略”。
注意
如果资源没有 “访问策略 ”选项, 请改为分配角色。
在页面工具栏上,选择“ 创建 ”以打开 “创建访问策略 ”窗格。
在权限选项卡上,选择身份访问目标资源所需的权限。
例如,若要将标识用于Azure 密钥保管库托管连接器的 List 机密操作,标识需要List权限。 因此,在此方案中,在 “机密权限 ”列中,选择“ 列表”。
当您完成时,选择下一步。
在Principal选项卡上,选择托管标识。
此示例选择用户分配的标识。
跳过可选的“应用程序”步骤,选择“下一步”,然后完成创建访问策略。
使用托管标识对访问进行身份验证
本部分介绍如何使用托管标识对 支持托管标识身份验证的工作流触发器或操作的访问进行身份验证。 示例延续了之前使用 RBAC 和 Azure 存储帐户为托管标识设置访问权限的步骤。 尽管目标Azure资源可能有所不同,但一般步骤大致类似。
重要
如果您有一个 Azure 函数,并希望使用系统分配的身份,请先启用 Azure 函数的身份验证。
以下步骤演示如何使用 Azure 门户使用托管标识。 若要使用代码编辑器在基础 JSON 定义中使用托管标识,请参阅 托管标识身份验证。
在 Azure 门户中,打开消费逻辑应用程序资源。
添加 支持托管标识的触发器或操作(如果尚未添加)。
在触发器或操作上,执行以下步骤:
内置操作
这些步骤使用 HTTP 操作作为示例。
从 “高级参数 ”列表中选择 “身份验证 ”参数。
身份验证参数和身份验证类型列表都显示,例如:
从 “身份验证类型” 列表中选择“ 托管标识”。
“身份验证”部分现在显示以下选项:
参数 说明 托管标识 要使用的托管标识。 观众 在特定触发器和操作上显示,以便可以为Azure目标资源或服务设置资源 ID。
默认情况下,Audience 参数使用https://management.chinacloudapi.cn/资源 ID,这是Azure 资源管理器的资源 ID。从 托管标识 列表中选择所需的标识,例如:
注意
默认情况下, 系统分配的托管标识 是所选选项,即使未启用任何托管标识。 但是,若要成功使用托管标识,必须先在逻辑应用上启用该标识。 与标准逻辑应用不同,消耗逻辑应用不会自动启用系统标识。
有关详细信息,请参阅示例:使用托管标识对内置触发器或操作进行身份验证。
托管连接器操作
在“ 创建连接 ”窗格的 “身份验证 ”列表中选择 “托管标识”,例如:
在下一个窗格的“ 连接名称”中,输入用于连接的名称。
根据连接器选择以下选项之一:
单一身份验证:这些连接器仅支持一种身份验证类型,在本例中,即仅支持托管标识。
以下步骤使用 Azure Resource 操作作为示例:
从“托管标识”列表中,选择当前已启用的托管标识。
选择“新建”。
多重身份验证:这些连接器支持多种身份验证类型,但一次只能选择和使用一种类型。
以下步骤使用 Azure Blob 存储 操作作为示例:
有关详细信息,请参阅示例:使用托管标识对托管连接器触发器或操作进行身份验证。
示例:使用托管标识对内置触发器或操作进行身份验证
内置 HTTP 触发器或操作可以使用在逻辑应用资源上启用的系统分配标识。 通常, HTTP 触发器或操作使用以下属性来指定要访问的资源或实体:
| 属性 | 需要 | 说明 |
|---|---|---|
| 方法 | 是 | 要运行的操作的 HTTP 方法 |
| URI | 是 | 用于访问目标Azure资源或实体的终结点 URL。 URI 语法通常包括目标Azure资源或服务的资源 ID。 |
| 标头 | 否 | 需要包含在传出请求中的任何标头值,如内容类型 |
| 查询 | 否 | 需要或希望包含在请求中的任何查询参数。 例如,针对特定操作的查询参数,或针对要运行的操作的 API 版本的查询参数。 |
| 身份验证 | 是 | 用于对Azure目标资源或服务的访问进行身份验证的身份验证类型 |
作为一个具体示例,假设你想要在已经为您的身份设置访问权限的 Azure 存储 账户中的 blob 上运行 Snapshot Blob 操作。 但是,Azure Blob 存储 连接器当前不提供此操作。 相反,你可以使用 HTTP 操作或另一个 Blob 服务 REST API 操作来运行此操作。
重要
若要使用 Azure Blob 存储 连接器和托管标识访问防火墙后面的 Azure 存储帐户,请确保还设置存储帐户的例外,以允许受信任的 Microsoft 服务访问。
若要运行 快照 Blob 操作, HTTP 操作指定以下属性:
| 属性 | 需要 | 示例值 | 说明 |
|---|---|---|---|
| 方法 | 是 | 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 标头值。 Important:在传出的HTTP触发器和Azure 存储的操作请求中,标头需要 x-ms-version属性和您要运行的操作的API版本。 该值 x-ms-date 必须是当前日期。 否则,工作流将失败并显示 403 FORBIDDEN 错误。 若要获取所需格式的当前日期,可以在示例值中使用表达式。 有关详细信息,请参阅: - 请求标头 - 快照 Blob 适用于 Azure 存储 服务的 - 版本控制 |
| 查询 | 仅适用于快照 Blob 操作 | comp = snapshot |
操作的查询参数名称和值。 |
在工作流设计器上,添加所需的任何触发器,然后添加 HTTP 操作。
以下示例演示了一个示例 HTTP 操作,其中包含用于快照 Blob 操作的所有前面所述的属性值:
在 HTTP 操作中,从 “高级参数 ”列表中选择“ 身份验证”。
“身份验证”部分显示在 HTTP 操作中。
从 “身份验证类型” 列表中选择“ 托管标识”。
从 托管标识 列表中选择可用选项,具体选择取决于您的方案。
此示例将继续使用“系统分配的托管标识”。
某些触发器和操作显示 Audience 参数,以便可以输入目标Azure资源或服务的资源 ID。
例如,若要对全局Azure云中的 密钥保管库 资源的访问权限进行身份验证,请将 Audience 参数设置为 exactly以下资源 ID:
https://vault.azure.cn否则,默认情况下,Audience 参数使用
https://management.chinacloudapi.cn/资源 ID,这是Azure 资源管理器的资源 ID。重要
目标资源 ID 必须完全匹配Microsoft Entra ID 预期的值。 否则,可能会收到 400 错误请求 错误或 401 未授权 错误。 如果资源 ID 包含任何末尾斜杠,请包括它们。 如果没有,请不要包含它们。
例如,所有“Azure Blob 存储”帐户的资源 ID 都需要尾部斜杠。 但是,特定存储帐户的资源 ID 不需要尾部反斜杠。 检查 支持 Microsoft Entra ID 的 Azure 服务 的资源 ID。
以下示例将 Audience 参数设置为
https://storage.azure.com/。 此值表示身份验证的访问令牌对所有存储帐户都有效。 对于特定的存储帐户,请指定根服务 URLhttps://<your-storage-account>.blob.core.chinacloudapi.cn。有关详细信息,请参见:
- 使用 Microsoft Entra ID 授权访问 Azure Blob 和队列
- 使用 OAuth 授权访问 Azure 存储
根据您的场景继续构建工作流。
示例:使用托管标识对托管连接器触发器或操作进行身份验证
Azure 资源管理器托管连接器具有名为读取资源的操作,可以使用在逻辑应用资源上启用的托管标识。 此示例显示了如何将系统分配的托管标识与托管连接器结合使用。
在工作流设计器上,添加名为 read a resource 的 Azure 资源管理器 操作。
在“ 创建连接 ”窗格中,从 “身份验证 ”列表中选择“ 托管标识”,然后选择“ 登录”。
注意
在某些连接器中, 身份验证类型 列表改为显示 逻辑应用托管标识 。 如果方案显示此选项,请选择此选项。
Screenshot 显示消耗工作流、Azure 资源管理器 操作、已打开的身份验证列表,并选择了托管标识的选项。 输入连接的名称,然后选择所需的托管标识。
如果你启用了系统分配的标识,“托管标识”列表将自动选择“系统分配的托管标识”。 反之,如果你启用了用户分配的标识,该列表会自动选择用户分配的标识。
在本例中,“系统分配的托管标识”是唯一可用的选择。
注意
如果在尝试创建或更改连接时未启用托管标识,或者当托管标识启用托管标识的连接仍然存在时删除托管标识,则会收到一个错误,指出必须启用标识并授予对目标资源的访问权限。
完成后,选择“新建”。
创建连接后,设计器可以使用托管标识身份验证提取任何动态值、内容或架构。
根据您的场景继续构建工作流。
逻辑应用资源定义中与托管标识的连接
经过身份验证的托管标识连接类型是一种仅适用于托管标识的特殊连接类型。 在工作流运行时,连接使用在逻辑应用资源上启用的托管标识。 Azure 逻辑应用检查工作流中的任何托管连接器操作是否使用托管标识,以及是否存在所有必需的权限来使用托管标识来访问相应的目标资源。 如果此检查成功通过,Azure 逻辑应用获取与托管标识关联的Microsoft Entra令牌,使用该标识对目标Azure资源的访问权限进行身份验证,并在工作流中执行相应的操作。
在消耗逻辑应用资源中,将连接配置保存在资源定义的 parameters 对象中。 此对象包含包含 $connections 指向连接资源 ID 的指针以及启用用户分配标识时托管标识的资源 ID 的对象。
以下示例演示 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 模板中,根据您是使用 Consumption 还是 Standard 类型的逻辑应用资源,以及连接器显示的单次身份验证选项或多次身份验证选项的不同,基础连接器资源定义也会不同。
以下示例适用于消耗逻辑应用资源。 它们展示了基础连接器资源定义在单身份验证连接器与多身份验证连接器之间有何差异。
单一身份验证
此示例显示了连接器操作的基础连接资源定义,该操作仅支持一种身份验证类型,并在消耗逻辑应用工作流中使用托管标识。 定义包括以下属性:
在消耗工作流中,
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'), '<connector-name>')]"
},
"authenticatedUser": {},
"connectionState": "Enabled",
"customParameterValues": {},
"displayName": "[variables('connections_<connector-name>_name')]",
"parameterValueSet": {},
"parameterValueType": "Alternative"
}
},
多种身份验证方法
此示例显示了连接器操作的基础连接资源定义,该操作支持多个身份验证类型,并在消耗逻辑应用工作流中使用托管标识。 定义包括以下属性:
在消耗工作流中,
kind属性设置为V1。parameterValueSet对象包括一个设置为name的managedIdentityAuth属性和一个设置为空对象的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'), '<connector-name>')]"
},
"authenticatedUser": {},
"connectionState": "Enabled",
"customParameterValues": {},
"displayName": "[variables('connections_<connector-name>_name')]",
"parameterValueSet": {
"name": "managedIdentityAuth",
"values": {}
}
}
}
为 API 连接身份验证设置高级控制
当标准逻辑应用工作流使用 托管连接器创建的 API 连接时,Azure 逻辑应用使用两个连接来与目标资源(例如电子邮件帐户或密钥保管库)通信:
连接 #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.cn",
"type": "ManagedServiceIdentity"
}
},
"connectionRuntimeUrl": "<connection-runtime-URL>"
}
第一个
authentication对象映射到连接 #1。此对象描述用于与内部令牌存储通信的身份验证。 过去,对于部署到Azure且没有可配置选项的应用,
type属性始终设置为ManagedServiceIdentity。第二个
authentication对象映射到连接 #2。此对象描述用于与目标资源通信的身份验证,根据为该连接选择的身份验证类型而异。
为什么需要更改令牌存储的身份验证?
在某些情况下,你可能想要跨多个逻辑应用资源共享和使用相同的 API 连接,但不希望将每个逻辑应用资源的系统分配标识添加到目标资源的访问策略。
在其他方案中,你可能不希望在逻辑应用上设置系统分配的标识。 若要改用用户分配的标识,可以将身份验证更改为用户分配的标识,并完全禁用系统分配的标识。
更改令牌存储的身份验证
在 Azure 门户中,打开标准逻辑应用资源。
在资源边栏的 “工作流”下,选择“ 连接”。
在“连接”窗格中,选择“JSON 视图”。
在 JSON 编辑器中,查找
managedApiConnections对象。 此对象包含逻辑应用资源中所有工作流的 API 连接。查找要添加用户分配的托管标识的连接。
例如,假设工作流具有Azure 密钥保管库连接:
"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.cn", "type": "ManagedServiceIdentity" } }, "connectionRuntimeUrl": "<connection-runtime-URL>" }在连接定义中,执行以下步骤:
查找第一个
authentication对象。 如果此identity对象中不存在authentication任何属性,则逻辑应用隐式使用系统分配的标识。根据此步骤中的示例添加
identity属性。将该属性值设置为用户分配标识的资源 ID。
"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.cn", "type": "ManagedServiceIdentity" } }, "connectionRuntimeUrl": "<connection-runtime-URL>" }在 Azure 门户网站中,转到目标资源,并根据目标资源的需求授予用户分配的托管标识访问权限。
例如,对于Azure 密钥保管库,请将标识添加到密钥保管库的访问策略。 对于Azure Blob 存储,请将标识所需的角色分配给存储帐户。
禁用托管身份
若要停止使用托管标识进行身份验证,请执行以下步骤:
在逻辑应用资源上, 禁用系统分配的标识或删除用户分配的标识。
当您在逻辑应用资源上关闭托管标识时,该标识将无法再请求访问其先前有权访问的 Azure 资源。
注意
如果禁用系统分配的标识,则使用逻辑应用工作流中的标识的所有连接在运行时都会停止工作,即使再次启用标识也是如此。
发生此行为的原因是,禁用标识会删除其对象 ID。 每次启用标识时,Azure都会生成具有不同唯一对象 ID 的标识。 若要解决此问题,请重新创建连接,以便它们使用当前系统分配标识的当前对象 ID。
尽量避免禁用系统分配的标识。 若要删除标识对Azure资源的访问权限,请从目标资源中删除标识的角色分配。 如果删除逻辑应用资源,Azure会自动从Microsoft Entra ID中删除托管标识。
以下部分演示如何使用 Azure 门户和 Azure 资源管理器 模板(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 ID0 中的Administrator 角色权限。
在逻辑应用资源上禁用托管标识
在 Azure 门户中,打开逻辑应用资源。
在逻辑应用资源边栏的 “设置”下,选择“ 标识”,然后按照标识的步骤操作:
选择“系统分配”>“关闭”>“保存”。 当Azure提示你确认时,请选择Yes。
选择“用户分配”和托管标识,然后选择“删除”。 当Azure提示你确认时,请选择Yes。
在 ARM 模板中禁用托管标识
如果使用 ARM 模板创建了逻辑应用的托管标识,请将 identity 对象的 type 子属性设置为 None。
"identity": {
"type": "None"
}