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

Azure AI 搜索中的安全性

Azure AI 搜索跨网络访问、数据访问和数据保护提供全面的安全控制,以满足企业要求。 作为解决方案架构师,你应该了解三个关键安全域:

  • 网络流量模式和网络安全:入站、出站和内部流量。
  • 访问控制机制:具有角色的 API 密钥或Microsoft Entra ID。
  • 数据驻留和保护:传输中加密、用于可选机密计算以及静态加密(可选双重加密)。

搜索服务支持多种网络安全拓扑,从用于基本保护的 IP 防火墙限制,到实现完整网络隔离的专用终结点。 (可选)使用网络安全外围围绕 Azure PaaS 资源创建逻辑边界。 对于需要精细权限的企业方案,可以实现文档级访问控制。 所有安全功能都与 Azure 的符合性框架集成,并支持使用托管标识进行多租户和跨服务身份验证等常见企业模式。

本文详细介绍了每个安全层的实现选项,以帮助为开发和生产环境设计适当的安全体系结构。

网络流量模式

可以在 Azure 公有云、Azure 私有云或主权云(如 Azure 政府)中托管 Azure AI 搜索服务。 默认情况下,所有云主机上的搜索服务通常通过公共网络由客户端应用程序访问。 虽然这种模式是主要模式,但它并不是你唯一需要关注的流量模式。 了解所有入口点和出站流量是保护开发和生产环境的必要背景知识。

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

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

入站流量

面向搜索服务终结点的入站请求包括:

  • 在搜索服务上创建、读取、更新或删除索引和其他对象
  • 使用搜索文档加载和编制索引
  • 查询索引
  • 运行索引器或技能集作业

REST API 描述搜索服务处理的各种入站请求。

至少必须使用以下选项之一对所有入站请求进行身份验证:

  • 基于密钥的身份验证(默认)。 入站请求提供有效的 API 密钥。
  • 基于角色的访问控制。 授权是通过搜索服务上的 Microsoft Entra 标识和角色分配进行的。

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

出站流量

出站请求可以由你进行保护和管理。 出站请求由搜索服务发起,发送至其他应用程序。 这些请求通常由索引器在查询时针对基于文本和多模式索引、基于自定义技能的 AI 扩充和矢量化进行。 出站请求包括读取和写入操作。

以下列表完整列举了可为其配置安全连接的出站请求。 搜索服务代表自己以及索引器或自定义技能发出请求。

Operation Scenario
Indexers 连接到外部数据源以检索数据(只读权限)。 有关详细信息,请参阅索引器访问受 Azure 网络安全性保护的内容
Indexers 连接到 Azure 存储,以便对 知识存储缓存扩充调试会话 进行写入操作。
自定义技能 连接到 Azure 函数、Azure Web 应用,或连接到运行服务外托管的外部代码的其他应用。 外部处理请求会在技能组执行期间发送。
索引器和集成矢量化 连接到 Azure OpenAI 和部署的嵌入模型,或者通过自定义技能连接到你提供的嵌入模型。 搜索服务将文本发送到嵌入模型以在索引编制期间进行矢量化。
Vectorizers 在查询时连接到 Azure OpenAI 或其他嵌入模型,以将用户文本字符串转换为矢量来进行矢量搜索。
知识代理 连接到聊天完成模型,以便进行智能体检索查询规划,并基于搜索结果制定答案。

如果要实现 基本的 RAG 模式,则查询逻辑会调用外部聊天完成模型来构建基于搜索结果的答案。 对于此模式,与模型的连接使用客户端或用户的标识。 搜索服务标识不用于连接。 相比之下,如果在 RAG 检索模式中使用 知识代理 ,则出站请求由搜索服务托管标识发出。

搜索服务 连接到 Azure Key Vault 以获取客户管理的加密密钥,它用于加密和解密敏感数据。

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

若要访问防火墙后面的 Azure 资源,请在允许搜索服务请求的其他 Azure 资源上创建入站规则

若要访问受 Azure 专用链接保护的 Azure 资源,请创建索引器用来建立连接的共享专用链接

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

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

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

内部流量

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

内部流量包括:

  • 通过 Microsoft Entra ID、发送到 Azure Monitor 的资源日志记录以及利用 Azure 专用链接的专用终结点连接,对身份验证和授权等任务进行服务到服务调用。
  • 内置技能处理的请求,其中同地区的请求被定向到内部托管的 Azure AI 多服务资源,该资源专门用于 Azure AI 搜索的内置技能处理。
  • 向支持语义排名的各种模型发出的请求。

网络安全

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

通过 IP 防火墙的入站连接

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

IP 受限访问的示例体系结构图

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

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

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

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

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

专用终结点访问的示例体系结构关系图

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

网络安全边界

网络安全边界是围绕平台即服务(PaaS)资源的逻辑网络边界,这些资源部署在虚拟网络之外。 它建立一个外围,用于控制对 Azure AI 搜索、Azure 存储和 Azure OpenAI 等资源的公用网络访问。 可以通过显式访问规则为入站和出站流量授予例外。 此方法有助于防止数据外泄,同时维护应用程序所需的连接。

入站客户端连接和服务到服务连接发生在边界内,这简化了防御,并加强了针对未经授权的访问的防御。 Azure AI 搜索解决方案中常见的是使用多个 Azure 资源。 以下资源都可以联接到 现有的网络安全外围

有关符合条件的服务的完整列表,请参阅 载入的专用链接资源

Authentication

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

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

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

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

基于密钥的身份验证是数据平面作(在搜索服务上创建和使用对象)的默认值。 可以使用这两种身份验证方法,或者禁用在搜索服务上不需要的方法

Authorization

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

特权访问

在新的搜索服务中,订阅级别的现有角色分配由搜索服务继承,只有所有者和用户访问管理员可以授予访问权限。

控制平面操作(服务或资源创建和管理)任务仅通过角色分配进行授权,不能使用基于密钥的身份验证来进行服务管理。

控制平面操作包括创建、配置或删除服务,以及管理安全性。 因此,Azure 角色分配将确定哪些用户可以执行那些任务,而不考虑他们是使用门户PowerShell 还是管理 REST API

三种基本角色(所有者、参与者、读取者)适用于搜索服务管理。

Note

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

授权访问内容

数据平面操作是指在搜索服务上创建和使用的对象。

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

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

限制对索引的访问

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

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

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

限制对文档的访问

文档级别(也称为 行级安全性)的用户权限可用作预览功能,具体取决于数据源。 如果内容源自 Azure Data Lake Storage (ADLS) Gen2Azure Blob,则源自 Azure 存储的用户权限元数据将保留在索引器生成的索引中,并在查询时强制执行,以便仅将授权的内容包含在搜索结果中。

对于其他数据源,可以 推送包含用户或组权限元数据的文档有效负载,这些权限保留在索引内容中,并在查询时强制执行。 此功能也以预览模式提供。

如果您无法使用预览功能,并且需要对搜索结果内容进行有权限的访问,可以应用根据用户身份标识来包含或排除文档的筛选器。 此解决方法在数据源中添加一个表示组或用户标识的字符串字段,你可以在索引中将该字段设为可筛选。 有关此模式的详细信息,请参阅基于标识筛选器的安全修整。 有关文档访问的详细信息,请参阅 文档级访问控制

数据驻留

设置搜索服务时,可以选择一个用于确定在何处存储和处理客户数据的区域。 每个区域都存在于一个地理位置,后者通常包括多个区域(例如,瑞士是包含瑞士北部和瑞士西部的地理区域)。 Azure AI 搜索可能会将数据复制到同一地理位置中的另一个区域,以实现持久性和高可用性。 该服务不会将客户数据存储在指定区域之外,也不会在指定区域之外处理客户数据,除非你配置的功能依赖于另一个 Azure 资源,并且该资源在另一个区域中预配。

目前,搜索服务写入到的唯一外部资源是 Azure 存储。 存储帐户是你提供的帐户,它可能位于任何区域中。 如果使用下列任一功能,搜索服务会写入 Azure 存储:

有关数据驻留的详细信息,请参阅 Azure 中的数据驻留

数据驻留承诺的例外情况

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

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

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

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

数据保护

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

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

传输中的数据

对于通过公共 Internet 进行的搜索服务连接,Azure AI 搜索会侦听 HTTPS 端口 443。

对于客户端到服务通道加密,Azure AI 搜索支持 TLS 1.2 和 1.3:

更低的 TLS 版本(1.0 或 1.1)不受支持。

有关详细信息,请参阅 .NET Framework 中的 TLS 支持

正在使用的数据

默认情况下,Azure AI 搜索在标准 Azure 基础结构上部署搜索服务。 此基础结构对静态和传输中的数据进行加密,但在内存中主动处理数据时不会保护数据。

(可选)可以使用 Azure 门户或服务 - 创建或更新(REST API)在创建服务期间配置机密计算。 机密计算技术通过硬件真实性检验和加密保护使用中的数据免受未经授权的访问,包括防止来自Microsoft的访问。 有关详细信息,请参阅 机密计算用例

下表比较了两种计算类型。

计算类型 Description 局限性 成本 可用性
违约 使用内置加密在标准虚拟机上处理数据,保护静态数据和传输中的数据。 不使用基于硬件的数据隔离。 没有限制。 不会更改免费层或计费层的基本成本。 在所有区域中都可用。
Confidential 在基于硬件的受信任执行环境中处理机密 VM(DCasv5 或 DCesv5)上的数据。 将计算和内存与主机作系统和其他 VM 隔离开来。 禁用或限制代理检索语义排名器查询重写技能集执行和在多租户环境中运行的索引器1。 在计费层级的基础成本上增加 10% 的附加费。 有关详细信息,请参阅定价页 在某些区域中可用。 有关详细信息,请参阅 支持的区域列表

1 启用此计算类型时,索引器只能在专用执行环境中运行,这意味着它们从托管在机密计算上的搜索群集运行。

重要

我们仅建议对符合性或法规要求需要数据使用保护的组织进行机密计算。 对于每日使用,默认计算类型就足够了。

静态数据

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

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

引入 CMK 加密时,你会将内容加密两次。 对于上一部分中提到的对象和字段,首先使用 CMK 加密内容,然后使用 Microsoft 管理的密钥进行加密。 在用于长期存储的数据磁盘和用于短期存储的临时磁盘上,内容均进行双重加密。

服务托管的密钥

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

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

客户管理的密钥 (CMK)

客户出于两个原因使用 CMK:额外的保护以及撤销密钥的功能,从而阻止访问内容。

客户管理的密钥需要另一个计费服务(Azure Key Vault),该服务可以位于不同的区域,但与 Azure AI 搜索位于同一 Azure 租户下。

CMK 支持分两个阶段推出。 如果在第一阶段创建了搜索服务,则 CMK 加密仅限于长期存储和特定区域。 在第二阶段创建的服务可以在任何区域中使用 CMK 加密。 作为第二波推出的一部分,内容在长期和短期存储上都是 CMK 加密的。

  • 第一次推出是在 2020 年 8 月 1 日,包括以下五个区域。 在以下区域中创建的搜索服务支持对数据磁盘进行 CMK,但不支持临时磁盘:

    • 美国西部 2
    • 美国东部
    • 美国中南部
    • US Gov 弗吉尼亚州
    • US Gov 亚利桑那州
  • 2021 年 5 月 13 日的第二次推出增加了对临时磁盘的加密,并将 CMK 加密扩展到所有受支持的区域

    如果你使用的是首次推出期间创建的服务的 CMK,并且还希望通过临时磁盘进行 CMK 加密,则需要在所选区域中创建新的搜索服务并重新部署内容。 若要确定服务创建日期,请参阅检查服务创建或升级日期

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

日志记录和监控

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

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

合规性和治理

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

建议定期查看 Azure AI 搜索合规性认证和文档 ,以确保符合法规要求。

使用 Azure Policy

为实现合规性,可以使用 Azure Policy 来实现 Microsoft 云安全基准的高安全性最佳做法。 Microsoft 云安全基准是一批整理至安全控制措施中的安全建议,这些安全控制措施映射到为缓解服务和数据受到的威胁而应采取的关键操作。 目前有 12 项安全控制措施,包括网络安全、日志记录和监视以及数据保护

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

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

使用标记

应用元数据标记,根据数据敏感度和符合性要求对搜索服务进行分类。 这有助于进行适当的治理和安全控制。 有关详细信息,请参阅使用标记来组织 Azure 资源和常规指南 - 使用标记组织 Azure 资源

我们还推荐以下 有关安全功能的视频。 它已经几年了,并不涵盖较新的功能,但它涵盖了这些功能:CMK、IP 防火墙和专用链接。 如果使用这些功能,可能会发现此视频很有用。