You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cosmos DB调用RewrapClientEncryptionKeyAsync返回400 Bad Request

报错根因
  • 核心问题为Microsoft.Azure.Cosmos.Encryption 1.0.0正式版存在请求构造Bug:调用RewrapClientEncryptionKeyAsync执行CMK轮换时,该版本SDK错误将Azure Key Vault要求使用POST方法的密钥重封装操作,构造为GET请求发起,直接触发Key Vault返回400 BadParameter,错误信息为GET method does not allow the operation。
  • 依赖版本不匹配加剧问题:当前使用的Azure.Security.KeyVault.Keys 4.3.0、Azure.Identity 1.6.0与1.0.0版Cosmos加密包存在请求路由逻辑兼容问题,旧版加密包未适配新版Key Vault SDK的请求方法校验规则。
  • 可排除的排查方向:现有旧密钥可正常完成数据创建、读取操作,说明DefaultAzureCredential认证逻辑、新旧密钥的wrap/unwrap/rotate权限配置、Cosmos客户端与数据库运行状态均无问题,不需要调整权限或网络配置。
修复步骤
  1. 升级NuGet包到兼容固定版本
    卸载现有问题版本包,安装以下经兼容性验证的版本组合,不要随意跨大版本升级:
    • Microsoft.Azure.Cosmos.Encryption:升级至1.0.0-preview33及以上预览版

    注意:1.0.0正式版为存在该Bug的版本,2.x系列加密包存在API破坏性变更,与现有文档指引代码不兼容,请勿升级。

    • Microsoft.Azure.Cosmos:同步升级至3.31.2及以上版本,与加密包版本匹配
    • Azure.Security.KeyVault.Keys:升级至4.4.0及以上版本
    • Azure.Identity:升级至1.8.0及以上版本
  2. 调整轮换代码显式传入密钥提供程序
    不要依赖全局注册的默认密钥提供程序自动匹配新旧CMK,调用方法时显式传入新密钥对应的Key Vault客户端实例,参考代码如下:
    // 初始化新CMK对应的Key Vault密钥客户端
    var newKvClient = new KeyClient(
        vaultUri: new Uri("你的Key Vault服务地址"),
        credential: new DefaultAzureCredential());
    var newKeyProvider = new AzureKeyVaultKeyEncryptionKeyClient(newKvClient);
    
    // 执行客户端加密密钥重封装
    var database = cosmosClient.GetDatabase("你的数据库名称");
    await database.RewrapClientEncryptionKeyAsync(
        keyEncryptionKeyName: "你已创建的客户端加密密钥名称",
        newKeyEncryptionKeyResolver: newKeyProvider,
        cancellationToken: CancellationToken.None);
    
  3. 结果验证
    调整完成后重新执行轮换操作,将正常返回200状态码。重封装完成后,所有存量加密数据不需要手动迁移,即可通过新CMK完成加解密操作。

内容的提问来源于stack exchange,提问作者Lan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:03:17