Azure AI 搜索的安全性概述

本文介绍 Azure AI 搜索中保护数据和操作的安全功能。

数据流(网络流量模式)

Azure AI 搜索服务托管在 Azure 上,通常由客户端应用程序通过公用网络连接来访问。 虽然这种模式是主要模式,但它并不是你唯一需要关注的流量模式。 了解所有入口点和出站流量是保护开发和生产环境的必要背景知识。

Azure AI 搜索具有三种基本的网络流量模式:

  • 客户端向搜索服务发出的入站请求(主要模式)
  • 搜索服务向 Azure 和第三方的其他服务发出的出站请求
  • 通过安全 Azure 主干网络的内部服务到服务请求

入站流量

面向搜索服务终结点的入站请求的特征为:

  • 创建或管理索引、索引器、数据源、技能组和同义词映射
  • 触发索引器或技能组执行
  • 加载或查询索引

可以查看 REST API,了解搜索服务处理的全部入站请求。

至少必须对所有入站请求进行身份验证:

  • 默认使用基于密钥的身份验证。 包含有效 API 密钥的入站请求被搜索服务接受为源自受信任的一方。
  • Microsoft Entra ID 和基于角色的访问控制也广泛用于数据平面操作。

此外,还可以添加网络安全功能,以进一步限制对终结点的访问。 可以在 IP 防火墙中创建入站规则,也可以创建全面保护搜索服务免受公共 Internet 影响的专用终结点。

出站流量

索引器通常会发出从搜索服务到其他应用程序的出站请求以实现基于文本的索引、基于技能的 AI 扩充和矢量化。 出站请求包括读取和写入操作。

以下列表是搜索服务可以发出的出站请求的完整枚举。 搜索服务代表自己以及索引器或自定义技能发出请求:

  • 从外部数据源读取的索引器。
  • 在创建知识存储、持久缓存扩充和持久调试会话时,索引器写入 Azure 存储。
  • 如果使用自定义技能,自定义技能会连接到外部 Azure 函数或应用,以运行在服务外托管的外部代码。 在技能集执行期间发送用于外部处理的请求。
  • 如果使用客户管理的密钥,该服务会连接到外部 Azure 密钥保管库,以获取用于加密和解密敏感数据的客户管理的密钥。

可以使用资源的完全访问连接字符串建立出站连接,该连接字符串包括一个密钥或数据库登录名,或者包括 托管标识(如果使用 Microsoft Entra ID 和基于角色的访问)。

对于防火墙后面的 Azure 资源,请创建允许搜索服务请求的入站规则

对于受 Azure 专用链接保护的 Azure 资源,请创建索引器用来建立连接的共享专用链接

同区域搜索和存储服务的例外

如果 Azure 存储和 Azure AI 搜索位于同一区域,则网络流量通过专用 IP 地址路由并出现在 Azure 主干网络上。 由于使用了专用 IP 地址,因此无法为网络安全配置 IP 防火墙或专用终结点。

使用以下任一方法配置同一区域连接:

内部流量

内部请求由 Azure 保护和管理。 你无法配置或控制这些连接。 如果你要锁定网络访问,不需要在你这边执行任何操作,因为内部流量是客户无法配置的。

内部流量包括:

  • 通过 Microsoft Entra ID、发送到 Azure Monitor 的资源日志记录以及利用 Azure 专用链接的专用终结点连接,对身份验证和授权等任务进行服务到服务调用。
  • 为使用内置技能而向 Azure AI 服务 API 发出的请求。

网络安全

网络安全通过向网络流量应用控制来保护资源免受未经授权的访问或攻击。 Azure AI 搜索支持网络功能,这些功能可以成为防御未经授权的访问的前线。

通过 IP 防火墙的入站连接

搜索服务预配有允许使用公共 IP 地址访问的公共终结点。 若要限制哪些流量通过公共终结点,请创建入站防火墙规则,以允许来自特定 IP 地址或一系列 IP 地址的请求。 所有客户端连接必须通过允许的 IP 地址建立,否则连接将被拒绝。

sample architecture diagram for ip restricted access

可以使用门户配置防火墙访问

或者,可以使用管理 REST API。 从 API 版本 2020-03-13 开始,利用 IpRule 参数,可以通过标识希望向其授予搜索服务访问权限的 IP 地址(单个或在某个范围内)来限制对服务的访问。

到专用终结点的入站连接(网络隔离,无 Internet 流量)

为了增强安全性,可以为 Azure AI 搜索建立专用终结点,允许虚拟网络上的客户端通过专用链接安全地访问搜索索引中的数据。

专用终结点将虚拟网络地址空间中的 IP 地址用于到搜索服务的连接。 客户端与搜索服务之间的网络流量将穿过虚拟网络以及 Azure 主干网络上的专用链接,不会从公共 Internet 公开。 虚拟网络允许在资源间通过本地网络以及 Internet 进行安全通信。

sample architecture diagram for private endpoint access

虽然这种解决方案是最安全的,但使用其他服务会增加成本,因此,在开始之前请先确保清楚地了解其中的益处。有关费用的详细信息,请参阅定价页。 涉及专用终结点方案的内容从该视频中 5:48 开始。 有关如何设置终结点的说明,请参阅为 Azure AI 搜索创建专用终结点

身份验证

搜索服务接受请求后,请求仍必须接受身份验证和授权,以确定是否允许该请求。 Azure AI 搜索支持两种方法:

  • Microsoft Entra 身份验证将调用方(而不是请求)建立为经过身份验证的标识。 Azure 角色分配决定授权。

  • 通过 API 密钥针对请求(而非针对调用方应用或用户)执行基于密钥的身份验证,其中,密钥是由随机生成的数字和字母组成的字符串,这些数字和字母用于证明请求来自可靠来源。 需要在每个请求中提供密钥。 提交有效密钥被视为请求源自受信任实体的证明。

可以使用这两种身份验证方法,或者禁用在搜索服务上不需要的方法

授权

Azure AI 搜索为服务管理和内容管理提供授权模型。

授权服务管理

资源管理是通过 Azure 基于角色的访问控制 (Azure RBAC) 授权的。 Azure RBAC 是适用于 Azure 资源管理器的授权系统。

在 Azure AI 搜索中,资源管理器用于创建或删除服务,管理 API 密钥,缩放服务以及配置安全性。 因此,Azure 角色分配将确定哪些用户可以执行那些任务,而不考虑他们是使用门户PowerShell 还是管理 REST API

三种基本角色(所有者、参与者、读取者)适用于搜索服务管理。 可以使用任何受支持的方法(门户、PowerShell,等等)来完成角色分配,并且角色分配是在服务范围内执行的。

注意

利用 Azure 范围内的机制,可以锁定订阅或资源,以防止具备管理员权限的用户意外或在未经授权的情况下删除搜索服务。 有关详细信息,请参阅锁定资源以防止意外删除

授权访问内容

内容管理是指在搜索服务上创建和托管的对象。

  • 对于基于角色的授权,请使用 Azure 角色分配建立对操作的读写访问权限。

  • 对于基于密钥的授权,API 密钥和限定的终结点会确定访问权限。 终结点可能是服务本身、索引集合、特定索引、文档集合或特定文档。 链接在一起时,终结点、操作(例如,创建或更新请求)以及密钥类型(管理员或查询)授权访问内容和操作。

限制对索引的访问

使用 Azure 角色,可以对单个索引设置权限,只要它是以编程方式执行的。

使用密钥,拥有服务的管理员密钥的任何人都可以读取、修改或删除同一服务中的任何索引。 为了防止意外删除或恶意删除索引,代码资产的内部源代码管理可以作为一种解决方案来还原意外的索引删除或修改。 Azure AI 搜索在群集中提供故障转移功能来确保可用性,但它不会存储或执行用于创建或加载索引的专属代码。

对于需要在索引级别设置安全边界的多租户解决方案,通常会在应用程序代码的中间层处理索引隔离。 有关多租户用例的详细信息,请参阅多租户 SaaS 应用程序与 Azure AI 搜索的设计模式

限制对文档的访问

Azure AI 搜索本身不支持文档级别的用户权限(也称为“行级安全性”)。 如果从提供行级别安全性的外部系统(例如 Azure Cosmos DB)导入数据,则这些权限不会随着数据被 Azure AI 搜索索引而转移。

如果需要对搜索结果中的内容进行经过授权的访问,可以使用一种技术来应用基于用户标识包含或排除文档的筛选器。 此解决方法在数据源中添加一个表示组或用户标识的字符串字段,你可以在索引中将该字段设为可筛选。 下表描述了修整未经授权内容的搜索结果的两种方法。

方法 说明
基于标识筛选器的安全修整 阐述实现用户标识访问控制的基本工作流。 该工作流包括将安全标识符添加到索引,然后解释如何针对该字段进行筛选,以修整受禁内容的结果。
基于 Microsoft Entra 标识的安全修整 此文延伸了前一篇文章的内容,提供了有关从 Microsoft Entra ID(Azure 云平台中的一个免费服务)检索标识的步骤。

数据驻留

设置搜索服务时,请选择一个位置或区域,该位置或区域决定了在何处存储和处理客户数据。 Azure AI 搜索不会将客户数据存储在指定区域之外,除非你配置的功能依赖于另一个 Azure 资源,并且该资源在另一个区域中预配。

目前,搜索服务将客户数据写入到其中的唯一外部资源是 Azure 存储。 存储帐户是你提供的帐户,它可能位于任何区域中。 如果使用以下任一功能,搜索服务将写入 Azure 存储:扩充缓存调试会话知识存储

数据驻留承诺的例外

对象名称将在你选择的区域或位置之外存储和处理。 客户不得在名称字段中存储任何敏感数据,也不得创建旨在将敏感数据存储到这些字段的应用程序。 这些数据将显示在供 Azure 用来为服务提供支持的遥测日志中。 对象名称包括索引、索引器、数据源、技能组、资源、容器和密钥保管库存储的名称。

遥测日志保留一年半。 在此期间,Azure 可能会在以下情况下访问和引用对象名称:

  • 诊断问题、改进功能或修复 bug。 在这种情况下,数据访问仅限于内部,没有第三方访问。

  • 在提供支持期间,可以使用此信息来快速解决问题,并在需要时上报给产品团队

数据保护

在存储层,为所有保存到磁盘的服务托管内容(包括索引、同义词映射,以及索引器、数据源和技能组的定义)内置了数据加密。 服务托管加密同时适用于长期数据存储和临时数据存储。

(可选)你可以添加客户管理的密钥 (CMK) 用于已编制索引内容的补充加密,以对静态数据进行双重加密。 对于 2020 年 8 月 1 日后创建的服务,CMK 加密延伸到临时磁盘上的短期数据。

传输中的数据

在 Azure AI 搜索中,加密从连接和传输开始。 对于公共 Internet 上的搜索服务,Azure AI 搜索会侦听 HTTPS 端口 443。 客户端到服务的所有连接都使用 TLS 1.2 加密。 不支持更早的版本(1.0 或 1.1)。

静态数据

对于由搜索服务在内部处理的数据,下表介绍了数据加密模型。 有些功能(如知识库、增量扩充和基于索引器的索引编制)会读取或写入其他 Azure 服务中的数据结构。 依赖于 Azure 存储的服务可以使用该技术的加密功能

型号 密钥 要求 限制 适用于
服务器端加密 Azure 托管的密钥 无(内置) 无,可在所有层级、所有区域使用,适用于 2018 年 1 月 24 日后创建的内容。 数据磁盘和临时磁盘上的内容(索引和同义词映射)和定义(索引器、数据源、技能组)
服务器端加密 客户管理的密钥 Azure Key Vault 可在计费层级、特定区域使用,适用于 2020 年 8 月 1 日后创建的内容。 数据磁盘上的内容(索引和同义词映射)
服务器端完全加密 客户管理的密钥 Azure Key Vault 可在计费层级、所有区域使用,适用于 2021 年 5 月 13 日后的搜索服务。 数据磁盘和临时磁盘上的内容(索引和同义词映射)

服务托管的密钥

服务托管加密是使用 256 位 AES 加密的 Microsoft 内部操作。 加密自动对所有索引进行,包括对未完全加密的索引(在 2018 年 1 月前创建)的增量更新。

服务托管加密适用于长期和短期存储上的所有内容。

客户管理的密钥 (CMK)

客户管理的密钥需要其他的计费服务 Azure Key Vault,它与 Azure AI 搜索可以位于不同区域,但需位于同一订阅下。

CMK 支持分两个阶段推出。 如果在第一阶段创建了搜索服务,则 CMK 加密仅限于长期存储和特定区域。 在第二阶段(2021 年 5 月之后)创建的服务可以在任何区域中使用 CMK 加密。 作为第二波推出的一部分,内容在长期和短期存储上都是 CMK 加密的。 有关 CMK 支持的详细信息,请参阅完全双重加密

启用 CMK 加密会增大索引大小,降低查询性能。 根据迄今为止的观察结果,查询时间预期会增加 30%-60%,不过,实际性能根据索引定义和查询类型而有所不同。 由于负面的性能影响,我们建议仅对真正需要此功能的索引启用此功能。 有关详细信息,请参阅在 Azure AI 搜索中配置客户管理的加密密钥

安全管理

管理 API 密钥

依靠基于 API 密钥的身份验证表明你应该按照 Azure 安全最佳做法来制定计划,以便定期重新生成管理密钥。 每个搜索服务最多有两个管理密钥。 若要详细了解如何保护和管理 API 密钥,请参阅创建和管理 API 密钥

活动和资源日志

Azure AI 搜索不会记录用户标识,因此,你无法参考日志来了解有关某个特定用户的信息。 但是,该服务会记录“创建-读取-更新-删除”操作,你也许可以将这些操作与其他日志关联,以了解特定操作的代理。

通过使用 Azure 中的警报和日志记录基础结构,可以选择查询量峰值或其他偏离预期工作负载的操作。 若要详细了解如何设置日志,请参阅收集和分析日志数据监视查询请求

认证和合规性

Azure AI 搜索参与定期审核,并且已经在公有云和由世纪互联运营的 Microsoft Azure 两方面获得了多项全球性、区域性和特定行业性标准的认证。 如需完整列表,请从官方审核报告页下载 Azure 合规性产品/服务白皮书

为实现合规性,可以使用 Azure Policy 来实现 Microsoft 云安全基准的高安全性最佳做法。 Azure 云安全基准是一系列安全建议的集合,被编入到安全控制措施中,这些控制措施映射到你应该采取的关键行动,以减轻对服务和数据的威胁。 目前有 12 项安全控制措施,包括网络安全、日志记录和监视以及数据保护

Azure Policy 是 Azure 中内置的一项功能,可帮助你管理对多个标准(包括 Azure 安全基准的标准)的符合性。 对于众所周知的基准,Azure Policy 提供了内置定义,这些定义既提供了标准,又提供了解决非符合性的可操作响应。

对于 Azure AI 搜索,当前有一个内置定义。 此定义用于资源日志记录。 可以分配一个用于标识缺少资源日志记录的搜索服务的策略,然后启用它。 有关详细信息,请参阅 Azure AI 搜索的 Azure Policy 法规符合性控制

另请参阅