连接器终结点筛选(预览版)

[本文为预发布文档,可能会发生变化。]

连接器终结点筛选允许管理员管理制作者在构建应用、流或聊天机器人时可以连接到哪些特定终结点制作者。 它在数据丢失防护 (DLP) 策略中配置,并且专用于六个连接器:

  • HTTP
  • 带有 Microsoft Entra ID (AD) 的 HTTP
  • HTTP Webhook
  • SQL Server(包括使用 SQL Server Connector 访问 Azure Synapse 数据仓库)
  • Azure Blob Storage
  • SMTP

当制作者尝试将他们的应用、流或聊天机器人连接到阻止的终结点时,他们将遇到 DLP 错误消息。

警告

不会对环境变量、自定义输入或在运行时动态创建的任何终结点强制执行终结点筛选规则。 在应用、流或聊天机器人设计器中仅评估静态终结点。 有关详细信息,请参阅已知限制

重要提示

预览功能不适合生产使用且功能可能受限。 这些功能在正式发布之前推出,以便客户可以提前使用并提供反馈。

将终结点筛选规则添加到您的 DLP 策略中

数据策略预构建连接器页上的终结点可配置列指示连接器是否支持终结点筛选功能。

预构建连接器页的“终结点可配置”。

如果终结点可配置列的值为,您可以通过右键单击然后选择配置连接器>连接器终结点来使用此功能。

配置连接器 > 连接器终结点。

这将打开一个侧面板,您可以在其中指定允许或拒绝 URL 模式的已排序列表。 列表中的最后一行将始终是通配符 (*) 的规则,将应用于该连接器中的所有终结点。 默认情况下,* 模式设置为允许新 DLP 策略,但您可以将其标记为允许或拒绝。

为自定义连接器指定允许和拒绝 URL 模式的已排序列表。

添加新规则

您可以通过选择添加终结点来添加新规则。 新规则将被添加到模式列表的末尾,作为倒数第二个规则。 这是因为 * 始终是列表中的最后一项。 不过,您可以通过使用顺序下拉列表或选择上移下移来更新模式的顺序。

选择“添加终结点”来添加新规则。

添加模式后,您可以通过选择特定行,然后选择删除来编辑或删除这些模式。

删除模式。

保存连接器终结点筛选规则和定义它们所在的 DLP 策略后,会立即在目标环境中强制执行它们。 下面是制作者尝试将他们的云端流连接到不允许的 HTTP 终结点的一个示例。

由于终结点筛选规则导致的 DLP 错误。

已知限制

  • 终结点筛选规则不会在运行时对环境变量、自定义输入和动态绑定终结点强制执行。 只有在设计期间构建应用、流或聊天机器人时选择的已知静态终结点会被强制执行。 这意味着,如果连接通过 Microsoft Entra 进行身份验证,将不会强制执行 SQL Server 和 Azure Blob 存储的连接器终结点筛选规则。 在下面的两个屏幕截图中,制作者构建了一个云端流,此流定义了 SQL Server 和数据库内部变量,然后使用这些变量作为连接定义的输入。 因此,不会评估终结点筛选规则,并且云端流可以成功执行。

    云端流使用变量连接到 SQL。云端流成功运行。

  • 需要重新发布一些在 2020 年 10 月 1 日之前发布的 Power Apps,来强制执行 DLP 连接器操作规则和终结点规则。 以下脚本让管理员和制作者能够识别必须重新发布以遵守这些新的 DLP 精细控制规则的应用:

    Add-PowerAppsAccount
    
    $GranularDLPDate = Get-Date -Date "2020-10-01 00:00:00Z"
    
    ForEach ($app in Get-AdminPowerApp){
    
        $versionAsDate = [datetime]::Parse($app.LastModifiedTime)
    
        $olderApp = $versionAsDate -lt $GranularDLPDate
    
        $wasBackfilled = $app.Internal.properties.executionRestrictions -ne $null -and $app.Internal.properties.executionRestrictions.dataLossPreventionEvaluationResult -ne $null -and ![string]::IsNullOrEmpty($app.Internal.properties.executionRestrictions.dataLossPreventionEvaluationResult.lastAdvancedBackfillDate) 
    
        If($($olderApp -and !$wasBackfilled)){
            Write-Host "App must be republished to be Granular DLP compliant: " $app.AppName " "  $app.Internal.properties.displayName " " $app.Internal.properties.owner.email
        } 
        Else{ 
            Write-Host "App is already Granular DLP compliant: " $app.AppName 
        }
    }
    

终结点输入格式和示例

每个连接器对终结点的含义都有不同的概念。 此外,某些终结点可以多种格式定义。 因此,终结点必须以所有可能的格式输入,以阻止制作者在创建应用和流时使用它们。 创建终结点筛选规则时,管理员可以输入完整的终结点名称或使用与通配符 (*) 匹配的模式。 这些规则在终结点模式的已排序列表中输入和显示,这意味着它们将按数字升序进行评估。 请注意,任何给定连接器的最后一个规则始终为 * 允许或 * 拒绝。 “允许”是默认值,可更改为“拒绝”。

以下指南介绍如何在创建规则以允许或拒绝连接器终结点时输入连接器终结点。

SQL Server

SQL Server 连接终结点必须以 <Server_name, database_name> 格式列出。 需要注意的几个事项:

  • 服务器名称可以由制作者以各种格式输入。 因此,要真正寻址终结点,必须以所有可能的格式输入它。 例如,本地实例可以采用 <machine_name\named_instance, database_name><IP address, custom port, database_name> 格式。 在这种情况下,您必须为终结点同时应用这两种格式的允许或阻止规则。 例如:

    • 阻止 WS12875676\Servername1,MktingDB
    • 阻止 11.22.33.444,1401,MktingDB
  • 没有特殊的逻辑来处理诸如 localhost 等相对地址。 因此,如果您阻止 *localhost*,它将通过使用 localhost 作为 SQL Server 终结点的一部分来阻止制作者使用任何终结点。 但是,它不会阻止他们使用绝对地址访问终结点,除非管理员也阻止了绝对地址。

下面是示例:

  • 仅允许 Azure SQL Server 实例:

    1. 允许 *.database.windows.net*
    2. 拒绝 *
  • 仅允许特定的 IP 范围:(注意,不允许的 IP 地址仍然可以由制作者以 <machine_name\named_instance> 格式输入。)

    1. 允许 11.22.33*
    2. 拒绝 *

Dataverse

Dataverse 终结点由组织 ID 来表示,如 7b97cd5c-ce38-4930-9497-eec2a95bf5f7。 请注意,目前只有常规 Dataverse 连接器在终结点筛选的范围内。 Dataverse 动态和 Dataverse 当前连接器不在范围内。 此外,Dataverse 的本地实例(也称为当前环境)永远不会被阻止在环境中使用。 这意味着在任何给定环境中,制作者始终可以访问 Dataverse 当前环境。

因此,会有一条规则规定:

  1. 允许 7b97cd5c-ce38-4930-9497-eec2a95bf5f7
  2. 拒绝 *

实际意味着:

  1. 允许 Dataverse current environment
  2. 允许 7b97cd5c-ce38-4930-9497-eec2a95bf5f7
  3. 拒绝 *

允许 Dataverse current environment 始终隐式作为任何给定环境的 Dataverse 终结点筛选列表中的第一个规则。

Azure Blob 存储

Azure Blob 存储终结点由 Azure 存储帐户名称表示。

SMTP

SMTP 终结点以 <SMTP server address, port number> 格式表示。

下面是一个示例场景:

  1. 拒绝 smtp.gmail.com,587
  2. 允许 *

带有 Microsoft Entra ID、HTTP Webhook 和 HTTP 连接器的 HTTP

所有 HTTP 连接器的终结点都由 URL 模式表示。 使用 Microsoft Entra 连接器的 HTTP 的获取 Web 资源操作超出范围。

下面是一个示例场景:

仅允许访问 https://management.azure.com/ 中的 Azure 订阅页面。

  1. 允许 https://management.azure.com/subscriptions*
  2. 拒绝 https://management.azure.com/*
  3. 拒绝 *

PowerShell 支持终结点筛选

为策略配置终结点筛选规则

包含策略的终结点筛选规则的对象在下面称为连接器配置。

连接器配置对象具有以下结构:

$ConnectorConfigurations = @{ 
  connectorActionConfigurations = @() # used for connector action rules
  endpointConfigurations = @( # array – one entry per 
    @{  
      connectorId # string
      endpointRules = @( # array – one entry per rule 
        @{ 
          order # number 
          endpoint # string
          behavior # supported values: Allow/Deny
        }
      ) 
    }
  ) 
}

笔记

  • 每个连接器的最后一个规则应始终应用于 URL *,以确保所有 URL 都被规则覆盖。
  • 每个连接器的规则的顺序属性应填充数字 1 到 N,其中 N 是该连接器的规则数。

检索 DLP 策略的现有连接器配置

Get-PowerAppDlpPolicyConnectorConfigurations 

为 DLP 策略创建连接器配置

New-PowerAppDlpPolicyConnectorConfigurations

更新 DLP 策略的连接器配置

Set-PowerAppDlpPolicyConnectorConfigurations

目标:

对于 SQL Server 连接器:

  • 拒绝服务器“myservername.database.windows.net”的数据库“testdatabase”
  • 允许服务器“myservername.database.windows.net”的所有其他数据库
  • 拒绝所有其他服务器

对于 SMTP 连接器:

  • 允许 Gmail(服务器地址:smtp.gmail.com,端口:587)
  • 拒绝所有其他地址

对于 HTTP 连接器:

  • 允许终结点 https://mywebsite.com/allowedPath1https://mywebsite.com/allowedPath2
  • 拒绝所有其他 URL

备注

在以下 cmdlet 中,PolicyName 指的是唯一的 GUID。 您可以通过运行 Get-DlpPolicy cmdlet 来检索 DLP GUID。

$ConnectorConfigurations = @{ 
  endpointConfigurations = @(
    @{  
      connectorId = "/providers/Microsoft.PowerApps/apis/shared_sql" 
      endpointRules = @(
        @{ 
          order = 1 
          endpoint = "myservername.database.windows.net,testdatabase" 
          behavior = "Deny"
        }, 
        @{ 
          order = 2 
          endpoint = "myservername.database.windows.net,*" 
          behavior = "Allow"
        }, 
        @{ 
          order = 3
          endpoint = "*" 
          behavior = "Deny"
        } 
      ) 
    }, 
    @{  
      connectorId = "/providers/Microsoft.PowerApps/apis/shared_smtp" 
      endpointRules = @(
        @{ 
          order = 1 
          endpoint = "smtp.gmail.com,587" 
          behavior = "Allow"
        }, 
        @{ 
          order = 2 
          endpoint = "*" 
          behavior = "Deny"
        } 
      ) 
    },
    @{  
      connectorId = "http" 
      endpointRules = @(
        @{ 
          order = 1 
          endpoint = "https://mywebsite.com/allowedPath1" 
          behavior = "Allow"
        }, 
        @{ 
          order = 2
          endpoint = "https://mywebsite.com/allowedPath2" 
          behavior = "Allow"
        }, 
        @{ 
          order = 3
          endpoint = "*" 
          behavior = "Deny"
        } 
      ) 
    } 
  ) 
}
New-PowerAppDlpPolicyConnectorConfigurations -TenantId $TenantId -PolicyName $PolicyName -NewDlpPolicyConnectorConfigurations $ConnectorConfigurations