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

通过专用终结点建立出站连接

许多 Azure 资源(例如 Azure 存储帐户)可配置为接受来自一组虚拟网络的连接,并拒绝来自公共网络的外部连接。 如果使用索引器,并且 Azure PaaS 数据源位于专用网络上,则可以创建 Azure 认知搜索使用的出站专用终结点连接来访问数据。

对于 Azure 存储,如果存储帐户和搜索服务位于同一区域,出站流量就会使用专用 IP 地址与存储通信,并通过 Microsoft 主干网络执行相应操作。 对于这种情况,可以通过 Azure 认知搜索省略专用终结点。 对于其他 Azure PaaS 资源,建议查看这些资源的网络文档,以确定专用终结点是否有用。

若要创建索引器可以使用的专用终结点,请使用 Azure 门户或 Azure 认知搜索管理 REST API 中的创建或更新共享专用链接操作。 搜索服务使用的专用终结点是使用认知搜索 API 或用于 Azure 认知搜索的门户页面创建的。

术语

通过 Azure 认知搜索 API 创建的专用终结点称为“共享的专用链接”或“托管的专用终结点”。 “共享的专用链接”的概念是,一个 Azure PaaS 资源已通过 Azure 专用链接服务拥有一个专用终结点,而 Azure 认知搜索正在共享访问权限。 尽管访问权限是共享的,但共享的专用链接会创建自己的专用连接,该连接由 Azure 认知搜索独占使用。 共享专用链接是一种 Azure 认知搜索与专用网络中资源建立连接的机制。

先决条件

  • 必须预先向 Azure 专用链接服务注册提供内容或代码的 Azure 资源。

  • 搜索服务必须是基本层或更高级别。 如果你使用的是 AI 扩充和技能集,则该级别必须是标准 2 (S2) 或更高版本。 请参阅服务限制

  • 如果要连接到预览数据源(如适用于 MySQL 的 Azure 数据库或 Azure Functions),请使用管理 REST API 的预览版本来创建共享专用链接。 支持共享专用链接的预览版本包括 2020-08-01-preview2021-04-01-preview

  • 来自搜索客户端的连接应通过编程方式(REST API 或 Azure SDK)而不是 Azure 门户建立。 设备必须使用 Azure PaaS 资源防火墙规则中的授权 IP 进行连接。

  • 索引器执行必须使用特定于搜索服务的专用执行环境。 多租户环境不支持专用终结点连接。 本文中提供了针对此要求的说明。

  • 如果使用 Azure 门户创建共享的专用链接,请确保在数据源资源防火墙中启用对所有公共网络的访问,否则,在尝试创建对象时会出现错误。 只需在设置共享的专用链接时启用访问权限即可。 如果无法为此任务启用访问权限,请从在防火墙规则中有授权 IP 的设备使用 REST API。

注意

不支持导入数据向导或通过共享的专用链接从门户调用基于索引器的索引。

支持的资源和组 ID

下表列出了可从 Azure 认知搜索为其创建托管专用终结点的 Azure 资源。

设置共享私有链接资源时,请确保组 ID 值准确。 值区分大小写,并且必须与下表中显示的值相同。 请注意,对于多个资源和功能,你需要设置两个 ID。

Azure 资源 组 ID
Azure 存储 - Blob blob1,2
Azure 存储 - Data Lake Storage Gen2 dfsblob
Azure 存储 - 表 table2
Azure Cosmos DB - SQL API Sql
Azure SQL 数据库 sqlServer
Azure Database for MySQL(预览版) mysqlServer
用于客户管理的密钥的 Azure 密钥保管库 vault
Azure Functions(预览版)3 sites

1如果你启用了扩充缓存,并且到 Azure Blob 存储的连接是通过私有的终结点,请确保有一个共享的类型的私有链接。blob

2 如果你将数据投射到知识存储,并且到 Azure Blob 存储和 Azure Table 存储的连接是通过专用终结点,那么请确保有两个共享的私有链接,类型分别为 blobtable

3 Azure Functions(预览版)是指消耗计划、高级计划和专用应用服务计划下的 Functions。 目前不支持应用服务环境 (ASE)Azure Kubernetes 服务 (AKS)

提示

可以使用支持的 API 列表查询支持的资源和组 ID 的列表。

以下部分介绍如何使用 Azure 门户或 Azure CLI 创建共享专用链接资源。

Azure 门户仅支持使用正式版组 ID 值创建共享专用链接资源。 对于 MySQL 专用链接(预览版)Azure Functions 专用链接(预览版),请使用 Azure CLI。

  1. 登录到 Azure 门户找到你的搜索服务

  2. 在左侧导航窗格上的“设置”下,选择“网络”。

  3. 在“共享专用访问”选项卡上,选择“+ 添加共享专用访问”。

  4. 在右侧打开的边栏选项卡中,选择“连接到目录中的 Azure 资源”或“按资源 ID 或别名连接到 Azure 资源”。

  5. 如果选择第一个选项时(推荐使用),边栏选项卡将帮助你选择适当的 Azure 资源,且会为你填充其他属性,如资源的组 ID 和资源类型。

    “添加共享专用访问”窗格的屏幕截图,其中显示了创建共享专用链接资源的引导式体验。

  6. 如果选择第二个选项,请手动输入 Azure 资源 ID,然后从本文开头的列表中选择相应的组 ID。

    “添加共享专用访问”窗格的屏幕截图,其中显示了创建共享专用链接资源的手动操作体验。

2 - 检查专用终结点创建状态

在此步骤中,你将确认资源的预配状态更改为“已成功”。

可以使用门户检查正式发布资源和预览资源的预配状态。

门户将显示共享专用终结点的状态。 下例显示“正在更新”的状态。

“添加共享专用访问”窗格的屏幕截图,其中显示正在创建资源。

成功创建资源后,用户将收到门户通知,并且资源的预配状态将更改为“成功”。

“添加共享专用访问”窗格的屏幕截图,其中显示已完成的资源创建。

3 - 批准专用终结点连接

在本部分中,你会使用 Azure 门户完成连接到 Azure 资源的专用终结点审批流。 或者,可以使用通过存储资源提供程序提供的 REST API

其他提供程序(如 Azure Cosmos DB 或 Azure SQL Server)提供了类似的资源提供程序 REST API 来管理专用终结点连接。

  1. 在 Azure 门户中,找到要连接到的 Azure 资源,然后打开“网络”页。

  2. 找到列出专用终结点连接的部分。 下面是存储帐户的示例。 异步操作成功后,应该会有一个专用终结点连接的请求,请求消息来自于之前的 API 调用。

    Azure 门户的屏幕截图,其中显示“专用终结点”窗格。

  3. 选择 Azure 认知搜索创建的专用终结点。 在“专用终结点”列中,使用在前面的 API 中指定的名称标识专用终结点连接,选择“批准”,然后输入相应的消息 。 消息内容不重要。

    请确保显示的专用终结点连接如以下屏幕截图所示。 状态可能需要一到两分钟的时间才能在门户中更新。

    Azure 门户的屏幕截图,显示“专用终结点连接”窗格上的“已批准”状态。

批准专用终结点连接请求后,流量就能通过专用终结点传输。 批准专用终结点后,Azure 认知搜索会在为其创建的 DNS 区域中创建所需的 DNS 区域映射。

若要在批准后确认共享专用链接资源已更新,请在 Azure 门户上重新访问搜索服务“联网”页的“共享专用访问”边栏选项卡,并检查“连接状态”。

Azure 门户的屏幕截图,其中显示“已批准”共享专用链接资源。

或者,也可以使用 GET API 获取“连接状态”。

az rest --method get --uri https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Search/searchServices/contoso-search/sharedPrivateLinkResources/blob-pe?api-version=2020-08-01

这会返回一个 JSON,其中连接状态会在“属性”部分下显示为“状态”。 下面是存储帐户的示例。

{
      "name": "blob-pe",
      "properties": {
        "privateLinkResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Storage/storageAccounts/contoso-storage",
        "groupId": "blob",
        "requestMessage": "please approve",
        "status": "Approved",
        "resourceRegion": null,
        "provisioningState": "Succeeded"
      }
}

如果资源的“预配状态”(properties.provisioningState) 为 Succeeded,“连接状态”(properties.status) 为 Approved,则表示共享专用链接资源正常工作,索引器可以配置为通过专用终结点进行通信。

5 - 保护 Azure 资源

限制访问的步骤因资源而异。 以下方案显示了三种更常见的资源类型。

  • 方案 1:Azure 存储

    以下示例演示如何配置 Azure 存储帐户防火墙。 若选择此选项并将页面留空,则表示不允许来自虚拟网络的流量。

    Azure 存储“防火墙和虚拟网络”窗格的屏幕截图,显示允许访问所选网络的选项。

  • 方案 2:Azure Key Vault

    以下示例演示如何配置 Azure 密钥保管库防火墙。

    Azure Key Vault“防火墙和虚拟网络”窗格的屏幕截图,显示允许访问所选网络的选项。

  • 方案 3:Azure Functions

    无需为 Azure Functions 防火墙更改网络设置。 该函数将自动仅允许在创建共享专用终结点到函数后通过专用链接进行访问。

6 - 将索引器配置为在专用环境中运行

索引器执行发生在特定于搜索服务的专用环境中,或者发生在内部用于为多个客户卸载昂贵的技能集处理的多租户环境中。 执行环境通常是透明的,但是一旦开始构建防火墙规则或建立专用连接,就必须考虑索引器的执行。 对于专用终结点,需要确保索引器执行始终在专用环境中进行。

此步骤演示如何将索引器配置为使用 REST API 在专用环境中运行。 你也可在门户中使用 JSON 编辑器设置执行环境。

注意

你可以在批准专用终结点连接之前执行此步骤。 然而,在专用终结点连接显示为已批准之前,任何尝试与安全资源(如存储帐户)进行通信的现有索引器都会最终处于暂时性故障状态,将无法创建新索引器。

  1. 如常创建数据源定义、索引和技能组(若正在使用某个技能组)。 使用共享专用终结点时,这些定义中的属性不会发生任何变化。

  2. 创建一个索引器,该索引器指向在前面的步骤中创建的数据源、索引和技能组。 此外,通过将索引器的 executionEnvironment 配置属性设置为 private,强制索引器在专用执行环境中运行。

    {
        "name": "indexer",
        "dataSourceName": "blob-datasource",
        "targetIndexName": "index",
        "parameters": {
            "configuration": {
                "executionEnvironment": "private"
            }
        },
        "fieldMappings": []
    }
    

    下面是 Postman 的请求示例。

    显示在 Postman 用户界面上创建索引器的屏幕截图。

成功创建索引器后,它应通过专用终结点连接到 Azure 资源。 你可以使用索引器状态 API 来监视索引器的状态。

注意

若已具备现有索引器,你可将 executionEnvironment 设置为 private或在门户中使用 JSON 编辑器,以便通过 PUT API 进行更新。

故障排除

  • 如果索引器创建失败,导致“数据源凭据无效”,请在调试连接之前检查共享专用链接的批准状态:

    1. 使用 GET API 获取共享专用链接资源的状态。
    2. 如果状态为 Approved,则检查 properties.provisioningState 属性。
    3. 如果是 Incomplete,则基础依赖项可能存在问题。
    4. 在这种情况下,请重新发出 PUT 请求以重新创建共享的专用链接。 你可能还需要重复审批步骤。
    5. 重新检查资源的状态以验证问题是否已解决。
  • 如果索引器持续或间歇性地失败,请检查索引器上的 executionEnvironment 属性。 该值应设置为 private。 如果你没有设置此属性,并且索引器运行在过去成功了,这是因为搜索服务自行使用了一个私有环境。 如果系统处于负载状态,搜索服务将把处理移出标准环境。

  • 在门户中,在数据源的“网络”页上查看搜索专用终结点时,应显示“无访问权限”。 如果要管理共享的专用链接以在门户中进行搜索,请使用搜索服务的“网络”页。

  • 如果在创建共享专用链接时收到错误,请检查服务限制以验证是否低于层的配额。

  • 如果已创建映射到存储帐户的共享的专用链接,则没有技能组的搜索服务中的任何索引器都可以访问此存储帐户。

  • 如果索引器没有技能组并使用共享的专用链接连接到数据源,则无需将索引器 executionEnvironment 配置属性配置为 private。 仅当运行技能组时才有必要这样做。

后续步骤

详细了解专用终结点和其他安全连接方法: