使用密钥连接到 Azure AI 搜索

Azure AI 搜索支持基于标识的身份验证和基于密钥的身份验证(默认值),以便连接到搜索服务。

如果请求和 API 密钥都有效,并且搜索服务配置为允许请求上的 API 密钥,则接受对搜索服务终结点发出的请求。

重要

创建搜索服务时,基于密钥的身份验证是默认设置,但它不是最安全的选项。 建议将其替换为基于角色的访问

默认启用

在 Azure 门户中,身份验证是在“设置>”页上指定的。 设置为 API 密钥(默认值)或 两者皆可时,允许请求使用 API 密钥的选项。

Azure 门户中“密钥”页的屏幕截图。

密钥类型

API 密钥是由 52 个随机生成的数字和字母组成的唯一字符串。 在表面上,管理密钥与查询密钥之间没有区别。 如果无法跟踪应用程序中指定了哪种类型的密钥,可以在 Azure 门户中检查密钥值。 有两种类型的密钥用于对请求进行身份验证:

类型 权限级别 创建方式 最大值
管理员 所有数据平面(内容)操作的完整访问权限(读写) 创建服务时会生成两个管理密钥( 密钥和 辅助密钥),并且可以按需单独重新生成。 使用两个密钥可以让您在继续使用第二个密钥访问服务的同时,切换另一个密钥。 2
查询 只读访问权限,范围限定为搜索索引的文档集合 在服务中生成一个查询密钥。 搜索服务管理员可按需创建更多密钥。 50

查找现有密钥

可以使用 Azure 门户PowerShellAzure CLIREST API 查看和管理 API 密钥。

  1. 登录到 Azure 门户查找你的搜索服务

  2. 在左窗格中,选择“设置>”以查看管理员和查询密钥。

    显示 API 密钥的门户页的屏幕截图。

在连接上使用密钥

基于密钥的身份验证仅用于数据平面(内容)请求,例如创建或查询索引以及使用 搜索服务 REST API 执行的任何其他作。

在源代码中,可以直接在请求标头中指定 API 密钥。 或者,可以将它存储为项目中的 环境变量 或应用设置,然后在请求中引用该变量。

  • 管理密钥用于创建、修改或删除对象。
  • 管理密钥还用于 GET 对象定义和系统信息,例如 LIST 索引GET 服务统计信息
  • 查询密钥通常会分发到发出查询的客户端应用程序。

回想一下,密钥身份验证默认已启用,并支持数据平面作,例如索引和查询。

但是,如果你禁用 API 密钥并设置角色分配,则 Azure 门户会改用角色分配。

创建查询密钥

查询密钥用于对面向文档集合的操作索引中的文档进行只读访问。 搜索、筛选和建议查询都是采用查询密钥的操作。 返回系统数据或对象定义(例如索引定义或索引器状态)的所有只读操作需要管理密钥。

限制客户端应用中的访问和操作对于保护服务中的搜索资产至关重要。 对于源自客户端应用的任何查询,请始终使用查询密钥而不是管理密钥。

  1. 登录到 Azure 门户查找你的搜索服务

  2. 在左窗格中,选择“设置>”以查看 API 密钥。

  3. 在“管理查询密钥”下,使用已为服务生成的查询密钥,或创建新的查询密钥。 默认查询密钥未命名,但生成的其他查询密钥可命名以便于管理。

    查询密钥管理选项的屏幕截图。

重新生成管理员密钥

系统将为每个服务生成两个管理密钥,以便在轮换主密钥时可以使用辅助密钥,从而实现业务连续性。

  1. 登录到 Azure 门户查找你的搜索服务

  2. 在左窗格中,选择“设置”“密钥”。>

  3. 复制辅助密钥。

  4. 对于所有应用程序,更新 API 密钥设置以使用辅助密钥。

  5. 重新生成主密钥。

  6. 更新所有应用程序以使用新的主密钥。

如果无意中同时重新生成了这两个密钥,则使用这些密钥的所有客户端请求将会失败并出现“HTTP 403 禁止访问”。 但是,内容不会删除,并且不会将你永久性地锁定在系统之外。

仍然可以通过 Azure 门户或通过编程方式访问该服务。 管理功能是通过订阅 ID 而不是服务 API 密钥运行的,因此,即使 API 密钥不可用,这些功能也仍可用。

通过门户或管理层创建新的密钥后,只要在请求中提供这些新密钥,就会恢复对内容(索引、索引器、数据源、同义词映射)的访问权限。

从密钥迁移到角色

若要过渡到基于角色的访问,了解密钥如何映射到 Azure AI 搜索中的内置角色会很有帮助:

  • 管理员密钥对应于 搜索服务参与者搜索索引数据参与者 角色。
  • 查询键对应于 搜索索引数据读取者 角色。

保护密钥

使用角色分配来限制对 API 密钥的访问。

无法使用客户管理的密钥加密来加密 API 密钥。 只能对搜索服务本身中的敏感数据(例如,索引内容或数据源对象定义中的连接字符串)进行 CMK 加密。

  1. 登录到 Azure 门户查找你的搜索服务

  2. 在左窗格中,选择 “访问控制”(IAM),然后选择“ 角色分配 ”选项卡。

  3. 在“角色”筛选器中,选择有权查看或管理密钥的角色(所有者、参与者、搜索服务参与者)。 最终分配给这些角色的安全主体对搜索服务拥有密钥权限。

  4. 作为预防措施,另请检查“经典管理员”选项卡,以确定管理员和共同管理员是否拥有访问权限。

最佳做法

  • 对于生产工作负荷,请切换到 Microsoft Entra ID 和基于角色的访问。 或者,如果要继续使用 API 密钥,请务必始终监视 谁有权访问 API 密钥 ,并定期 重新生成 API 密钥

  • 仅当数据泄露没有风险(例如,使用示例数据时),并且你在防火墙后操作,才使用 API 密钥。 公开 API 密钥会使数据和搜索服务面临未经授权的使用风险。

  • 如果使用 API 密钥,请将其安全地存储在其他某个位置,例如 Azure 密钥保管库中。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。

  • 在发布之前,请始终检查代码、示例和训练材料,以确保不会无意中公开 API 密钥。