你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
当 Azure Key Vault 和 Azure AI 搜索位于不同的 Azure 租户中时,请使用 Microsoft Entra 多租户应用通过另一个租户中的 密钥启用客户管理的密钥(CMK)加密 。
先决条件
包含希望加密内容的搜索服务的租户。 必须为 Azure AI 搜索 配置基于角色的访问。 支持 CMK 需要 Basic 定价级别或更高。
具有 Azure Key Vault 和要使用的加密密钥的独立租户。 必须为 Azure Key Vault 配置基于角色的访问。
用于发送请求的 Azure CLI。
在租户 A 中创建多租户Microsoft Entra 应用程序
使用 Azure CLI 发送请求。 我们将包含 Azure AI 搜索的租户称为 租户 A。
获取租户 ID:
az account show --query tenantId --output tsv请确保已登录到租户 A:
az login --tenant <tenant-A-id>创建应用程序注册:
az ad app create --display-name cross-tenant-auth --sign-in-audience AzureADMultipleOrgs保存此步骤中的应用 ID 输出。
将客户端密码添加到多租户应用程序
若要将客户端密码添加到租户 A 中的多租户应用程序,请运行以下命令:
az ad app credential reset --id <multitenant-app-id>保存此步骤中的密码输出。 密码输出是用于在 Azure AI 搜索中 设置 CMK 的必需输入。
若要指定客户端密码过期的时间,可以指定此命令的结束日期参数。
az ad app credential reset --id <multitenant-app-id> --end-date <end-date>结束日期参数接受 ISO 8601 格式的日期。 例如:
az ad app credential reset --id <multitenant-app-id> --end-date 2026-12-31。
在租户 B 中为多租户应用程序创建服务主体
我们将包含 Azure Key Vault 的 租户称为租户 B。在租户 B 中,为租户 A 中的多租户应用程序创建服务主体。
登录到租户 B:
az login --tenant <tenant-B-id>使用第一步中的多租户应用 ID 输出创建服务主体:
az ad sp create --id <multitenant-app-id>此服务主体是租户 A 中多租户应用程序的实例。分配给租户 B 中此服务主体的角色也分配给租户 A 中的多租户应用程序。
在以下命令中查看“appOwnerOrganizationId”,验证租户 A 和 B 之间的链接:
az ad sp show --id <multitenant-app-id>此命令以 JSON 格式显示服务主体详细信息。 在输出中查找“appOwnerOrganizationId”字段,确认它与租户 A 的 ID 匹配。
保存此步骤中服务主体的对象 ID(来自
"id"字段)。 对象 ID 是用于在 Azure AI 搜索中设置 CMK 的必需输入。获取 Azure Key Vault 的资源 ID:
az keyvault show --name <key-vault-name> --query id --output tsv将租户 B 中密钥保管库上的 Key Vault 加密服务加密用户 角色分配给新的服务主体。
az role assignment create --assignee <service-principal-object-id> --role "Key Vault Crypto Service Encryption User" --scope <key-vault-resource-id>此分配的示例可能如下所示:
az role assignment create --assignee 12345678-1234-1234-1234-123456789012 --role "Key Vault Crypto Service Encryption User" --scope /subscriptions/87654321-4321-4321-4321-210987654321/resourceGroups/myKeyVaultRG/providers/Microsoft.KeyVault/vaults/myCompanyKeyVault
测试加密
在搜索服务(租户 A)中创建测试索引以验证设置。 使用“访问凭据”对象中添加的多租户应用 ID 和凭据对其他租户的密钥保管库进行身份验证。
可以使用此示例索引架构进行测试。 可以使用 Azure 门户添加索引并提供此 JSON,或使用 REST 客户端 发送创建索引请求。
{
"name": "cross-tenant-cmk-test",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true
}
],
"encryptionKey": {
"keyVaultUri": "https://myCompanyKeyVault.vault.azure.net/",
"keyVaultKeyName": "search-encryption-key",
"keyVaultKeyVersion": "abc123def456ghi789",
"accessCredentials": {
"applicationId": "12345678-1234-1234-1234-123456789012",
"applicationSecret": "secretValueFromStep2"
}
}
}
验证是否已成功创建索引:
GET https://<search-service>.search.windows.net/indexes/cross-tenant-cmk-test?api-version=2025-09-01
有关如何轮换或管理密钥的详细信息,请参阅 配置客户管理的密钥进行数据加密。