你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
了解如何使用 Azure AI 搜索 为使用 Azure Blob 存储中的客户管理的密钥加密的文档编制索引。
通常,索引器无法从使用 Azure Blob 存储 客户端库中的客户端加密 进行加密的 Blob 中提取内容。 这是因为索引器无权访问 Azure Key Vault 中的客户管理的加密密钥。 但是,使用 DecryptBlobFile 自定义技能 和 文档提取技能,可以提供对密钥的受控访问,以解密文件,然后从中提取内容。 这可解锁索引和扩充这些文档的功能,而不会影响存储文档的加密状态。
从以前加密的整个文档(未结构化文本),如 PDF、HTML、DOCX 和 PPTX,存储在 Azure Blob 中开始,本教程使用 REST 客户端和搜索 REST API:
- 定义解密文档并从中提取文本的管道
- 定义用于存储输出的索引
- 执行管道以创建和加载索引
- 使用全文搜索和丰富的查询语法浏览结果
先决条件
拥有有效订阅的 Azure 帐户。 免费创建帐户。
在所有层或区域上实现 Azure AI 搜索。
Azure 存储,标准性能(常规用途 v2)。
使用客户管理的密钥加密的 blob。 若要创建示例数据,请参阅 教程:使用 Azure Key Vault 加密和解密 Blob。
Azure Key Vault 与 Azure AI 搜索位于同一订阅中。 密钥保管库必须启用 软删除 和 清除保护 。
自定义技能部署创建 Azure 函数应用和 Azure 存储帐户。 这些资源是为你创建的,因此它们不会列为先决条件。 完成本教程后,请记得清理资源,以便不会为不使用的服务付费。
注释
技能集通常需要绑定 Azure AI 服务的多种服务资源。 如本文所述,此技能集不依赖于 Azure AI 服务,因此不需要密钥。 如果以后添加调用内置功能的增强功能,请记得相应地更新技能集。
部署自定义技能
本教程使用 DecryptBlobFile 示例项目,该项目源自 Azure Search Power Skills GitHub 存储库。 在本部分中,你将技能部署到 Azure 函数,以便在技能集中使用它。 内置部署脚本使用 psdbf-function-app- 前缀创建 Azure 函数资源并加载技能。 系统会提示你提供订阅和资源组。 请务必选择包含 Azure Key Vault 实例的订阅。
在操作过程中,DecryptBlobFile 技能将每个 Blob 的 URL 和 SAS 令牌作为输入。 它使用 Azure AI 搜索所需的文件引用协定输出下载的解密文件。 回想一下,DecryptBlobFile 需要加密密钥来执行解密。 在设置过程中,还创建一个访问策略,用于授予对 Azure Key Vault 中加密密钥的 DecryptBlobFile 函数访问权限。
在 DecryptBlobFile 登陆页上,选择“ 部署到 Azure ”以在 Azure 门户中打开资源管理器模板。
选择 Azure Key Vault 实例所在的订阅。 如果选择其他订阅,则本教程不起作用。
选择现有资源组,或创建一个新组。 专用资源组能够在以后更轻松地进行清理。
选择 “查看 + 创建”,同意条款,然后选择“ 创建 ”以部署 Azure 函数。
等待部署完成。
应该有一个 Azure 函数应用,其中包含解密逻辑,以及一个用于存储应用程序数据的 Azure 存储资源。 在后续步骤中,为应用授予访问密钥保管库的权限,并收集 REST 调用所需的信息。
在 Azure Key Vault 中授予权限
在 Azure 门户中访问 Azure Key Vault 服务。 在 Azure Key Vault 中创建访问策略,以授予对自定义技能的密钥访问权限。
在左窗格中,选择 “访问策略”,然后选择“ + 创建 ”以启动 “创建访问策略 向导”。
在 “权限 ”页上的 “从模板配置”下,选择 “Azure Data Lake Storage”或“Azure 存储”。
选择“下一步”。
在 “主体 ”页上,选择已部署的 Azure 函数实例。 可以使用其资源前缀进行搜索,该前缀的默认值为 psdbf-function-app。
选择“下一步”。
在 “查看 + 创建”上,选择“ 创建”。
收集应用信息
在 Azure 门户中进入 psdbf-function-app 函数。 记下 REST 调用所需的以下属性。
获取 函数 URL(可在函数主页面上的“概要”下找到)。
通过以下步骤找到主机密钥码:转到 应用密钥,显示 默认 密钥,并复制其值。
获取 Azure AI 搜索的管理密钥和 URL
登录到 Azure 门户。
在搜索服务 “概述 ”页上,获取搜索服务的名称。 可以通过查看终结点 URL 来确认服务名称。 例如,如果终结点 URL 为
https://mydemo.search.windows.net,则服务名称为mydemo。在“设置密钥”>中,获取服务完全权限的管理密钥。 有两个可交换的管理员密钥,为保证业务连续性而提供,以防需要滚动一个密钥。 可以对添加、修改和删除对象的请求使用主密钥或辅助密钥。
发送到服务的每个请求的标头中都需要 API 密钥。 有效的密钥在应用程序与处理请求的服务之间基于每个请求建立信任。
设置 REST 客户端
为终结点和密钥创建以下变量。
| Variable | 从何处获取 |
|---|---|
admin-key |
在 Azure AI 搜索服务的 “密钥 ”页上。 |
search-service-name |
Azure AI 搜索服务的名称。 该 URL 为 https://{{search-service-name}}.search.windows.net。 |
storage-connection-string |
在存储帐户的 “访问密钥 ”选项卡上,选择 key1>连接字符串。 |
storage-container-name |
包含要编制索引的加密文件的 Blob 容器的名称。 |
function-uri |
在主页面上“概要”下的 Azure 函数中。 |
function-code |
在 Azure 函数中,转到 应用密钥,显示 默认 密钥并复制值。 |
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 搜索使用和返回的数据。
创建数据源的 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 搜索服务,并使用 搜索资源管理器 对索引数据运行查询。
清理资源
在自己的订阅中操作时,最好在项目结束时移除不再需要的资源。 持续运行资源可能会产生费用。 可以逐个删除资源,也可以删除资源组以删除整个资源集。
可以使用左侧导航窗格中的“所有资源”或“资源组”链接在 Azure 门户中查找和管理资源。
后续步骤
为加密的文件编制索引后,可以通过添加更多技能来迭代此管道,以扩充和更深入地了解数据。
如果使用的是双重加密的数据,可能需要调查 Azure AI 搜索中可用的索引加密功能。 尽管索引器需要解密的数据进行索引编制,但索引存在后,可以使用客户管理的密钥在搜索索引中对其进行加密。 这可确保静止状态的数据始终保持加密状态。 有关详细信息,请参阅 在 Azure AI 搜索中为数据加密配置客户管理的密钥。