共用方式為

教程:在 Azure AI Search 中为加密 blob 编制索引并丰富其全文搜索功能

了解如何使用 Azure AI Search 为使用 Azure Blob Storage1 中的客户管理的密钥加密的文档编制索引。

通常,索引器无法从Azure Blob Storage客户端库中使用 client-side encryption 加密的 blob 中提取内容。 这是因为索引器无权访问 Azure Key Vault 中的客户管理的加密密钥。 但是,使用 DecryptBlobFile 自定义技能Document 提取技能,你可以提供对密钥的受控访问来解密文件,然后从中提取内容。 这可解锁索引和扩充这些文档的功能,而不会影响存储文档的加密状态。

从以前加密的整个文档(非结构化文本),例如存储在 Azure Blob Storage 中的 PDF、HTML、DOCX 和 PPTX,本教程通过 REST 客户端和搜索 REST API 来完成以下操作:

  • 定义解密文档并从中提取文本的管道
  • 定义用于存储输出的索引
  • 执行管道以创建和加载索引
  • 使用全文搜索和丰富的查询语法浏览结果

先决条件

自定义技能部署创建 Azure Functions 应用和 Azure Storage 帐户。 这些资源是为你创建的,因此它们不会列为先决条件。 完成本教程后,请记得清理资源,以便不会为不使用的服务付费。

注释

技能集通常需要附加Azure AI 服务资源。 如本文所述,此技能集不依赖于 AI 服务,因此不需要密钥。 如果以后添加调用内置功能的增强功能,请记得相应地更新技能集。

部署自定义技能

本教程使用 Azure Search Power Skills GitHub 存储库中的示例 DecryptBlobFile 项目。 在本部分中,你将技能部署到 Azure 函数,以便在技能集中使用它。 内置部署脚本使用 psdbf-function-app- 前缀创建Azure函数资源并加载技能。 系统会提示你提供订阅和资源组。 请务必选择包含Azure Key Vault实例的订阅。

在操作过程中,DecryptBlobFile 技能将每个 Blob 的 URL 和 SAS 令牌作为输入。 它使用Azure AI Search预期的文件引用协定输出下载的解密文件。 回想一下,DecryptBlobFile 需要加密密钥来执行解密。 在设置过程中,还创建一个访问策略,用于授予对 Azure Key Vault 中加密密钥的 DecryptBlobFile 函数访问权限。

  1. DecryptBlobFile 登陆页面上,选择 部署到 Azure 以在 Azure 门户中打开 Resource Manager 模板。

  2. 选择包含您的 Azure 密钥保管库实例的订阅。 如果选择其他订阅,则本教程不起作用。

  3. 选择现有资源组,或创建一个新组。 专用资源组能够在以后更轻松地进行清理。

  4. 选择 Review + create,同意条款,然后选择Create部署Azure函数。

    Azure 入口中 ARM 模板页面的截图。

  5. 等待部署完成。

应具有一个Azure函数应用,其中包含解密逻辑和用于存储应用程序数据的Azure Storage资源。 在后续步骤中,为应用授予访问密钥保管库的权限,并收集 REST 调用所需的信息。

在 Azure Key Vault 中授予权限

  1. 请在Azure门户中访问您的Azure Key Vault服务。 在授予对自定义技能的密钥访问权限的Azure Key Vault中创建访问策略

  2. 在左窗格中,选择 “访问策略”,然后选择“ + 创建 ”以启动 “创建访问策略 向导”。

    左侧窗格中“访问策略”命令的屏幕截图。

  3. Permissions 页上,在模板配置下,选择 Azure Data Lake Storage 或 Azure Storage

  4. 选择“下一步”。

  5. Principal 页上,选择已部署的Azure函数实例。 可以使用其资源前缀进行搜索,该前缀的默认值为 psdbf-function-app

  6. 选择“下一步”。

  7. “查看 + 创建”上,选择“ 创建”。

收集应用信息

  1. 转到 Azure 门户中的 psdbf-function-app 函数。 记下 REST 调用所需的以下属性。

  2. 通过访问函数主页上的 Essentials,获取函数 URL。

    Azure Functions 应用的概述页面和 Essentials 部分的截图。

  3. 通过以下步骤找到主机密钥码:转到 应用密钥,显示 默认 密钥,并复制其值。

    Azure Function应用程序的应用密钥页面的截图。

  1. Azure 门户中,转到你的搜索服务。

  2. 在搜索服务 “概述 ”页上,获取搜索服务的名称。 可以通过查看终结点 URL 来确认服务名称。 例如,如果终结点 URL 为 https://mydemo.search.azure.cn,则服务名称为 mydemo

  3. “设置密钥”>中,获取服务完全权限的管理密钥。 有两个可交换的管理员密钥,为保证业务连续性而提供,以防需要滚动一个密钥。 可以对请求使用任一键来添加、修改或删除对象。

发送到服务的每个请求的标头中都需要 API 密钥。 有效的密钥在应用程序与处理请求的服务之间基于每个请求建立信任。

设置 REST 客户端

为终结点和密钥创建以下变量。

Variable 从何处获取
admin-key 在 Azure AI Search 服务的 Keys 页上。
search-service-name Azure AI Search服务的名称。 该 URL 为 https://{{search-service-name}}.search.azure.cn
storage-connection-string 在存储帐户的 “访问密钥 ”选项卡上,选择 key1>连接字符串
storage-container-name 包含要编制索引的加密文件的 Blob 容器的名称。
function-uri 在 Azure 函数的主页上,可以在Essentials下找到。
function-code 在 Azure 函数中,转到 App keys,显示 default 键并复制值。
api-version 保留为 2020-06-30
datasource-name 保留为 encrypted-blobs-ds
index-name 保留为 encrypted-blobs-idx
skillset-name 保留为 encrypted-blobs-ss
indexer-name 保留为 encrypted-blobs-ixr

查看并运行每个请求

使用以下 HTTP 请求创建扩充管道的对象。

  • PUT 创建索引的请求:此搜索索引包含Azure AI Search使用和返回的数据。

  • 创建数据源的 POST 请求:此数据源指定与包含加密 Blob 文件的存储帐户的连接。

  • PUT 创建技能集的请求:技能集指定用于解密 blob 文件数据的 Azure 函数的自定义技能定义。 它还指定 DocumentExtractionSkill ,用于在解密后从每个文档中提取文本。

  • 创建索引器的 PUT 请求:运行索引器可检索 Blob、应用技能集和索引并存储结果。 必须最后运行此请求。 技能集中的自定义技能调用解密逻辑。

监视索引编制

提交“创建索引器”请求后,索引编制和扩充立即开始。 根据存储帐户中的文档数,索引可能需要一段时间。 若要了解索引器是否仍在运行,请发送 获取索引器状态 请求并查看响应,以了解索引器正在运行还是查看错误和警告信息。

如果使用的是免费层,预期会出现以下消息: "Could not extract content or metadata from your document. Truncated extracted text to '32768' characters" 出现此消息是因为免费层上的 Blob 索引 对字符提取有 32,000 个限制。 在更高的定价层次中,您将看不到与此数据集相关的此消息。

搜索您的内容

索引器执行完成后,可以运行查询来验证数据是否已成功解密并编制索引。 转到 Azure 门户中的 Azure AI Search 服务,并使用 Search Explorer 对索引数据运行查询。

清理资源

在自己的订阅中操作时,最好在项目结束时移除不再需要的资源。 持续运行资源可能会产生费用。 可以逐个删除资源,也可以删除资源组以删除整个资源集。

可以使用左侧导航窗格中的“所有资源”或“资源组”链接在Azure门户中查找和管理资源。

后续步骤

为加密文件编制索引后,可以通过添加更多技能来丰富和深入了解数据,从而迭代此管道

如果使用的是双重加密的数据,可能需要调查Azure AI Search中可用的索引加密功能。 尽管索引器需要解密的数据进行索引编制,但索引存在后,可以使用客户管理的密钥在搜索索引中对其进行加密。 这可确保静止状态的数据始终保持加密状态。 有关详细信息,请参阅 配置客户管理的密钥,以便在 Azure AI Search 中加密数据。