Azure AI 搜索的安全性概述
本文介绍 Azure AI 搜索中保护数据和操作的安全功能。
数据流(网络流量模式)
Azure AI 搜索服务托管在 Azure 上,通常由客户端应用程序通过公用网络连接来访问。 虽然这种模式是主要模式,但它并不是你唯一需要关注的流量模式。 了解所有入口点和出站流量是保护开发和生产环境的必要背景知识。
Azure AI 搜索具有三种基本的网络流量模式:
- 用户或客户端向搜索服务发出的入站请求(主要模式)
- 搜索服务向 Azure 和第三方的其他服务发出的出站请求
- 通过安全 Azure 主干网络的内部服务到服务请求
入站流量
面向搜索服务终结点的入站请求包括:
- 在搜索服务上创建、读取、更新或删除索引和其他对象
- 使用搜索文档功能加载索引
- 查询索引
- 触发索引器或技能组执行
REST API 描述搜索服务处理的各种入站请求。
至少必须使用以下选项之一对所有入站请求进行身份验证:
- 基于密钥的身份验证(默认)。 入站请求提供有效的 API 密钥。
- 基于角色的访问控制。 授权是通过搜索服务上的 Microsoft Entra 标识和角色分配进行的。
此外,还可以添加网络安全功能,以进一步限制对终结点的访问。 可以在 IP 防火墙中创建入站规则,也可以创建全面保护搜索服务免受公共 Internet 影响的专用终结点。
内部流量
内部请求由 Azure 保护和管理。 你无法配置或控制这些连接。 如果你要锁定网络访问,不需要在你这边执行任何操作,因为内部流量是客户无法配置的。
内部流量包括:
- 通过 Microsoft Entra ID、发送到 Azure Monitor 的资源日志记录以及利用 Azure 专用链接的专用终结点连接,对身份验证和授权等任务进行服务到服务调用。
- 为使用内置技能而向 Azure AI 服务 API 发出的请求
出站流量
出站请求可以由你保护和管理。 出站请求源自搜索服务,发往其他应用程序。 这些请求通常由索引器发出,用于进行基于文本的索引编制、基于技能的自定义 AI 扩充,以及在查询时进行矢量化。 出站请求包括读取和写入操作。
以下列表完整列举了可为其配置安全连接的出站请求。 搜索服务代表自己以及索引器或自定义技能发出请求。
操作 | 场景 |
---|---|
索引器 | 连接到外部数据源以检索数据。 有关详细信息,请参阅索引器访问受 Azure 网络安全性保护的内容。 |
索引器 | 连接到 Azure 存储以保存知识存储、缓存扩充、调试会话。 |
自定义技能 | 连接到 Azure 函数、Azure Web 应用,或连接到运行服务外托管的外部代码的其他应用。 在技能组执行期间发送用于外部处理的请求。 |
索引器和集成矢量化 | 连接到 Azure OpenAI 和部署的嵌入模型,或者通过自定义技能连接到你提供的嵌入模型。 搜索服务将文本发送到嵌入模型以在索引编制期间进行矢量化。 |
矢量化器 | 在查询时连接到 Azure OpenAI 或其他嵌入模型,以将用户文本字符串转换为矢量来进行矢量搜索。 |
搜索服务 | 连接到 Azure Key Vault 以获取客户管理的加密密钥,它用于加密和解密敏感数据。 |
可以使用资源的完全访问连接字符串建立出站连接,该连接字符串包括一个密钥或数据库登录名,或者包括 托管标识(如果使用 Microsoft Entra ID 和基于角色的访问)。
若要访问防火墙后面的 Azure 资源,请在允许搜索服务请求的其他 Azure 资源上创建入站规则。
若要访问受 Azure 专用链接保护的 Azure 资源,请创建索引器用来建立连接的共享专用链接。
同区域搜索和存储服务的例外
如果 Azure 存储和 Azure AI 搜索位于同一区域,则网络流量通过专用 IP 地址路由并出现在 Microsoft Azure 主干网络上。 由于使用了专用 IP 地址,因此无法为网络安全配置 IP 防火墙或专用终结点。
使用以下任一方法配置同一区域连接:
网络安全
网络安全通过向网络流量应用控制来保护资源免受未经授权的访问或攻击。 Azure AI 搜索支持网络功能,这些功能可以成为防御未经授权的访问的前线。
通过 IP 防火墙的入站连接
搜索服务预配有允许使用公共 IP 地址访问的公共终结点。 若要限制哪些流量通过公共终结点,请创建入站防火墙规则,以允许来自特定 IP 地址或一系列 IP 地址的请求。 所有客户端连接必须通过允许的 IP 地址建立,否则连接将被拒绝。
可以使用门户配置防火墙访问。
或者,可以使用管理 REST API。 从 API 版本 2020-03-13 开始,利用 IpRule 参数,可以通过标识希望向其授予搜索服务访问权限的 IP 地址(单个或在某个范围内)来限制对服务的访问。
到专用终结点的入站连接(网络隔离,无 Internet 流量)
为了增强安全性,可以为 Azure AI 搜索建立专用终结点,允许虚拟网络上的客户端通过专用链接安全地访问搜索索引中的数据。
专用终结点将虚拟网络地址空间中的 IP 地址用于到搜索服务的连接。 客户端与搜索服务之间的网络流量将穿过虚拟网络以及 Microsoft Azure 主干网络上的专用链接,不会从公共 Internet 公开。 虚拟网络允许在资源间通过本地网络以及 Internet 进行安全通信。
虽然这种解决方案是最安全的,但使用其他服务会增加成本,因此,在开始之前请先确保清楚地了解其中的益处。有关费用的详细信息,请参阅定价页。 涉及专用终结点方案的内容从该视频中 5:48 开始。 有关如何设置终结点的说明,请参阅为 Azure AI 搜索创建专用终结点。
身份验证
搜索服务接受请求后,请求仍必须接受身份验证和授权,以确定是否允许该请求。 Azure AI 搜索支持两种方法:
Microsoft Entra 身份验证将调用方(而不是请求)建立为经过身份验证的标识。 Azure 角色分配决定授权。
通过 API 密钥针对请求(而非针对调用方应用或用户)执行基于密钥的身份验证,其中,密钥是由随机生成的数字和字母组成的字符串,这些数字和字母用于证明请求来自可靠来源。 需要在每个请求中提供密钥。 提交有效密钥被视为请求源自受信任实体的证明。
可以使用这两种身份验证方法,或者禁用在搜索服务上不需要的方法。
授权
Azure AI 搜索为服务管理和内容管理提供授权模型。
授权服务管理
资源管理通过 Microsoft Entra 租户中的基于角色的访问控制进行授权。
在 Azure AI 搜索中,资源管理器用于创建或删除服务,管理 API 密钥,缩放服务以及配置安全性。 因此,Azure 角色分配将确定哪些用户可以执行那些任务,而不考虑他们是使用门户、PowerShell 还是管理 REST API。
三种基本角色(所有者、参与者、读取者)适用于搜索服务管理。 可以使用任何受支持的方法(门户、PowerShell,等等)来完成角色分配,并且角色分配是在服务范围内执行的。
注意
利用 Azure 范围内的机制,可以锁定订阅或资源,以防止具备管理员权限的用户意外或在未经授权的情况下删除搜索服务。 有关详细信息,请参阅锁定资源以防止意外删除。
授权访问内容
内容管理是指在搜索服务上创建和托管的对象。
对于基于角色的授权,请使用 Azure 角色分配建立对操作的读写访问权限。
对于基于密钥的授权,API 密钥和限定的终结点会确定访问权限。 终结点可能是服务本身、索引集合、特定索引、文档集合或特定文档。 链接在一起时,终结点、操作(例如创建请求)以及密钥类型(管理员或查询)授权访问内容和操作。
限制对索引的访问
使用 Azure 角色,可以对单个索引设置权限,只要它是以编程方式执行的。
使用密钥,拥有服务的管理员密钥的任何人都可以读取、修改或删除同一服务中的任何索引。 为了防止意外删除或恶意删除索引,代码资产的内部源代码管理可以作为一种解决方案来还原意外的索引删除或修改。 Azure AI 搜索在群集中提供故障转移功能来确保可用性,但它不会存储或执行用于创建或加载索引的专属代码。
对于需要在索引级别设置安全边界的多租户解决方案,通常会在应用程序代码的中间层处理索引隔离。 有关多租户用例的详细信息,请参阅多租户 SaaS 应用程序与 Azure AI 搜索的设计模式。
限制对文档的访问
Azure AI 搜索本身不支持文档级别的用户权限(也称为“行级安全性”)。 如果从提供行级别安全性的外部系统(例如 Azure Cosmos DB)导入数据,则这些权限不会随着数据被 Azure AI 搜索索引而转移。
如果需要对搜索结果中的内容进行经过授权的访问,可以使用一种技术来应用基于用户标识包含或排除文档的筛选器。 此解决方法在数据源中添加一个表示组或用户标识的字符串字段,你可以在索引中将该字段设为可筛选。 有关此模式的详细信息,请参阅基于标识筛选器的安全修整。
数据驻留
设置搜索服务时,可以选择一个用于确定在何处存储和处理客户数据的区域。 每个区域都存在于一个地理位置,后者通常包括多个区域(例如,瑞士是包含瑞士北部和瑞士西部的地理区域)。 Azure AI 搜索可能会将数据复制到同一地理位置中的另一个区域,以实现持久性和高可用性。 该服务不会将客户数据存储在指定区域之外,也不会在指定区域之外处理客户数据,除非你配置的功能依赖于另一个 Azure 资源,并且该资源在另一个区域中预配。
目前,搜索服务写入到的唯一外部资源是 Azure 存储。 存储帐户是你提供的帐户,它可能位于任何区域中。 如果使用下列任一功能,搜索服务会写入 Azure 存储:
- 扩充缓存
- 调试会话
- 知识存储
有关数据驻留的详细信息,请参阅 Azure 中的数据驻留。
数据驻留承诺的例外
对象名称显示在 Azure 用于为服务提供支持的遥测日志中。 对象名称存储在所选区域或位置之外,或者在所选区域或位置之外处理。 对象名称包括索引和索引字段、别名、索引器、数据源、技能组、同义词地图、映射、容器和密钥保管库存储的名称。 客户不得在名称字段中存储任何敏感数据,也不得创建旨在将敏感数据存储到这些字段的应用程序。
遥测日志保留一年半。 在此期间,Azure 可能会在以下情况下访问和引用对象名称:
诊断问题、改进功能或修复 bug。 在这种情况下,数据访问仅限于内部,没有第三方访问。
在提供支持期间,可以使用此信息来快速解决问题,并在需要时上报给产品团队
数据保护
在存储层,为所有保存到磁盘的服务托管内容(包括索引、同义词映射,以及索引器、数据源和技能组的定义)内置了数据加密。 服务托管加密同时适用于长期数据存储和临时数据存储。
(可选)你可以添加客户管理的密钥 (CMK) 用于已编制索引内容的补充加密,以对静态数据进行双重加密。 对于 2020 年 8 月 1 日后创建的服务,CMK 加密延伸到临时磁盘上的短期数据。
传输中的数据
对于通过公共 Internet 进行的搜索服务连接,Azure AI 搜索会侦听 HTTPS 端口 443。
对于客户端到服务通道加密,Azure AI 搜索支持 TLS 1.2 和 1.3:
- 在较新的客户端操作系统和 .NET 版本上,TLS 1.3 是默认设置。
- TLS 1.2 是较旧系统上的默认设置,但你可以在客户端请求上显式设置 TLS 1.3。
更低的 TLS 版本(1.0 或 1.1)不受支持。
有关详细信息,请参阅 .NET Framework 中的 TLS 支持。
静态数据
对于由搜索服务在内部处理的数据,下表介绍了数据加密模型。 有些功能(如知识库、增量扩充和基于索引器的索引编制)会读取或写入其他 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 搜索参与定期审核,并且已经在公有云和由世纪互联运营的 Azure 两方面获得了多项全球性、区域性和特定行业性标准的认证。 如需完整列表,请从官方审核报告页下载 Azure 合规性产品/服务白皮书。
为实现合规性,可以使用 Azure Policy 来实现 Microsoft 云安全基准的高安全性最佳做法。 Azure 云安全基准是一系列安全建议的集合,被编入到安全控制措施中,这些控制措施映射到你应该采取的关键行动,以减轻对服务和数据的威胁。 目前有 12 项安全控制措施,包括网络安全、日志记录和监视以及数据保护。
Azure Policy 是 Azure 中内置的一项功能,可帮助你管理对多个标准(包括 Azure 安全基准的标准)的符合性。 对于众所周知的基准,Azure Policy 提供了内置定义,这些定义既提供了标准,又提供了解决非符合性的可操作响应。
对于 Azure AI 搜索,当前有一个内置定义。 此定义用于资源日志记录。 可以分配一个用于标识缺少资源日志记录的搜索服务的策略,然后启用它。 有关详细信息,请参阅 Azure AI 搜索的 Azure Policy 法规符合性控制。