你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 逻辑应用中阻止使用连接器

适用于:Azure 逻辑应用(消耗型 + 标准型)

如果你的组织不允许在 Azure 逻辑应用中使用托管连接器连接到受限的或未批准的资源,则可阻止在逻辑应用工作流中创建和使用这些连接的功能。 可以使用 Azure Policy 定义并强制实施策略来阻止创建或使用你要阻止的连接器的连接。 例如,出于安全原因,你可能想要阻止与特定社交媒体平台或其他服务和系统的连接。

本文介绍如何使用 Azure 门户设置阻止特定连接的策略,但也可以通过其他方式创建策略定义。 例如,可以使用 Azure REST API、Azure PowerShell、Azure CLI 和 Azure 资源管理器模板。 有关详细信息,请参阅教程:创建和管理策略以强制实施符合性

先决条件

查找连接器引用 ID

如果已经有一个具有要阻止的连接的逻辑应用,请按照适用于 Azure 门户的步骤操作。 否则,请执行以下步骤:

连接器参考文档

  1. 请查看适用于 Azure 逻辑应用的连接器

  2. 找到要阻止的连接器的参考页。

    例如,如果要阻止已弃用的 Instagram 连接器,请转到此页:

    https://learn.microsoft.com/connectors/instagram/

  3. 在该页的 URL 中,复制并保存末尾处的连接器引用 ID,不带正斜杠 (/),例如 instagram

    稍后,在创建策略定义时在定义的条件语句中将使用此 ID,例如:

    "like": "*managedApis/instagram"

Azure 门户

  1. Azure 门户中,查找并打开逻辑应用。

  2. 在逻辑应用菜单上,选择以下选项之一:

    • 消耗型逻辑应用:在“开发工具”下,选择“API 连接”。

    • 标准逻辑应用:在“工作流”下面,选择“连接”。 在“连接”窗格中,选择“API 连接”(如果尚未选择)。

    1. 在“API 连接”窗格中,选择连接。 连接窗格打开时,在右上角选择“JSON 视图”。

    2. 查找 api 对象,此对象包含具有以下格式的 id 属性和值:

      "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{Azure-region}/managedApis/{connection-name}"

      以下示例显示了 Instagram 连接的 id 属性和值:

      "id": "/subscriptions/xxxxxXXXXXxxxxxXXXXXxxxxxXXXXX/providers/Microsoft.Web/locations/westus/managedApis/instagram"

    3. id 属性值中,复制并保存末尾处的连接器引用 ID,例如 instagram

      稍后,在创建策略定义时在定义的条件语句中将使用此 ID,例如:

      "like": "*managedApis/instagram"

阻止创建连接

若要完全阻止在逻辑应用工作流中创建连接,请执行以下步骤:

  1. Azure 门户搜索框中,输入“策略”,然后选择“策略”。

    屏幕截图显示 Azure 门户搜索框,其中输入“策略”并且选择“策略”。

  2. 在“策略”菜单上,在“创作”下,选择“定义”。 在“定义”窗格工具栏上,选择“策略定义”。

    屏幕截图显示“定义”窗格工具栏,其中选中了“策略定义”。

  3. 在“策略定义”窗格中,根据该示例下所述的属性,提供策略定义的信息:

    显示“策略定义”属性的屏幕截图。

    属性 需要 说明
    定义位置 <Azure-subscription-name> 用于策略定义的 Azure 订阅

    1.若要查找你的订阅,请选择省略号 ( ... ) 按钮。
    2.在“订阅”列表中找到并选择你的订阅。
    3.完成后,选择“选择”。

    名称 <policy-definition-name<> 用于策略定义的名称
    说明 <policy-definition-name<> 策略定义的说明
    类别 逻辑应用 策略定义的现有类别或新类别的名称
    策略强制执行 Enabled 此设置指定在保存工作时是启用还是禁用策略定义。
  4. 在“策略规则”下,JSON 编辑框已使用策略定义模板预先填充。 根据下表中所述的属性,按照以下语法将此模板替换为你的策略定义

    {
       "mode": "All",
       "policyRule": {
          "if": {
             "field": "Microsoft.Web/connections/api.id",
             "like": "*managedApis/{connector-name}"
          },
          "then": {
             "effect": "deny"
          }
       },
       "parameters": {}
     }
    
    属性 价值 说明
    mode All 一个模式,用于确定策略所评估的资源类型。

    在此情况下会将 mode 设置为 All,这会将策略应用于 Azure 资源组、订阅和所有资源类型。

    有关详细信息,请参阅策略定义结构 - 模式

    if {condition-to-evaluate} 一个条件,用于确定何时强制实施策略规则

    在这种情况下,{condition-to-evaluate} 确定 Microsoft.Web/connections/api.id 中的 api.id 值是否与指定了通配符 (*) 值的 *managedApis/{connector-name} 匹配。

    有关详细信息,请参阅策略定义结构 - 策略规则

    field Microsoft.Web/connections/api.id 要与条件进行比较的 field

    在这种情况下,field 使用field 来访问连接器属性 api.id 中的值。

    like *managedApis/{connector-name} 用于比较 field 值的逻辑运算符和值

    在这种情况下,like 运算符和通配符 (*) 字符都确保规则的工作方式与区域无关,而字符串 *managedApis/{connector-name} 是要匹配的值,其中,{connector-name} 是要阻止的连接器的 ID。

    例如,假设你要阻止创建与社交媒体平台或数据库的连接:

    - X:x
    - Instagram:instagram
    - Facebook:facebook
    - Pinterest:pinterest
    - SQL Server 或 Azure SQL:sql

    若要查找这些连接器 ID,请参阅本主题上文中的查找连接器引用 ID

    then {effect-to-apply} 满足 if 条件时要应用的效果

    在这种情况下,{effect-to-apply} 会阻止不符合策略的请求或操作并让其失败。

    有关详细信息,请参阅策略定义结构 - 策略规则

    effect deny effect 将阻止请求,即阻止创建指定的连接

    有关详细信息,请参阅了解 Azure Policy 效果 - 拒绝

    例如,假设你要阻止通过 Instagram 连接器创建连接。 下面是可以使用的策略定义:

    {
       "mode": "All",
       "policyRule": {
          "if": {
             "field": "Microsoft.Web/connections/api.id",
             "like": "*managedApis/instagram"
          },
          "then": {
             "effect": "deny"
          }
       },
       "parameters": {}
    }
    

    下面是“策略规则”框的显示方式:

    屏幕截图显示“策略规则”框,其中包含策略规则示例。

    对于多个连接器,可以添加更多条件,例如:

    {
       "mode": "All",
       "policyRule": {
          "if": {
             "anyOf": [
                {
                   "field": "Microsoft.Web/connections/api.id",
                   "like": "*managedApis/instagram"
                },
                {
                   "field": "Microsoft.Web/connections/api.id",
                   "like": "*managedApis/x"
                },
                {
                   "field": "Microsoft.Web/connections/api.id",
                   "like": "*managedApis/facebook"
                },
                {
                   "field": "Microsoft.Web/connections/api.id",
                   "like": "*managedApis/pinterest"
                }
             ]
          },
          "then": {
             "effect": "deny"
          }
       },
       "parameters": {}
     }
    
  5. 完成后,选择“保存”。 保存策略定义后,Azure Policy 会生成更多的属性值并将其添加到策略定义。

  6. 接下来,若要分配需要在其中强制实施策略的策略定义,请创建策略分配

有关 Azure 策略定义的详细信息,请参阅以下主题:

阻止将连接与逻辑应用关联

在逻辑应用工作流中创建连接时,该连接作为单独的 Azure 资源存在。 如果仅删除逻辑应用工作流,则连接资源不会自动删除,在被删除之前会一直存在。 你可能会遇到这样的情况:连接资源已存在,或者必须创建在逻辑应用外部使用的连接资源。 仍然可以通过创建一个策略来阻止将连接与不同的逻辑应用工作流相关联的功能,此策略阻止保存尝试使用受限或未经批准的连接的逻辑应用工作流。 此策略仅影响尚未使用连接的逻辑应用工作流。

  1. Azure 门户搜索框中,输入“策略”,然后选择“策略”。

    屏幕截图显示 Azure 门户搜索框,其中输入“策略”并且选择“策略”。

  2. 在“策略”菜单上,在“创作”下,选择“定义”。 在“定义”窗格工具栏上,选择“策略定义”。

    屏幕截图显示“定义”窗格工具栏,其中选中了“策略定义”。

  3. 在“策略定义”下,根据该示例下所述的属性提供策略定义的信息,并使用 Instagram 作为示例继续操作:

    显示“策略定义”属性的屏幕截图。

    属性 需要 说明
    定义位置 <Azure-subscription-name> 用于策略定义的 Azure 订阅

    1.若要查找你的订阅,请选择省略号 ( ... ) 按钮。
    2.在“订阅”列表中找到并选择你的订阅。
    3.完成后,选择“选择”。

    名称 <policy-definition-name<> 用于策略定义的名称
    说明 <policy-definition-name<> 策略定义的说明
    类别 逻辑应用 策略定义的现有类别或新类别的名称
    策略强制执行 Enabled 此设置指定在保存工作时是启用还是禁用策略定义。
  4. 在“策略规则”下,JSON 编辑框已使用策略定义模板预先填充。 根据下表中所述的属性,按照以下语法将此模板替换为你的策略定义

    {
       "mode": "All",
       "policyRule": {
          "if": {
             "value": "[string(field('Microsoft.Logic/workflows/parameters'))]",
             "contains": "{connector-name}"
          },
          "then": {
             "effect": "deny"
          }
       },
       "parameters": {}
     }
    
    属性 价值 说明
    mode All 一个模式,用于确定策略所评估的资源类型。

    在此情况下会将 mode 设置为 All,这会将策略应用于 Azure 资源组、订阅和所有资源类型。

    有关详细信息,请参阅策略定义结构 - 模式

    if {condition-to-evaluate} 一个条件,用于确定何时强制实施策略规则

    在此情况下,{condition-to-evaluate} 确定 [string(field('Microsoft.Logic/workflows/parameters'))] 的字符串输出是否包含字符串 {connector-name}

    有关详细信息,请参阅策略定义结构 - 策略规则

    value [string(field('Microsoft.Logic/workflows/parameters'))] 要与条件进行比较的值

    在此情况下,value[string(field('Microsoft.Logic/workflows/parameters'))] 的字符串输出,它将 Microsoft.Logic/workflows/parameters 对象中的 $connectors 对象转换为字符串。

    contains {connector-name} 用于与 value 属性进行比较的逻辑运算符和值

    在此情况下,contains 运算符确保规则正常工作,而不管 {connector-name} 出现在何处,其中,字符串 {connector-name} 是要限制或阻止的连接器的 ID。

    例如,假设你要阻止使用与社交媒体平台或数据库的连接:

    - X:x
    - Instagram:instagram
    - Facebook:facebook
    - Pinterest:pinterest
    - SQL Server 或 Azure SQL:sql

    若要查找这些连接器 ID,请参阅本主题上文中的查找连接器引用 ID

    then {effect-to-apply} 满足 if 条件时要应用的效果

    在这种情况下,{effect-to-apply} 会阻止不符合策略的请求或操作并让其失败。

    有关详细信息,请参阅策略定义结构 - 策略规则

    effect deny effectdeny或阻止请求,即阻止保存使用指定连接的逻辑应用

    有关详细信息,请参阅了解 Azure Policy 效果 - 拒绝

    例如,假设你要阻止保存使用 Instagram 连接的逻辑应用。 下面是可以使用的策略定义:

    {
       "mode": "All",
       "policyRule": {
          "if": {
             "value": "[string(field('Microsoft.Logic/workflows/parameters'))]",
             "contains": "instagram"
          },
          "then": {
             "effect": "deny"
          }
       },
       "parameters": {}
     }
    

    下面是“策略规则”框的显示方式:

    显示策略定义规则的屏幕截图。

  5. 完成后,选择“保存”。 保存策略定义后,Azure Policy 会生成更多的属性值并将其添加到策略定义。

  6. 接下来,若要分配需要在其中强制实施策略的策略定义,请创建策略分配

有关 Azure 策略定义的详细信息,请参阅以下主题:

创建策略分配

接下来,你需要分配要在其中强制实施策略的策略定义,例如,将其分配给单个资源组、多个资源组、Microsoft Entra 租户或 Azure 订阅。 对于此任务,请按照以下步骤创建策略分配:

  1. Azure 门户搜索框中,输入“策略”,然后选择“策略”。

    屏幕截图显示 Azure 门户搜索框,其中输入“策略”并且选择“策略”。

  2. 在“策略”菜单上,在“创作”下,选择“分配”。 在“分配”窗格工具栏上,选择“分配策略”。

    屏幕截图显示“分配”窗格工具栏,其中选中了“分配策略”。

  3. 在“分配策略”窗格的“基本信息”下,为策略分配提供以下信息:

    属性 必选 说明
    范围 要在其中强制实施策略分配的资源。

    1.在“作用域”框旁边,选择省略号 ( ... ) 按钮。
    2.在“订阅”列表中选择 Azure 订阅。
    3.(可选)在“资源组”列表中选择资源组。
    4.完成后,选择“选择”。

    排除项 要从策略分配中排除的任何 Azure 资源。

    1.在“排除项”框旁边,选择省略号 ( ... ) 按钮。
    2. 从“资源”列表中选择相应资源 “添加到所选作用域”。
    3.完成后,选择“保存”。

    策略定义 要分配和强制实施的策略定义的名称。 此示例将继续执行示例 Instagram 策略“阻止 Instagram 连接”。

    1.在“策略定义”框旁边,选择省略号 ( ... ) 按钮。
    2.使用“类型”筛选器或“搜索”框找到并选择策略定义。
    3.完成后,选择“选择”。

    分配名称 用于策略分配的名称(如果不同于策略定义)
    分配 ID 为策略分配自动生成的 ID
    说明 策略分配的说明
    策略强制执行 用于启用或禁用策略分配的设置
    分配者 创建并应用了策略分配的人员的姓名

    例如,使用 Instagram 示例将策略分配给 Azure 资源组:

    显示“策略分配”属性的屏幕截图。

  4. 完成操作后,选择“查看 + 创建”。

    创建策略后,可能需要等待 15 分钟,然后策略才会生效。 变更可能也有类似的延迟影响。

  5. 策略生效后,可以测试策略

有关详细信息,请参阅快速入门:创建策略分配以识别不合规资源

测试策略

若要试用策略,请在工作流设计器中使用目前受限的连接器开始创建连接。 继续执行 Instagram 示例,当你登录到 Instagram 时,会收到指示你的逻辑应用无法创建连接的以下错误:

屏幕截图显示连接由于所应用的策略而失败。

该消息包含以下信息:

说明 内容
失败原因 "Resource 'instagram' was disallowed by policy."
分配名称 "Block Instagram connections"
分配 ID "/subscriptions/xxxxxXXXXXxxxxxXXXXXxxxxxXXXXX/resourceGroups/MyLogicApp-RG/providers/Microsoft.Authorization/policyAssignments/4231890fc3bd4352acb0b673"
策略定义 ID "/subscriptions/xxxxxXXXXXxxxxxXXXXXxxxxxXXXXX/providers/Microsoft.Authorization/policyDefinitions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"

后续步骤