在 Azure 逻辑应用中确保工作流访问和数据的安全

Azure 逻辑应用 通过使用 Azure 存储 存储并自动加密静态数据。 这种加密通过使用Microsoft管理的密钥保护您的数据,帮助您实现组织的安全和合规承诺。 有关详细信息,请参阅静态数据的 Azure 存储加密。

本指南展示了如何在 Azure 逻辑应用 的以下主要领域进一步保护和保护敏感数据:

任务 跳转到
控制谁可以管理和编辑工作流程 安全逻辑应用操作
在运行历史中隐藏输入、输出、密码和秘密信息 安全的运行历史数据
保护跨环境的参数值 安全参数输入
了解认证类型 审查工作流程操作的认证类型
验证启动工作流程的呼叫 保护呼入电话安全
对您的工作流发送的调用进行身份验证 安全外呼
阻止特定连接器 阻止连接
满足隔离要求 隔离指南
审查安全基线 Azure 逻辑应用的 Azure 安全基线

有关Azure范围安全的信息,请参见:

使用 Azure RBAC 安全地访问逻辑应用操作

在 Azure 中,基于角色的访问控制(RBAC)控制谁有权限和访问资源。 在别人创建或管理逻辑应用、工作流和连接之前,你需要先分配一个提供必要权限的角色。 你可以设置权限,只有特定用户或组能执行特定任务,比如管理、编辑和查看逻辑应用。 为了控制他们的权限,可以为有权访问你 Azure 订阅的成员分配内置或自定义的角色。

Important

为了减少攻击面,始终根据 最小权限原则分配角色。

在分配角色之前,请回顾以下最佳实践、考虑因素及影响:

  • 允许用户、应用和托管身份只访问他们完成工作所需的数据和操作。

  • 仅向 受信任的主体 分配贡献者级角色或工作流编辑权限,并遵循最小权限原则。

  • 仅为逻辑应用工作流的受管身份分配完成其工作所需的最低权限。

  • 贡献者或工作流编辑权限等同于持有分配给该工作流程的每个 托管身份 的权限。

  • 任何具有“参与者”或“工作流编辑”权限的用户都可以设置 HTTP 内置操作,使用托管标识为任何受众请求标识持有者令牌。 他们可以用这些令牌向任何端点或目的地发送请求。 平台不限制目的地。 持有人令牌有效期为一小时,可以访问其身份能访问的任何 Azure API。

Azure 逻辑应用 具有以下特定角色,具体取决于你使用的是消耗型工作流还是标准型工作流:

消耗型工作流
角色 Description
逻辑应用贡献者 可以管理逻辑应用工作流,但不能更改对它们的访问权限。
逻辑应用操作员 可以读取、启用和禁用逻辑应用工作流,但不能对其进行编辑或更新。
参与者 具有管理所有资源的完全访问权限,但不能在 Azure RBAC 中分配角色或在 Azure 蓝图中管理分配,也不能共享映像库。

举个例子,假设你需要使用一个你没创建的逻辑应用工作流程,并验证该逻辑应用工作流程中使用的连接。 您的 Azure 订阅需要对包含该逻辑应用资源的资源组拥有 贡献者 权限。 如果你创建了 Logic 应用资源,你会自动获得 贡献者 访问权限。

为了防止他人更改或删除你的逻辑应用工作流程,可以使用 Azure 资源锁。 此功能可防止其他人更改或删除生产资源。 有关连接安全性的详细信息,请参阅 Azure 逻辑应用中的连接配置和连接安全性和加密。

标准工作流
角色 Description
逻辑应用标准阅读器 对标准型逻辑应用和工作流中的所有资源(包括工作流运行及其历史记录)具有只读访问权限。
逻辑应用标准操作符 有权启用、重新提交和禁用工作流,并为标准逻辑应用创建与服务、系统和网络的连接。 操作员角色可以在 Azure 逻辑应用平台上执行管理和支持任务,但无权编辑工作流或设置。
逻辑应用标准开发人员 有权为标准逻辑应用创建和编辑工作流、连接和设置。 开发者角色无权在工作流范围之外进行更改,例如配置虚拟网络集成等应用程序范围的更改。 不支持应用服务计划。
逻辑应用标准参与者 有权管理标准逻辑应用的各个方面,但不能更改访问权限或所有权。

访问工作流程运行历史

在工作流运行过程中,所有数据在 传输过程中 通过传输层安全(TLS)和 静止状态进行加密。 逻辑应用运行完成后,您可以查看此运行的历史记录,包括所执行步骤的状态、持续时间、输入和输出。 此丰富的详细信息可让你深入了解逻辑应用的运行方式,以及开始解决出现的任何问题的位置。

查看逻辑应用的运行历史记录时,Azure 逻辑应用会验证访问权限,然后提供指向每个运行的请求和响应的输入和输出的链接。 但是,对于处理任何密码、机密、密钥或其他敏感信息的操作,你需要阻止他人查看和访问该数据。 例如,如果逻辑应用从 Azure 密钥保管库 获取机密,以便在对 HTTP 操作进行身份验证时使用,则你需要在视图中隐藏该机密。

要控制工作流程运行历史中的输入和输出访问,请使用以下选项:

按 IP 地址范围限制访问

可以限制对逻辑应用工作流的运行历史记录中的输入和输出的访问,以便只有来自特定 IP 地址范围的请求才能查看该数据。

例如,若要阻止任何人访问输入和输出,请指定类似于 0.0.0.0-0.0.0.0 的 IP 地址范围。 只有具有管理员权限的人员才能删除此限制,这样就有可能“实时”访问逻辑应用工作流中的数据。 有效的IP范围使用以下格式:x.x.x.x/x 或 x.x.x.x-x.x.x.x.x。

若要指定允许的 IP 范围,请执行以下针对 Azure 门户或 Azure 资源管理器模板中的消费型或标准逻辑应用的步骤:

消耗型工作流
  1. 在 Azure 门户中,打开设计器中的消耗逻辑应用工作流。

  2. 在Logic应用侧边栏的 设置里,选择 工作流程设置。

  3. 在“访问控制配置”部分中,在“允许的入站 IP 地址”下,从“触发器访问选项”列表中选择“特定 IP 范围”。

  4. 在 内容的 IP 范围 框中,指定可从输入和输出访问内容的 IP 地址范围。

标准工作流
  1. 在 Azure portal 中,打开标准逻辑应用资源。

  2. 在逻辑应用侧边栏的设置下,选择网络。

  3. 在“入站流量配置”部分,选择“公用网络访问”旁边的“启用且没有访问限制”。

  4. 在“访问限制”页上,在“应用访问”下,选择“从选择虚拟网络和 IP 地址启用”。

  5. 在“站点访问和规则”下,在“主站点”选项卡上,添加一个或多个规则以“允许”或“拒绝”来自特定 IP 范围的请求。 还可以使用 HTTP 标头筛选器设置和转发设置。 有效的IP范围使用以下格式:x.x.x.x/x 或 x.x.x.x-x.x.x.x.x。

    有关详细信息,请参阅在 Azure 逻辑应用(标准型)中阻止入站 IP 地址。

使用模糊处理保护运行历史记录中的数据

许多触发器和操作都有设置来安全保护逻辑应用程序的运行历史中的输入、输出或两者。 所有 托管连接器 和 自定义连接器 都支持这些选项。 但是,以下内置操作不支持这些选项:

安全输入 - 不支持 安全输出 - 不受支持
追加到数组变量
追加到字符串变量
递减变量
对于每个
如果
递增变量
初始化变量
复发
范围
设置变量
交换机
终止
直到
追加到数组变量
追加到字符串变量
撰写
递减变量
对于每个
如果
递增变量
初始化变量
解析 JSON
复发
响应
范围
设置变量
交换机
终止
直到
Wait

保护输入和输出时的注意事项

在使用这些设置来帮助保护此数据之前,请查看以下注意事项:

  • 当您在触发器或操作上隐藏输入或输出时,Azure 逻辑应用不会将受保护的数据发送到 Azure Log Analytics。 此外,不能将跟踪的属性添加到该触发程序或操作中以便进行监控。

  • 用于处理工作流历史记录的 Azure 逻辑应用 API 不会返回受保护的输出。

  • 若要保护可遮盖输入或显式遮盖输出的操作的输出,请在该操作中手动打开“安全输出”。

  • 请确保在下游作中启用 “安全输入 ”或“ 安全输出 ”,预期运行历史记录会掩盖该数据。

    安全输出设置

    在触发器或操作中手动启用“安全输出”时,Azure 逻辑应用会隐藏运行历史记录中的这些输出。 如果下游操作显式使用这些安全输出作为输入,则 Azure 逻辑应用会隐藏运行历史记录中的此操作的输入,但不会启用操作的“安全输入”设置。

    图示展示了安全输出如何影响作为工作流运行历史中下游动作隐藏输入的可见性。

    Compose、Parse JSON 和响应操作仅具有安全输入设置。 启用后,此设置也会隐藏这些操作的输出。 如果这些操作显式使用上游安全输出作为输入,则 Azure 逻辑应用会隐藏这些操作的输入和输出,但不会启用这些操作的“安全输入”设置。 如果下游操作显式使用 Compose、Parse JSON 或响应操作的隐藏输出作为输入,Azure 逻辑应用不会隐藏此下游操作的输入和输出。

    图示展示了安全输出如何影响作为Compose、Parse JSON和Response动作输入的可见性。

    安全输入设置

    在触发器或操作中手动打开“安全输入”时,Azure 逻辑应用会隐藏运行历史记录中的这些输入。 如果下游操作显式使用来自该触发器或操作的可见输出作为输入,则 Azure 逻辑应用将在运行历史记录中隐藏此下游操作的输入,但不会在此操作中启用“保护输入”,并且不会隐藏此操作的输出。

    图示显示安全触发或动作输入如何影响下游工作流程操作的可见性。

    如果 Compose、Parse JSON 和 Response 动作显式使用了具有安全输入的触发器或动作的可见输出,Azure 逻辑应用 会隐藏这些动作的输入和输出,但不会启用这些动作的 Secure Inputs 设置。 如果下游操作显式使用 Compose、Parse JSON 或响应操作的隐藏输出作为输入,Azure 逻辑应用不会隐藏此下游操作的输入和输出。

    图示展示了安全输入如何影响 Compose、解析 JSON 和响应工作流程操作。

保护设计器中的输入和输出

  1. 在 Azure 门户中,在设计器中打开逻辑应用工作流。

  2. 在设计器中,选择要保护敏感数据的触发器或操作。

  3. 在打开的信息窗格中,选择“ 设置”,然后展开“ 安全性”。

    显示 Azure 门户、工作流设计器以及其设置已打开的触发器或操作的屏幕截图。

  4. 打开 安全输入、 安全输出或两者兼有。

    截图显示了一个启用了动作安全输入或安全输出设置的工作流程。

    触发器或动作现在会在标题栏中显示锁图标。 任何代表先前操作中安全输出的令牌也显示锁定图标。 例如,在后续操作中,为动态内容列表中的安全输出选择令牌后,该令牌将显示一个锁图标。

    截图显示工作流程中,后续动作的动态内容列表打开,以及前一个动作的安全输出令牌,带有锁定图标。

  5. 工作流运行后,可以查看该运行的历史记录。

    1. 在逻辑应用边栏上,选择“概述”。

    2. 在 “运行历史记录”下,选择要查看的运行。

    3. 在工作流运行历史记录窗格中,选择您要查看的操作。

      如果已选择同时隐藏输入和输出,则这些值现在会隐藏。

      截图显示了标准工作流程运行历史视图,隐藏了输入和输出。

在代码视图中保护输入和输出

在基础触发器或操作定义中,使用以下两个值中的一个或两个值添加或更新 runtimeConfiguration.secureData.properties 数组:

  • "inputs":在运行历史记录中保护输入。
  • "outputs":保护运行历史记录中的输出。
"<trigger-or-action-name>": {
   "type": "<trigger-or-action-type>",
   "inputs": {
      <trigger-or-action-inputs>
   },
   "runtimeConfiguration": {
      "secureData": {
         "properties": [
            "inputs",
            "outputs"
         ]
      }
   },
   <other-attributes>
}

安全访问跨环境中的参数输入

如果跨不同的环境进行部署,请考虑参数化工作流定义中因这些环境而异的值。 通过使用 Azure 资源管理器 模板部署你的逻辑应用,你可以避免硬编码数据,通过定义安全参数保护敏感数据,并通过参数文件将这些数据作为独立输入传递到模板的参数中。

例如,如果使用 Microsoft Entra ID OAuth 对 HTTP 操作进行身份验证,则可以定义并保护接受用于身份验证的客户端 ID 和客户端机密的参数。 若要在逻辑应用工作流中定义这些参数,请使用逻辑应用的工作流定义中的 parameters 部分,以及用于部署的资源管理器模板。 为了帮助保护编辑逻辑应用或查看运行历史记录时不希望显示的参数值,请使用 securestring 或 secureobject 类型定义参数,并根据需要使用编码。 具有此类型的参数不会随资源定义一起返回,在部署后查看资源时无法访问。 若要在运行时访问这些参数值,请在工作流定义中使用 @parameters('<parameter-name>') 表达式。 此表达式仅在运行时计算,并由 工作流定义语言描述。

注意

如果你在请求头或请求正文中使用参数,这个参数在你查看工作流程的运行历史和发出的 HTTP 请求时可能会被看到。 请务必同时相应地设置内容访问策略。 还可以使用 模糊处理 来隐藏运行历史记录中的输入和输出。

默认情况下,Authorization 标头在输入或输出中是不可见的。 如果你在那里使用秘密,你就无法取回那个秘密。

有关详细信息,请参阅本文中的以下部分:

如果使用资源管理器模板自动部署逻辑应用,则可以使用和securestring类型定义在部署时评估的安全secureobject。 若要定义模板参数,请使用模板的顶级 parameters 部分,该部分与工作流定义的 parameters 部分不同。 若要提供模板参数的值,请使用单独的 参数文件。

例如,如果使用机密,则可以定义并使用可在部署时从 Azure 密钥保管库 检索这些机密的受保护模板参数。 然后,可以在参数文件中引用密钥保管库和秘密。 有关详细信息,请参见:

在工作流定义中保护参数(消耗型工作流)

若要保护逻辑应用的工作流定义中的敏感信息,请使用受保护的参数,以便在保存逻辑应用工作流后此信息不可见。 例如,假设你有一个需要基本认证的HTTP操作,使用用户名和密码。 在工作流定义中,parameters 节使用 basicAuthPasswordParam 类型定义 basicAuthUsernameParam 和 securestring 参数。 然后,操作定义在 authentication 节中引用这些参数。

Important

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

"definition": {
   "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
   "actions": {
      "HTTP": {
         "type": "Http",
         "inputs": {
            "method": "GET",
            "uri": "https://www.microsoft.com",
            "authentication": {
               "type": "Basic",
               "username": "@parameters('basicAuthUsernameParam')",
               "password": "@parameters('basicAuthPasswordParam')"
            }
         },
         "runAfter": {}
      }
   },
   "parameters": {
      "basicAuthPasswordParam": {
         "type": "securestring"
      },
      "basicAuthUsernameParam": {
         "type": "securestring"
      }
   },
   "triggers": {
      "manual": {
         "type": "Request",
         "kind": "Http",
         "inputs": {
            "schema": {}
         }
      }
   },
   "contentVersion": "1.0.0.0",
   "outputs": {}
}

保护 Azure 资源管理器模板中的参数(消耗工作流)

逻辑应用资源和工作流的资源管理器模板包含多个 parameters 部分。 若要保护密码、密钥、机密和其他敏感信息,请使用 securestring 或 secureobject 类型在模板级别和工作流定义级别定义安全参数。 然后,可以将这些值存储在 Azure 密钥保管库 中,并使用 参数文件 引用密钥保管库和机密。 然后,模板会在部署时检索该信息。 有关详细信息,请参阅 使用 Azure 密钥保管库 在部署时传递敏感值。

Important

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

此列表包含有关以下 parameters 部分的详细信息:

  • 在模板的顶层,parameters 节定义了模板在 部署时使用的值参数。 例如,这些值可能包含特定部署环境的连接字符串。 然后,你可将这些值存储在单独的参数文件中,以方便更改这些值。

  • 在逻辑应用的资源定义中,但位于工作流定义外,parameters 节指明工作流定义参数的值。 在此节中,可以使用引用模板参数的模板表达式来分配这些值。 这些表达式将在部署时评估。

  • 在工作流定义中,parameters 部分定义了逻辑应用工作流在运行时使用的参数。 然后,你可以使用在运行时计算的工作流定义表达式,在逻辑应用工作流中引用这些参数。

此示例模板包含使用 securestring 类型的多个受保护参数定义:

参数名称 Description
TemplatePasswordParam 一个模板参数接受一个密码,然后将其传递到工作流定义的 basicAuthPasswordParam 参数中。
TemplateUsernameParam 一个模板参数,接受用户名,然后将其传递到工作流定义的 basicAuthUserNameParam 参数中
basicAuthPasswordParam 一个接受在 HTTP 操作中用于基本身份验证的密码的工作流定义参数。
basicAuthUserNameParam 一个工作流定义参数,它接受 HTTP 操作中用于基本身份验证的用户名
{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "LogicAppName": {
         "type": "string",
         "minLength": 1,
         "maxLength": 80,
         "metadata": {
            "description": "Name of the Logic App."
         }
      },
      "TemplatePasswordParam": {
         "type": "securestring"
      },
      "TemplateUsernameParam": {
         "type": "securestring"
      },
      "LogicAppLocation": {
         "type": "string",
         "defaultValue": "[resourceGroup().location]",
         "allowedValues": [
            "[resourceGroup().location]",
            "chinaeast2",
            "chinanorth2",
	         "chinanorth3"
         ],
         "metadata": {
            "description": "Location of the Logic App."
         }
      }
   },
   "variables": {},
   "resources": [
      {
         "name": "[parameters('LogicAppName')]",
         "type": "Microsoft.Logic/workflows",
         "location": "[parameters('LogicAppLocation')]",
         "tags": {
            "displayName": "LogicApp"
         },
         "apiVersion": "2016-06-01",
         "properties": {
            "definition": {
               "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
               "actions": {
                  "HTTP": {
                     "type": "Http",
                     "inputs": {
                        "method": "GET",
                        "uri": "https://www.microsoft.com",
                        "authentication": {
                           "type": "Basic",
                           "username": "@parameters('basicAuthUsernameParam')",
                           "password": "@parameters('basicAuthPasswordParam')"
                        }
                     },
                  "runAfter": {}
                  }
               },
               "parameters": {
                  "basicAuthPasswordParam": {
                     "type": "securestring"
                  },
                  "basicAuthUsernameParam": {
                     "type": "securestring"
                  }
               },
               "triggers": {
                  "manual": {
                     "type": "Request",
                     "kind": "Http",
                     "inputs": {
                        "schema": {}
                     }
                  }
               },
               "contentVersion": "1.0.0.0",
               "outputs": {}
            },
            "parameters": {
               "basicAuthPasswordParam": {
                  "value": "[parameters('TemplatePasswordParam')]"
               },
               "basicAuthUsernameParam": {
                  "value": "[parameters('TemplateUsernameParam')]"
               }
            }
         }
      }
   ],
   "outputs": {}
}

支持身份验证的连接器的身份验证类型

下表列出了连接器操作中可用的身份验证类型,你可以在其中选择身份验证类型:

身份验证类型 Logic 应用及支持的连接器
基本 Azure API 管理、Azure 应用服务、HTTP、HTTP + Swagger、HTTP Webhook
客户端证书 Azure API 管理、Azure 应用服务、HTTP、HTTP + Swagger、HTTP Webhook
Active Directory OAuth (具有 Microsoft Entra ID 的 OAuth 2.0) - 消耗:Azure API 管理、Azure 应用服务、Azure Functions、HTTP、HTTP + Swagger、HTTP Webhook

- 标准:Azure 自动化、Azure Blob 存储、Azure 事件中心、Azure 队列、Azure 服务总线、Azure 表、HTTP、HTTP Webhook、SQL Server
原始 Azure API 管理、Azure 应用服务、Azure Functions、HTTP、HTTP + Swagger、HTTP Webhook
托管标识 内置连接器:

- 消耗:Azure API 管理、Azure 应用服务、Azure Functions、HTTP、HTTP Webhook

- 标准:Azure 自动化、Azure Blob 存储、Azure 事件中心、Azure 队列、Azure 服务总线、Azure 表、HTTP、HTTP Webhook、SQL Server

注意:目前,大多数基于服务提供商的内置连接器不支持选择用户分配的托管标识进行身份验证。

托管连接器:Azure 应用服务、Azure 自动化、Azure Blob 存储、Azure 容器实例、Azure Cosmos DB、Azure 数据资源管理器、Azure 数据工厂、Azure 数据湖、Azure 事件网格、Azure 事件中心、Azure IoT Central V2、Azure IoT Central V3、Azure 密钥保管库、Azure Log Analytics、Azure 队列、Azure 资源管理器、Azure 服务总线、Azure Sentinel、Azure 表存储、Azure 虚拟机、使用 Microsoft Entra ID 的 HTTP、SQL Server

Important

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

对请求触发器的入站呼叫访问权限

逻辑应用通过基于请求的触发器(例如请求触发器或 HTTP Webhook 触发器)接收的入站调用支持加密,并至少使用传输层安全性 (TLS) 1.2(前称安全套接字层 (SSL))进行保护。 Azure 逻辑应用在收到对 请求 触发器的入站调用或对 HTTP Webhook 触发器或操作的回调时,会强制执行此版本。

对于入站调用,请使用以下密码套件:

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384。
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256。
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384。
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384。
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256。
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384。
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256。

Important

为了向后兼容,Azure 逻辑应用目前支持一些较旧的密码套件。 但是,开发新应用时 不要使用 较旧的密码套件,因为将来 可能不支持 此类套件。

例如,如果你在 Azure 逻辑应用中检查 TLS 握手消息,或者使用逻辑应用 URL 上的安全工具,则可能会找到以下密码套件。 同样, 不要使用这些 较旧的套件:

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA。
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA。
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA。
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA。
  • TLS_RSA_WITH_AES_256_GCM_SHA384。
  • TLS_RSA_WITH_AES_128_GCM_SHA256。
  • TLS_RSA_WITH_AES_256_CBC_SHA256。
  • TLS_RSA_WITH_AES_128_CBC_SHA256。
  • TLS_RSA_WITH_AES_256_CBC_SHA。
  • TLS_RSA_WITH_AES_128_CBC_SHA。
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA。

你可以使用以下列表包括的方法限制对触发器(这些触发器接收对逻辑应用工作流的入站调用)的访问,以便只有经过授权的客户端才能调用工作流:

使用 Microsoft Entra ID 启用 OAuth 2.0

在以基于请求的触发器开头的消耗工作流中,可以通过启用使用 Microsoft Entra ID 的 OAuth 2.0,对发送到该触发器创建的终结点的入站调用进行身份验证和授权。 若要设置此身份验证,请在 逻辑应用资源级别定义或添加授权策略。 这样,入站调用将使用 OAuth 访问令牌进行授权。

当你的逻辑应用工作流收到包含 OAuth 访问令牌的入站请求时,Azure 逻辑应用会将令牌的声明与每个授权策略指定的声明进行比较。 如果令牌的声明与至少一个策略中的所有声明匹配,则会成功授权该入站请求。 令牌的声明数可以大于授权策略指定的声明数。

在以 请求 触发器(但不是 Webhook 触发器)开头的标准工作流中,可以使用 Azure Functions 预配通过托管标识对发送到 请求 触发器创建的终结点的入站调用进行身份验证。 此预配也称为“简易身份验证”。 有关详细信息,请查看使用简易身份验证在标准逻辑应用中触发工作流。

使用 Microsoft Entra ID 启用 OAuth 2.0 之前的注意事项

  • 为了获得最佳安全性,Microsoft建议尽可能将 Microsoft Entra ID 与 托管标识 一起使用进行身份验证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。 若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

  • 在消费工作流中,入站调用请求终结点的 URL 时,只能选择一种授权方案:要么使用Microsoft Entra ID 的 OAuth 2.0,要么使用共享访问签名 (SAS)。 尽管使用一个方案不会禁用另一个方案,但如果同时使用这两种方案,Azure 逻辑应用会生成错误,因为服务不知道要选择哪个方案。 如果你的 Consumption 工作流以 请求 触发器开头,则可以 禁用 SAS 身份验证,并 限制授权仅限使用 Microsoft Entra ID 的 OAuth 2.0。 对于标准工作流,无需禁用 SAS 即可使用其他身份验证类型。

  • Azure 逻辑应用支持Microsoft Entra ID OAuth 访问令牌的 持有者类型 或 所有权证明类型(仅限消耗逻辑应用) 授权方案。 但是,Authorization访问令牌的标头必须指定 Bearer 类型或 PoP 类型。 有关如何获取和使用 PoP 令牌的详细信息,请参阅 获取所有权证明(PoP)令牌。

  • 您的消费逻辑应用资源受到授权策略数量上限的限制。 每个授权策略还具有最大声明数。 有关详细信息,请参阅 Azure 逻辑应用的限制和配置。

  • 授权政策必须至少包含 发行人 和 受众 权利要求。 发行者声明的值以 https://sts.chinacloudapi.cn/ 或 https://login.chinacloudapi.cn/(OAuth V2)开头,作为 Microsoft Entra ID 的颁发者。 受众声明有一个值,即你的逻辑应用资源的预期受众。

    例如,假设逻辑应用资源具有一个授权策略,该策略需要两种声明类型: 受众 和 颁发者。 解码的访问令牌的此示例有效负载部分包括两种声明类型,其中 aud 是受众值,iss 是颁发者值:

    {
        "aud": "https://management.core.chinacloudapi.cn/",
        "iss": "https://sts.chinacloudapi.cn/<Azure-AD-issuer-ID>/",
        "iat": 1582056988,
        "nbf": 1582056988,
        "exp": 1582060888,
        "_claim_names": {
           "groups": "src1"
        },
        "_claim_sources": {
           "src1": {
              "endpoint": "https://graph.chinacloudapi.cn/7200000-86f1-41af-91ab-2d7cd011db47/users/00000-f433-403e-b3aa-7d8406464625d7/getMemberObjects"
           }
        },
        "acr": "1",
        "aio": "AVQAq/8OAAAA7k1O1C2fRfeG604U9e6EzYcy52wb65Cx2OkaHIqDOkuyyr0IBa/YuaImaydaf/twVaeW/etbzzlKFNI4Q=",
        "amr": [
           "rsa",
           "mfa"
        ],
        "appid": "c44b4083-3bb0-00001-b47d-97400853cbdf3c",
        "appidacr": "2",
        "deviceid": "bfk817a1-3d981-4dddf82-8ade-2bddd2f5f8172ab",
        "family_name": "Sophia Owen",
        "given_name": "Sophia Owen (Fabrikam)",
        "ipaddr": "167.220.2.46",
        "name": "sophiaowen",
        "oid": "3d5053d9-f433-00000e-b3aa-7d84041625d7",
        "onprem_sid": "S-1-5-21-2497521184-1604012920-1887927527-21913475",
        "puid": "1003000000098FE48CE",
        "scp": "user_impersonation",
        "sub": "KGlhIodTx3XCVIWjJarRfJbsLX9JcdYYWDPkufGVij7_7k",
        "tid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
        "unique_name": "SophiaOwen@fabrikam.com",
        "upn": "SophiaOwen@fabrikam.com",
        "uti": "TPJ7nNNMMZkOSx6_uVczUAA",
        "ver": "1.0"
    }
    

使用 Microsoft Entra ID 启用 OAuth 2.0 作为调用请求终结点的唯一选项

对于基于请求的终结点,可以将授权限制为仅将 OAuth 2.0 与 Microsoft Entra ID 一起使用。 即使禁用共享访问签名 (SAS) 身份验证,此选项也能正常工作。

  1. 对于工作流,按照步骤将 请求 触发器或 HTTP Webhook 触发器设置为具有检查 OAuth 访问令牌的功能, 以在请求或 HTTP Webhook 触发器输出中包含“授权”标头。

    注意

    此步骤使 Authorization 标头在工作流的运行历史记录和触发器的输出中可见。

  2. 在Azure门户中,在设计器中打开工作流。

  3. 在设计器上,选择触发器。 在打开的信息窗格中,选择 “设置”。

  4. 在 “常规>触发器”条件下,选择“ 添加”。 在触发器条件框中,根据要使用的令牌类型输入以下任一表达式:

    @startsWith(triggerOutputs()?['headers']?['Authorization'], 'Bearer')

    -或者-

    @startsWith(triggerOutputs()?['headers']?['Authorization'], 'PoP')

如果你在没有正确的授权的情况下调用触发器端点,运行历史会将该触发器显示为 Skipped,且没有任何消息表明触发条件已失败。

获取所有权证明(PoP)令牌

Microsoft 身份验证库 (MSAL) 库提供 PoP 令牌供你使用。 如果你想调用的消费逻辑应用工作流需要 PoP 令牌,可以通过 MSAL 库获取这个令牌。 以下示例演示如何获取 PoP 令牌:

若要在消费逻辑应用工作流中使用 PoP 令牌,请按照以下步骤使用 Microsoft Entra ID 设置 OAuth。

启用 Microsoft Entra ID 的 OAuth 以用于您的消费逻辑应用资源

若要将授权策略添加到消耗逻辑应用,请遵循 Azure 门户或 Azure 资源管理器模板的步骤:

  1. 在 Azure 门户中,在设计器中打开您的消费型逻辑应用和工作流。

  2. 在Logic应用侧边栏的 设置里,选择 授权。

  3. 在 “授权 ”页上,选择“ 添加策略”。

    截图显示了Azure门户、授权页面和已选中的添加策略按钮。

  4. 通过指定声明类型及其值,提供关于授权策略的信息,这些是您的逻辑应用程序在每次入站调用到请求触发器时期望包含在访问令牌中的内容。

    显示Azure门户、授权页面和授权策略详情的截图。

    财产 Required 类型 Description
    策略名称 Yes String 您想要用于授权策略的名称
    策略类型 Yes String 表示持有者类型令牌的 AAD 或表示所有权证明类型令牌的 AADPOP。
    Claims Yes String 一个键值对,指定工作流的请求触发器在对触发器的每个入站调用提供的访问令牌中预期的声明类型和值。 可以通过选择“ 添加标准声明”来添加所需的任何标准声明。 若要添加特定于 PoP 令牌的声明,请选择 “添加自定义声明”。

    可用的标准声明类型:

    - 发行人
    - 观众
    - 主题
    - JWT ID(JSON Web 令牌标识符)

    要求:

    - 至少 声明列表必须 包含以下声明类型:

    -- 颁发者:将值设置为以https://sts.chinacloudapi.cn/或https://login.chinacloudapi.cn/Microsoft Entra颁发者 ID 开头。
    -- 访问群体:此值设置为逻辑应用资源的预期受众。

    - 每个声明必须是单个字符串值,而不是值数组。 例如,您可以拥有一个声明,其类型为Role,值为Developer。 不能有一个声明,其类型为 角色,且值设置为 开发人员 和 项目经理。

    - 声明值限制为 最大字符数。

    你还可以指定自己的声明类型和值。 有关这些声明类型的详细信息,请参阅 Microsoft Entra 安全令牌中的声明。

    以下示例显示了 PoP 令牌的信息:

    显示Azure门户、授权页面和所有权证明策略信息的截图。

  5. 若要添加其他声明,请从以下选项中进行选择:

    • 若要添加其他声明类型,请选择 “添加标准声明”,选择声明类型,并指定声明值。

    • 若要添加自己的声明,请选择 “添加自定义声明”。 有关详细信息,请查看 如何向应用提供可选声明。 然后,自定义声明将存储为 JWT ID 的一部分;例如 "tid": "aaaabbbb-0000-cccc-1111-dddd2222eeee"。

  6. 若要添加另一个授权策略,请选择 “添加策略”。 重复前面的步骤以设置策略。

  7. 完成后,选择“保存”。

  8. 若要在基于请求的触发器输出中包含访问令牌的 Authorization 标头,请查看在请求和 HTTP Webhook 触发器输出中包含“Authorization”标头。

工作流属性(如策略)不会显示在 Azure 门户中工作流的代码视图中。 若要以编程方式访问策略,请通过 Azure 资源管理器调用以下 API: https://management.chinacloudapi.cn/subscriptions/{Azure-subscription-ID}/resourceGroups/{Azure-resource-group-name}/providers/Microsoft.Logic/workflows/{your-workflow-name}?api-version=2016-10-01&_=1612212851820 请务必替换 Azure 订阅 ID、资源组名称和工作流名称的占位符值。

在请求或 HTTP Webhook 触发器输出中添加“Authorization”标头

对于 使用 Microsoft Entra ID 启用 OAuth 的逻辑应用,为了授权入站调用获取基于请求的触发器,可以启用 请求 触发器或 HTTP Webhook 触发器的输出,以包括从 OAuth 访问令牌中获取的 Authorization 标头。 在触发器的基础 JSON 定义中,添加 operationOptions 属性并将其设置为 IncludeAuthorizationHeadersInOutputs。 下面是 请求 触发器的示例:

"triggers": {
   "manual": {
      "inputs": {
         "schema": {}
      },
      "kind": "Http",
      "type": "Request",
      "operationOptions": "IncludeAuthorizationHeadersInOutputs"
   }
}

有关详细信息,请参见:

生成共享访问签名(SAS)密钥或令牌

当工作流以基于请求的触发器开头,并且首次保存该工作流时,Azure 逻辑应用在该触发器上创建可调用的终结点。 此终结点具有可以接收入站调用或启动工作流的请求的 URL。 URL 包括共享访问签名 (SAS),这是授予存储服务权限的密钥或令牌。 此终结点 URL 使用以下格式:

https://<request-endpoint-URI>sp=<permissions>sv=<SAS-version>sig=<signature>

例如,若要在 请求 触发器中查看此 URL,请查找触发器的 HTTP URL 属性:

显示 Azure 门户、消耗工作流以及名为“HTTP URL”的 Request 触发器终结点属性的屏幕截图。

完整的 URL 如以下示例所示:

https://{domain}:443/workflows/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/triggers/When_a_HTTP_request_is_received/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0&sig=ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

URL 中的 SAS 具有查询参数,下表描述了这些参数:

查询参数 Description
sp 指定允许使用的 HTTP 方法的权限。
sv 指定要用于生成签名的 SAS 版本。
sig 指定用于对触发器访问进行身份验证的签名。 此签名是使用 SHA256 算法生成的,所有 URL 路径和属性中都包含机密访问密钥。 此密钥保持机密和加密,与逻辑应用一起存储,永远不会公开或发布。 逻辑应用仅授权包含使用密钥创建的有效签名的触发器。

Important

保护你的SAS密钥,就像保护账户密钥防止未经授权使用一样。 设置或具有撤消已泄露访问密钥的计划。 在分发使用访问密钥的 URI 时,使用自由裁量权,并且仅通过安全连接(如 HTTPS)分发此类 URI。 请确保仅在 HTTPS 连接上执行使用访问密钥的操作。 具有有效密钥的 URI 的任何人都可以访问关联的资源。

为了维护安全和保护对工作流程的访问,请定期 重新生成访问密钥 ,因为它们可能需要遵守安全策略或被攻破。 这样,就可以确保只有授权的请求才能触发工作流,从而防止数据和进程受到未经授权的访问。

如果你使用 SAS 密钥访问存储服务,则应创建用户委托 SAS,其安全保护依托于 Microsoft Entra ID,而非帐户密钥。

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。 若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

基于请求触发器的入站调用到终结点只能使用一个授权方案,即 SAS 或使用 Microsoft Entra ID 的 OAuth 2.0。 尽管使用一个方案不会禁用另一种方案,但如果同时使用这两种方案,Azure 逻辑应用会生成错误,因为该服务不知道要选择哪个方案。

如果拥有一个以请求触发器开头的消费工作流,则可以禁用 SAS 身份验证。 即使您已将授权限制为仅使用具有 Microsoft Entra ID 的 OAuth 2.0,该选项也能正常工作。 对于标准工作流,无需禁用 SAS 即可使用其他身份验证类型。

有关使用 SAS 密钥时的安全性的详细信息,请参阅本指南中的以下部分:

禁用共享访问签名 (SAS) 身份验证

默认情况下,基于请求的触发器已启用 SAS 身份验证。 触发器的终结点 URL 包括一个 SAS,从查询参数开始, sp-<permissions>sv-<SAS-version>sig=<signature>例如:

https://{domain}:443/workflows/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/triggers/When_a_HTTP_request_is_received/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0&sig=ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

如果工作流以请求触发器开头,并且想要将 OAuth 与Microsoft Entra ID一起使用,则可以禁用 SAS 身份验证以避免运行工作流时出现错误和问题。 还可以通过删除对机密的依赖项来添加安全层,从而降低记录或泄露机密的风险。

即使 使用 Microsoft Entra ID 启用 OAuth 2.0 作为调用基于请求的终结点的唯一选项,此选项也仍然可正常工作。 对于标准工作流,无需禁用 SAS 即可使用其他身份验证类型。

注意

此操作将禁用传入请求的 SAS 身份验证,并阻止现有 SAS 密钥或签名正常工作。 但是,如果再次启用 SAS 身份验证,SAS 密钥或签名仍然有效,仍会工作。

若要通过创建新版本禁用 SAS 密钥和签名,请参阅 “重新生成访问密钥”。

禁用 SAS 身份验证后, 请求 触发器的终结点 URL 不再包含 SAS 密钥,例如:

https://{domain}:443/workflows/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/triggers/When_a_HTTP_request_is_received/paths/invoke?api-version=2016-10-01

禁用SAS认证的前提条件

要禁用基于请求的触发器的SAS认证,你需要一个工具发送REST API调用,例如:

Caution

对于存在敏感数据(例如凭据、机密、访问令牌、API 密钥和其他类似信息)的情况,请务必使用一个符合以下条件的工具:具有可保护数据的必要安全功能,可脱机或本地工作,不会将数据同步到云,并且不需要登录联机帐户。 这样,就可以降低向公众公开敏感数据的风险。

检查触发器在启用或禁用 SAS 时的状态

禁用 SAS 身份验证后,触发器的终结点 URL 不再包含 SAS 密钥。 此外,消耗工作流定义包括 sasAuthenticationPolicy JSON 对象。 此对象具有一个状态属性,该属性设置为禁用,例如:

"properties": {
    "accessControl": {
        "triggers": {
            "sasAuthenticationPolicy": {
                "state": "Disabled"
            }
        }
    }
}

若要查找已启用或禁用 SAS 的消耗工作流,请检查工作流定义是否包含状态属性设置为 Disabled 的 sasAuthenticationPolicy 对象。

  1. 借助发送 REST API 调用的工具,通过运行 Workflows - Get 操作,使用以下 GET 请求来获取有关您工作流的信息,例如:

    GET https://management.chinacloudapi.cn/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Logic/workflows/{workflow-name}?api-version=2016-06-01

  2. 获取 工作流 - 获取 操作的输出,并检查是否存在 sasAuthenticationPolicy 对象,其中 状态 属性设置为 Disabled。

将 sasAuthenticationPolicy 属性添加到工作流定义

对于想要禁用 SAS 身份验证的消耗工作流,请执行以下步骤:

  1. 如果尚未这样做,请通过运行Workflows - Get 操作获取有关工作流的信息,方法是使用以下 GET 请求,例如:

    GET https://management.chinacloudapi.cn/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Logic/workflows/{workflow-name}?api-version=2016-06-01

  2. 从Workflows - Get操作获取输出,并手动添加以下元素:

    1. 如果不存在 properties 对象,在 accessControl 对象中添加一个包含 properties 对象的 对象。

    2. 在 triggers 对象中,添加一个 sasAuthenticationPolicy 对象,该对象包含设置为 state 的 Disabled 属性。

    完成后,编辑后的部分如以下示例所示:

    "properties": {
        "accessControl": {
            "triggers": {
                "sasAuthenticationPolicy": {
                    "state": "Disabled"
                }
            }
        }
    }
    
  3. 执行 工作流 - 更新 操作 时,使用以下 PUT 请求发送另一个请求,以更新您的工作流程,采用编辑后的输出作为请求正文中的输入,例如:

    PUT https://management.chinacloudapi.cn/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Logic/workflows/{workflow-name}?api-version=2016-06-01

  4. 在 Azure 门户中,转到设计器中的“消费工作流”,并确认 请求触发器的 URL 不再包含 SAS。

  5. 若要在逻辑应用资源级别启用使用 Microsoft Entra ID 的 Oauth 2.0,请为使用 Microsoft Entra ID 的 OAuth 2.0 添加授权策略。

    有关详细信息,请参阅 使用 Microsoft Entra ID 启用 OAuth 2.0。

重新生成访问密钥

若要维护安全性和保护对逻辑应用工作流的访问,请定期重新生成访问密钥,因为它们可能需要遵守安全策略或遭到入侵。 这样,就可以确保只有授权的请求才能触发工作流,从而防止数据和进程受到未经授权的访问。

若要随时生成新的访问密钥,请使用 Azure REST API 或 Azure 门户。 以前使用旧密钥生成的所有 URI 或 URL 已失效,不再有权触发逻辑应用工作流。 重新生成后检索的 URI 将使用新访问密钥进行签名。

  1. 在 Azure 门户中,打开使用要重新生成的密钥的逻辑应用资源。

  2. 在逻辑应用资源菜单上的 “设置”下,选择“ 访问密钥”。

  3. 选择要重新生成的密钥并完成生成过程。

Important

保护你的访问密钥,就像保护账户密钥防止未经授权使用一样。 设置或具有撤消已泄露访问密钥的计划。 在分发使用访问密钥的 URI 时,使用自由裁量权,并且仅通过安全连接(如 HTTPS)分发此类 URI。 请确保仅在 HTTPS 连接上执行使用访问密钥的操作。 任何拥有有效密钥的URI的人都可以访问相关资源。

如果你使用 SAS 密钥访问存储服务,则应创建用户委托 SAS,其安全保护依托于 Microsoft Entra ID,而非帐户密钥。

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

创建具有到期日期的回调 URL

如果您将请求触发器的终结点 URL 与其他方共享,您可以生成使用特定密钥并具有到期日期的回调 URL。 通过这种方法,你可以轻松轮换密钥,或将触发逻辑应用的访问权限限制在特定时间段内。 若要为 URL 指定到期日期,请使用 Azure 逻辑应用 REST API,例如:

POST /subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Logic/workflows/{workflow-name}/triggers/{trigger-name}/listCallbackUrl?api-version=2016-06-01

在正文中,使用 JSON 日期字符串包含 NotAfter 属性。 该属性返回的回调 URL 仅在 NotAfter 日期和时间之前有效。

使用主密钥或辅助密钥创建 URL

为基于请求的触发器生成或列出回调 URL 时,可以指定用于对 URL 进行签名的密钥。 若要生成由特定密钥签名的 URL,请使用 Azure 逻辑应用 REST API,例如:

POST /subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Logic/workflows/{workflow-name}/triggers/{trigger-name}/listCallbackUrl?api-version=2016-06-01

在正文中,将 KeyType 属性包括为 Primary 或 Secondary。 此属性返回由指定的安全密钥签名的 URL。

使用 Azure API 管理公开逻辑应用工作流

有关更多身份验证协议和选项,请考虑使用 Azure API 管理将逻辑应用工作流公开为 API。 此服务为任何终结点提供丰富的监视、安全、策略和文档功能。 API 管理可以为逻辑应用公开公共或专用终结点。 若要授权访问此终结点,可以将 OAuth 与 Microsoft Entra ID、客户端证书或其他安全标准一起使用。 当 API 管理收到请求时,服务会将请求发送到逻辑应用,并在此过程中进行任何必要的转换或限制。 若要仅让 API 管理调用你的逻辑应用工作流,可以限制逻辑应用的入站 IP 地址。

有关详细信息,请参见:

限制入站 IP 地址

除了共享访问签名 (SAS) 外,你还需要特别限制可调用逻辑应用工作流的客户端。 例如,如果使用 Azure API 管理来管理请求终结点,则可将逻辑应用工作流限制为仅接受来自你创建的 API 管理服务实例的 IP 地址的请求。

无论您指定了哪些 IP 地址,您仍然可以运行具有请求触发器的逻辑应用工作流,方法是使用 工作流触发器 - 运行操作 请求,或通过 API 管理。 不过,这种情况下仍需要针对 Azure REST API 进行身份验证。 所有事件都显示在 Azure 审核日志中。 请确保相应地设置访问控制策略。

若要限制逻辑应用工作流的入站 IP 地址,请遵循 Azure 门户或 Azure 资源管理器模板的相应步骤。 有效的IP范围使用以下格式:x.x.x.x/x 或 x.x.x.x-x.x.x.x.x。

在 Azure 门户中,IP 地址限制会影响触发器和操作,这与门户中“允许的入站 IP 地址”下的说明相反。 若要为触发器和操作单独设置此筛选器,请在 Azure 资源管理器模板中为逻辑应用资源使用 accessControl 对象,或使用 Azure 逻辑应用 REST API 中的 工作流 - 创建或更新 操作。

消耗型工作流
  1. 在 Azure 门户中,在设计器中打开您的消费型逻辑应用和工作流。

  2. 在Logic应用侧边栏的 设置里,选择 工作流程设置。

  3. 在“ 访问控制配置 ”部分中,在 “允许的入站 IP 地址”下,选择方案的路径:

    • 要通过使用 Azure 逻辑应用 内置动作使你的工作流可调用,但仅作为嵌套工作流,选择“仅其他逻辑应用”。 仅当使用 Azure 逻辑应用操作调用嵌套工作流时,此选项才有效。

      此选项会将一个空数组写入逻辑应用资源,并要求只有使用内置 Azure 逻辑应用操作的父工作流发出的调用才能触发嵌套工作流。

    • 要通过HTTP操作使你的工作流程可调用,但仅作为嵌套工作流,请选择 特定IP范围。 出现“触发器的 IP 范围”框时,请输入父工作流的出站 IP 地址。 有效的IP范围使用以下格式:x.x.x.x/x 或 x.x.x.x-x.x.x.x.x。

      注意

      如果您使用 “仅其他逻辑应用” 选项和 HTTP 操作来调用嵌套工作流,该调用将被阻止,您会收到“401 未授权”错误。

    • 如果你想要限制来自其他 IP 的入站调用,当“触发器的 IP 范围”框出现时,请指定触发器接受的 IP 地址范围。 有效的IP范围使用以下格式:x.x.x.x/x 或 x.x.x.x-x.x.x.x.x。

  4. (可选)在“将用于从运行历史记录获取输入和输出消息的调用限制为仅来自所提供的 IP 地址”下,指定可访问运行历史记录中输入和输出消息的入站调用的 IP 地址范围。

标准工作流
  1. 在 Azure portal 中,打开标准逻辑应用资源。

  2. 在逻辑应用侧边栏的设置下,选择网络。

  3. 在“入站流量配置”部分,选择“公用网络访问”旁边的“启用且没有访问限制”。

  4. 在“访问限制”页上,在“应用访问”下,选择“从选择虚拟网络和 IP 地址启用”。

  5. 在“站点访问和规则”下,在“主站点”选项卡上,添加一个或多个规则以“允许”或“拒绝”来自特定 IP 范围的请求。 有效的IP范围使用以下格式:x.x.x.x/x 或 x.x.x.x-x.x.x.x.x。

    有关详细信息,请参阅在 Azure 逻辑应用(标准型)中阻止入站 IP 地址。

对其他服务和系统的出站调用的访问

根据目标终结点的功能, HTTP 触发器或 HTTP 操作 发送的出站调用支持加密,并使用传输层安全性(TLS)1.0、1.1、1.2 或 1.3(以前称为安全套接字层(SSL)进行保护。 Azure 逻辑应用会就是否使用受支持的最高可能版本一事与目标终结点进行协商。 例如,如果目标终结点支持 1.3,则 HTTP 触发器或作首先使用 1.3。 否则,连接器将使用下一个受支持的最高版本。

此列表包含有关 TLS/SSL 自签名证书的信息:

  • 对于多租户 Azure 逻辑应用环境中的消费逻辑应用工作流,HTTP 操作不允许自签名 TLS/SSL 证书。 如果你的逻辑应用向服务器发出 HTTP 调用并提供了 TLS/SSL 自签名证书,则 HTTP 调用将失败并出现 TrustFailure 错误。

  • 对于单租户 Azure 逻辑应用环境中的标准逻辑应用工作流,HTTP 操作支持自签名的 TLS/SSL 证书。 但是,必须完成此身份验证类型的几个额外步骤。 否则,调用将失败。 有关详细信息,请参阅单租户 Azure 逻辑应用的 TLS/SSL 证书身份验证。

    如果要将客户端证书或 Microsoft Entra ID OAuth 与“证书”凭据类型一起使用,则仍必须为此身份验证类型完成一些额外的步骤。 否则,调用将失败。 有关详细信息,请参阅单租户 Azure 逻辑应用的客户端证书或凭据类型为“证书”的 Microsoft Entra ID OAuth。

下面提供了一些其他方法,帮助您保护那些处理来自逻辑应用工作流调用的终结点:

  • 向出站请求添加身份验证。

    当使用 HTTP 触发器或操作来发送出站调用时,可以针对逻辑应用发送的请求添加身份验证。 例如,可以选择以下身份验证类型:

  • 限制来自逻辑应用工作流 IP 地址的访问。

    从逻辑应用工作流对终结点进行的所有调用都源自基于逻辑应用所在区域的具体指定 IP 地址。 可以添加仅接受来自这些 IP 地址的请求的筛选规则。 若要获取这些 IP 地址,请查看 Azure 逻辑应用的限制和配置。

  • 提高与本地系统的连接的安全性。

    Azure 逻辑应用可与这些服务集成,来帮助提供更安全可靠的本地通信。

    • 本地数据网关。

      Azure 逻辑应用中的许多托管连接器有助于与本地系统(例如文件系统、SQL、SharePoint 和 DB2)建立安全连接。 网关通过加密通道将本地部署的来源的数据发送到 Azure 服务总线。 所有流量都从网关代理以安全的出站流量形式发出。 了解 本地数据网关的工作原理。

    • 通过 Azure API 管理 连接。

      Azure API 管理 提供本地连接选项,例如站点到站点虚拟专用网络和 ExpressRoute 集成,用于安全代理和与本地系统的通信。 如果你有一个可访问本地系统的 API,并通过创建 API 管理服务实例公开了该 API,那么可以在工作流设计器中选择相应的 API 管理操作,从逻辑应用的工作流中调用该 API。

      注意

      连接器仅显示那些你有权在其中进行查看和连接操作的 API 管理服务,但不显示基于消耗的 API 管理服务。

      根据逻辑应用资源类型,执行相应的步骤:

      消耗型工作流

      1. 根据要添加的是 API 管理触发器还是操作,请按照以下步骤操作:

      2. 从 API 管理服务实例列表中,选择之前创建的 API 管理服务实例。

      3. 从 API操作列表中选择要调用的 API操作,然后选择“添加操作”。

      标准工作流

      对于标准工作流,只能添加“API 管理”操作,而不能添加触发器。

      1. 在工作流设计器中,按照一般步骤添加名为“调用 Azure API 管理 API”的操作。

      2. 从 API 管理服务实例列表中,选择之前创建的 API 管理服务实例。

      3. 从 API 操作列表中选择要调用的 API 操作,然后选择“新建”。

        截图显示了Azure门户、标准工作流设计器和已选中的调用API。

针对出站调用添加身份验证

HTTP 和 HTTPS 终结点支持各种身份验证。 在用于向这些终结点发送出站调用或请求的某些触发器和操作上,可以指定身份验证类型。 在工作流设计器中,支持选择身份验证类型的触发器和操作具有“身份验证”属性。 但是,此属性可能不会始终默认显示。 在这种情况下,请在触发器或操作中打开“高级参数”列表,然后选择“身份验证”。

Important

若要保护逻辑应用工作流处理的敏感信息,请使用受保护的参数并根据需要对数据进行编码。 有关使用和保护参数的详细信息,请查看 对参数输入的访问。

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

基本身份验证

对于 HTTP 调用,基本身份验证使用 base64 编码的字符串,其中包含用户名和密码发出请求。 除非将此选项用于 HTTPS/SSL 协议,否则此方法传输不加密的凭据,并带来更高的安全风险。

Important

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

如果“ 基本 ”选项可用且处于选中状态,请指定以下属性值:

属性(设计器) 属性 (JSON) Required 价值 Description
Authentication type Yes 基本 要使用的身份验证类型
用户名 username Yes < 用户名> 用于对目标服务终结点访问进行身份验证的用户名
密码 password Yes < 密码> 用于对目标服务终结点访问进行身份验证的密码

使用 安全参数 来处理和保护敏感信息(例如,在 用于自动部署的 Azure 资源管理器模板中)时,可以使用表达式在运行时访问这些参数值。 此示例 HTTP 操作定义将身份验证 type 指定为 Basic,并使用 parameters() 函数获取参数值:

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "@parameters('endpointUrlParam')",
      "authentication": {
         "type": "Basic",
         "username": "@parameters('userNameParam')",
         "password": "@parameters('passwordParam')"
      }
  },
  "runAfter": {}
}

客户端证书身份验证

客户端证书身份验证 允许或要求用户使用 X.509 证书直接对其 Microsoft Entra ID 进行身份验证,以用于应用程序和浏览器登录。 该功能帮助您采用抗钓鱼认证,并用X.509证书对公钥基础设施(PKI)进行认证。

Important

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

如果 “客户端证书 ”选项可用且处于选中状态,请指定以下属性值:

属性(设计器) 属性 (JSON) Required 价值 Description
Authentication type Yes 客户端证书
或者
ClientCertificate
要使用的认证类型。 可以使用 Azure API 管理来管理证书。

注意:对于入站和出站调用,自定义连接器不支持基于证书的身份验证。
Pfx pfx Yes < 编码 PFX 文件内容> 个人信息交换 (PFX) 文件中的 base64 编码内容

若要将 PFX 文件转换为 base64 编码格式,可以使用 PowerShell 7 并执行以下步骤:

1.将证书内容保存到变量中:

$pfx_cert = [System.IO.File]::ReadAllBytes('c:\certificate.pfx')

2.使用 ToBase64String() 函数转换证书内容,并将该内容保存到文本文件:

[System.Convert]::ToBase64String($pfx_cert) | Out-File 'pfx-encoded-bytes.txt'

故障排除:如果使用 cert mmc/PowerShell 命令,可能会出现以下错误:

Could not load the certificate private key. Please check the authentication certificate password is correct and try again.

若要解决此错误,请尝试使用 openssl 命令将 PFX 文件转换为 PEM 文件,再转换回来:

openssl pkcs12 -in certificate.pfx -out certificate.pem
openssl pkcs12 -in certificate.pem -export -out certificate2.pfx

之后,当您获取证书新转换的 PFX 文件的 base64 编码字符串时,该字符串现在可以在 Azure 逻辑应用 中正常使用。
密码 password No < password-for-pfx-file> 用于访问 PFX 文件的密码

注意

如果你尝试用OpenSSL用客户端证书认证,可能会出现以下错误:

BadRequest: Could not load private key

若要解决此错误,请执行以下步骤:

  1. 卸载所有 OpenSSL 实例。
  2. 安装 OpenSSL 版本 1.1.1t。
  3. 使用最新更新重新签名你的证书。
  4. 使用客户端证书身份验证时,将新证书添加到 HTTP 操作中。

使用 安全参数 来处理和保护敏感信息(例如,在 用于自动部署的 Azure 资源管理器模板中)时,可以使用表达式在运行时访问这些参数值。 此示例 HTTP 操作定义将身份验证 type 指定为 ClientCertificate,并使用 parameters() 函数获取参数值:

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "@parameters('endpointUrlParam')",
      "authentication": {
         "type": "ClientCertificate",
         "pfx": "@parameters('pfxParam')",
         "password": "@parameters('passwordParam')"
      }
   },
   "runAfter": {}
}

Important

如果你在单租户的 Azure 逻辑应用 中有一个标准逻辑应用资源,并且你想用 HTTP 操作搭配 TLS/SSL 证书、客户端证书,或者带有Certificate凭据类型的 Microsoft Entra ID OAuth 来操作,请务必完成该认证类型的额外设置步骤。 否则,调用将失败。 有关详细信息,请参阅 单租户环境中的身份验证。

有关使用客户端证书身份验证保护服务的详细信息,请查看以下主题:

Active Directory OAuth (OAuth 2.0 with Microsoft Entra ID) 认证

在请求触发器上,可以在为逻辑应用设置Microsoft Entra 授权策略后,使用 Microsoft Entra 平台对传入调用进行身份验证。

Important

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

在支持 Active Directory OAuth(OAuth 2.0 with Microsoft Entra ID)身份验证类型的所有其他触发器和操作上,指定以下属性值:

属性(设计器) 属性 (JSON) Required 价值 Description
Authentication type Yes Active Directory OAuth(使用 Microsoft Entra ID 的 OAuth 2.0)
或者
ActiveDirectoryOAuth
要使用的认证类型。 Azure 逻辑应用当前遵循 OAuth 2.0 协议。
权限 authority No < 用于授权令牌发行者的 URL> 提供访问密钥的颁发机构的 URL,例如 Azure 全球服务区域的 https://login.chinacloudapi.cn/。 对于其他国家级云服务,请查看 Microsoft Entra 身份验证终结点 - 选择标识颁发机构。
租户 tenant Yes < 租户 ID> Microsoft Entra 租户的租户 ID
观众 audience Yes < 需要授权的资源> 要用于授权的资源,例如 https://management.core.chinacloudapi.cn/
客户端 ID clientId Yes < 客户端 ID> 请求授权的应用的客户端 ID
凭据类型 credentialType Yes 证书
或者
Secret
客户端用来请求授权的凭据类型。 此属性和值虽然不会显示在逻辑应用的基础定义中,但它们决定了所选凭据类型将显示哪些属性。
机密 secret 是,但仅适用于“机密”凭据类型 < 客户端密钥> 用于请求授权的客户端密码
Pfx pfx 是,但仅适用于“证书”凭据类型 < 编码 PFX 文件内容> 个人信息交换 (PFX) 文件中的 base64 编码内容
密码 password 是,但仅适用于“证书”凭据类型 < password-for-pfx-file> 用于访问 PFX 文件的密码

使用 安全参数 来处理和保护敏感信息(例如,在 用于自动部署的 Azure 资源管理器模板中)时,可以使用表达式在运行时访问这些参数值。 此示例 HTTP 操作定义将身份验证 type 指定为 ActiveDirectoryOAuth,将凭据类型指定为 Secret,并使用 parameters() function 获取参数值:

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "@parameters('endpointUrlParam')",
      "authentication": {
         "type": "ActiveDirectoryOAuth",
         "tenant": "@parameters('tenantIdParam')",
         "audience": "https://management.core.chinacloudapi.cn/",
         "clientId": "@parameters('clientIdParam')",
         "credentialType": "Secret",
         "secret": "@parameters('secretParam')"
     }
   },
   "runAfter": {}
}

Important

如果你在单租户的 Azure 逻辑应用 中有一个标准逻辑应用资源,并且你想用 HTTP 操作搭配 TLS/SSL 证书、客户端证书,或者带有Certificate凭据类型的 Microsoft Entra ID OAuth 来操作,请务必完成该认证类型的额外设置步骤。 否则,调用将失败。 有关详细信息,请参阅 单租户环境中的身份验证。

原始身份验证

如果有 Raw 选项,当你需要使用不遵循 OAuth 2.0 协议的认证方案时,请使用这种认证类型。 使用此类型可以手动创建要与传出请求一起发送的授权标头值,并指定触发器或操作中的标头值。

Important

为了最佳安全性,尽量使用Microsoft Entra ID和托管身份进行认证。 该选项提供更优越的安全保障,无需凭证。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需管理这种敏感信息了。

若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。

以下示例显示了遵循 OAuth 1.0 协议的 HTTPS 请求的示例标头:

Authorization: OAuth realm="Photos",
   oauth_consumer_key="dpf43f3p2l4k3l03",
   oauth_signature_method="HMAC-SHA1",
   oauth_timestamp="137131200",
   oauth_nonce="wIjqoS",
   oauth_callback="http%3A%2F%2Fprinter.example.com%2Fready",
   oauth_signature="74KNZJeDHnMBp0EMJ9ZHt%2FXKycU%3D"

在支持原始身份验证的触发器或操作中指定以下属性值:

属性(设计器) 属性 (JSON) Required 价值 Description
Authentication type Yes 原始 要使用的身份验证类型
价值 value Yes < 授权标头值> 要用于身份验证的授权标头值

当你使用安全参数来处理和保护敏感信息时,比如在 Azure 资源管理器 模板中自动化部署时,你可以在运行时使用表达式访问这些参数值。 此示例 HTTP 操作定义将身份验证 type 指定为 Raw 并使用 parameters() function 获取参数值:

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "@parameters('endpointUrlParam')",
      "authentication": {
         "type": "Raw",
         "value": "@parameters('authHeaderParam')"
      }
   },
   "runAfter": {}
}

托管身份认证

当支持托管身份认证的触发器或动作中可用管理身份选项时,你的逻辑应用可以使用该身份来认证访问由 Microsoft Entra ID 保护的 Azure 资源,而不必使用凭证、秘密或 Microsoft Entra 令牌。 Azure 会为你管理此标识并帮助保护凭据,因为无需管理机密或直接使用 Microsoft Entra 令牌。 详细了解支持使用托管标识进行 Microsoft Entra 身份验证的 Azure 服务。

  • 消耗逻辑应用资源可以使用系统分配的标识或 单个 手动创建的用户分配标识。

  • 标准逻辑应用资源支持同时启用 系统分配的托管标识 和 多个用户分配的托管标识 ,不过你仍只能选择一个标识随时使用。

    注意

    在默认情况下,已启用系统分配的标识,以便在运行时对连接进行身份验证。 此标识不同于创建连接时使用的身份验证凭据或连接字符串。 如果你禁用了这个身份,连接在运行时就无法正常工作。 要查看此设置,可以在你的 Logic 应用侧边 栏设置中选择 “身份”。

  1. 在逻辑应用可以使用托管标识之前,请按照 在 Azure 逻辑应用中使用托管标识对 Azure 资源进行访问身份验证中的步骤操作。 这些步骤将在逻辑应用上启用托管标识,并设置该标识对目标 Azure 资源的访问权限。

  2. 在 Azure 函数可以使用托管标识之前,请先为 Azure 函数启用身份验证。

  3. 在支持使用托管标识的触发器或操作中,提供以下信息:

    内置触发器和操作

    属性(设计器) 属性 (JSON) Required 价值 Description
    Authentication type Yes 托管标识
    或者
    ManagedServiceIdentity
    要使用的身份验证类型
    托管标识 identity No < 用户分配身份标识-ID> 由用户分配的要使用的托管标识。 注意:使用系统分配的托管标识时,请勿包含此属性。
    观众 audience Yes < 目标资源 ID> 要访问的目标资源的资源 ID。

    例如, https://storage.azure.com/ 使 访问令牌 对所有存储帐户都有效。 但是,还可以为特定存储帐户指定根服务 URL,如 https://fabrikamstorageaccount.blob.core.chinacloudapi.cn。

    注意:“受众”属性可能已在某些触发器或操作中隐藏。 若要使此属性可见,请在触发器或作中打开 “高级参数 ”列表,然后选择“ 受众”。

    重要:请确保此目标资源 ID 与 Microsoft Entra ID 所期望的值完全一致,包括任何必需的末尾斜杠。 因此,所有 Azure Blob 存储帐户的 https://storage.azure.com/ 资源 ID 都需要斜杠结尾。 但是,特定存储帐户的资源 ID 不需要尾部反斜杠。 若要查找这些资源 ID,请查看 支持 Microsoft Entra ID 的 Azure 服务。

    当你使用安全参数来处理和保护敏感信息时,比如在 Azure 资源管理器 模板中自动化部署时,你可以在运行时使用表达式访问这些参数值。 例如,此 HTTP 操作定义将身份验证 type 指定为 ManagedServiceIdentity,并使用 parameters() 函数获取参数值:

    "HTTP": {
       "type": "Http",
       "inputs": {
          "method": "GET",
          "uri": "@parameters('endpointUrlParam')",
          "authentication": {
             "type": "ManagedServiceIdentity",
             "audience": "https://management.chinacloudapi.cn/"
          },
       },
       "runAfter": {}
    }
    

    托管的连接器触发器和操作

    属性(设计器) Required 价值 Description
    连接名称 Yes < 连接名称>
    托管标识 Yes 系统分配的托管标识
    或者
    < 用户分配的托管标识名称>
    要使用的身份验证类型

阻止由特定连接器创建的连接

如果组织不允许使用 Azure 逻辑应用中的连接器连接到特定资源,则可以在逻辑应用工作流中使用 Azure Policy阻止为特定连接器创建这些连接的功能。 有关详细信息,请查看在 Azure 逻辑应用中阻止特定连接器创建的连接。

逻辑应用隔离指南

有关隔离的更多信息,请参见: