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

Azure 认知搜索的安全性概述

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

数据流(网络流量模式)

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

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

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

入站流量

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

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

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

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

  • 默认使用基于密钥的身份验证。 包含有效 API 密钥的入站请求被搜索服务接受为源自受信任的一方。
  • 或者,对于数据平面操作(目前处于预览状态),可以使用 Azure Active Directory 和基于角色的访问控制。

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

出站流量

通常由索引器针对基于文本的索引和 AI 扩充的某些方面发出从搜索服务到其他应用程序的出站请求。 出站请求包括读取和写入操作。

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

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

可以使用资源的完全访问连接字符串建立出站连接,该连接字符串包括一个密钥或数据库登录名,或者包括 Azure AD 登录名(托管标识)(如果你使用 Azure Active Directory)。

如果 Azure 资源在防火墙后面,则需要创建允许搜索服务请求的规则。 对于受 Azure 专用链接保护的资源,可以创建索引器用来建立连接的共享专用链接

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

如果存储和搜索位于同一区域,则网络流量将通过专用 IP 地址路由并在 Microsoft 主干网络上出现。 由于使用了专用 IP 地址,因此无法为网络安全配置 IP 防火墙或专用终结点。 相反,当这两个服务都位于同一区域时,请使用受信任的服务异常 作为替代方法。

内部流量

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

内部流量包括:

  • 针对一些任务的服务到服务调用,例如,通过 Azure Active Directory 进行身份验证和授权、将资源日志发送到 Azure Monitor,以及利用 Azure 专用链接的专用终结点连接。
  • 向认知服务 API 发出的关于内置技能的请求。
  • 向支持语义搜索的机器学习模型发出的请求。

网络安全

网络安全通过向网络流量应用控制来保护资源免受未经授权的访问或攻击。 Azure 认知搜索支持网络功能,这些功能可能是阻止未经授权的访问的第一道防线。

通过 IP 防火墙的入站连接

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

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

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

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

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

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

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

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

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

身份验证

请求得到批准后,仍必须对它进行身份验证和授权,以确定是否允许该请求。 认知搜索支持两种方法:

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

  • Azure AD 身份验证(预览版)将调用方(而非请求)确立为经过身份验证的标识。 Azure 角色分配决定了允许的操作。

由索引器发出的出站请求受外部服务支持的身份验证协议影响。 搜索服务可以成为 Azure 上的受信任服务,使用系统或用户分配的管理标识连接到其他服务。 有关详细信息,请参阅使用托管标识设置到数据源的索引器连接

授权

认知搜索为内容管理和服务管理提供不同的授权模型。

内容管理的授权

如果使用基于密钥的身份验证,则对内容操作的授权将通过请求中 API 密钥的类型来授予:

  • 管理员密钥(允许针对搜索服务的“创建-读取-更新-删除”操作进行“读取-写入”访问),在预配服务时创建

  • 查询密钥(允许对索引的文档集合进行只读访问),根据需要创建,并且是为发出查询的客户端应用程序设计的

在应用程序代码中,请指定终结点和 API 密钥,以允许访问内容和选项。 终结点可能是服务本身、索引集合、特定索引、文档集合或特定文档。 在链接到一起时,终结点、操作(例如,创建或更新请求)和权限级别(基于密钥的全部或只读权限)构成保护内容和操作的安全方案。

如果使用 Azure AD 身份验证,则使用角色分配而非 API 密钥来确定谁可以在搜索服务中读取和写入什么内容。

控制对索引的访问

在 Azure 认知搜索中,单个索引通常不是安全对象。 如前所述,对于基于密钥的身份验证,对索引的访问权限将基于你在请求中提供的 API 密钥以及操作上下文包括相应的读取或写入权限。 查询是只读操作。 在查询请求中,没有联接索引或同时访问多个索引的概念,所有请求都会根据定义以单个索引为目标。 因此,查询请求本身的结构(密钥加上单个目标索引)定义了安全边界。

然而,如果使用 Azure 角色,则始终可以通过编程方式设置对各个索引的权限

对于基于密钥的身份验证方案,管理员和开发人员对索引的访问权限没有区别:两者都需要写访问权限才能创建、删除和更新服务管理的对象。 拥有服务的管理员密钥的任何人都可以读取、修改或删除同一服务中的任何索引。 为了防止意外删除或恶意删除索引,代码资产的内部源代码管理可以作为一种解决方案来还原意外的索引删除或修改。 Azure 认知搜索在群集中提供故障转移功能来确保可用性,但它不会存储或执行用于创建或加载索引的专属代码。

需要索引级安全边界的多租户解决方案通常包含一个中间层,客户可以使用它来处理索引隔离。 有关多租户用例的详细信息,请参阅多租户 SaaS 应用程序与 Azure 认知搜索的设计模式

控制对文档的访问

如果需要对搜索结果进行精细的、基于每个用户的控制,可以在查询中生成安全筛选器,返回与给定安全标识关联的文档。

在概念上等同于“行级别安全性”,在本机不支持使用映射到 Azure Active Directory 中实体的预定义角色或角色分配来对索引中的内容授权。 Azure Cosmos DB 等外部系统中针对数据的任何用户权限不会在通过认知搜索为这些数据编制索引时与数据一起传输。

对于需要“行级别安全性”的解决方案,可以采用这样的解决方法:在数据源中创建表示安全组或用户标识的字段,然后在认知搜索中使用筛选器根据标识有选择地裁剪文档和内容的搜索结果。 下表描述了修整未经授权内容的搜索结果的两种方法。

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

服务管理的授权

服务管理操作通过 Azure 基于角色的访问控制 (Azure RBAC) 进行授权。 Azure RBAC 是基于 Azure 资源管理器构建的授权系统,用于预配 Azure 资源。

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

为搜索服务管理定义了三个基本角色。 可以使用任何受支持的方法(门户、PowerShell,等等)来完成角色分配,并且角色分配是在服务范围内执行的。 所有者和参与者角色可执行各种管理功能。 你可以将读取者角色分配给只查看基本信息的用户。

注意

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

数据驻留

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

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

数据驻留承诺的例外

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

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

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

  • 在支持期间,此信息可用于向客户提供建议。 例如,“根据你对产品的使用情况,建议使用 <feature name>,因为它性能更优良。”

  • Microsoft 可能会在客户可见的仪表板中公开对象名称。

Microsoft 可能会根据请求缩短保留间隔或删除对遥测日志中特定对象的引用。 请记住,如果你请求删除数据,Microsoft 将不会拥有你的服务的完整历史记录,这可能会妨碍对相关对象进行故障排除。

若要删除对特定对象的引用或更改数据保留期,请为搜索服务提交支持票证

  1. 在“问题详细信息”中,请使用以下选项标记你的请求:

    • 问题类型:技术
    • 问题类型:设置和配置
    • 问题子类型:此服务的安全配置出现问题
  2. 转到“其他详细信息”(第三个选项卡)时,请说明要删除的对象名称,或指定所需保留期。

    屏幕截图显示支持票证的第一页,其中选择了问题和问题类型。

数据保护

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

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

传输中的数据

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

静态数据

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

建模 要求 限制 适用于
服务器端加密 Microsoft 管理的密钥 无(内置) 无,可在所有层级、所有区域使用,适用于 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 认知搜索可以位于不同区域,但需位于同一订阅下。

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

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

安全管理

管理 API 密钥

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

活动和资源日志

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

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

认证和合规性

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

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

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

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

观看此视频

请观看这段快节奏的视频,以便大致了解安全体系结构和每个功能类别。

另请参阅