你当前正在访问 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

  1. 获取租户 ID:

    az account show --query tenantId --output tsv

  2. 请确保已登录到租户 A:

    az login --tenant <tenant-A-id>

  3. 创建应用程序注册:

    az ad app create --display-name cross-tenant-auth --sign-in-audience AzureADMultipleOrgs

  4. 保存此步骤中的应用 ID 输出。

将客户端密码添加到多租户应用程序

  1. 若要将客户端密码添加到租户 A 中的多租户应用程序,请运行以下命令:

    az ad app credential reset --id <multitenant-app-id>

  2. 保存此步骤中的密码输出。 密码输出是用于在 Azure AI 搜索中 设置 CMK 的必需输入。

  3. 若要指定客户端密码过期的时间,可以指定此命令的结束日期参数。

    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 中的多租户应用程序创建服务主体。

  1. 登录到租户 B:

    az login --tenant <tenant-B-id>

  2. 使用第一步中的多租户应用 ID 输出创建服务主体:

    az ad sp create --id <multitenant-app-id>

    此服务主体是租户 A 中多租户应用程序的实例。分配给租户 B 中此服务主体的角色也分配给租户 A 中的多租户应用程序。

  3. 在以下命令中查看“appOwnerOrganizationId”,验证租户 A 和 B 之间的链接:

    az ad sp show --id <multitenant-app-id>

    此命令以 JSON 格式显示服务主体详细信息。 在输出中查找“appOwnerOrganizationId”字段,确认它与租户 A 的 ID 匹配。

  4. 保存此步骤中服务主体的对象 ID(来自 "id" 字段)。 对象 ID 是用于在 Azure AI 搜索中设置 CMK 的必需输入。

  5. 获取 Azure Key Vault 的资源 ID:

    az keyvault show --name <key-vault-name> --query id --output tsv

  6. 将租户 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

有关如何轮换或管理密钥的详细信息,请参阅 配置客户管理的密钥进行数据加密