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

Azure Cosmos DB(含CMK):如何通过Bicep设置默认身份?

解决Azure Cosmos DB BICEP部署CMK+连续备份时的托管标识错误

问题分析

你遇到的BadRequest错误核心原因是:启用客户托管密钥(CMK)和连续备份模式时,必须将用户分配或系统分配托管标识设置为Cosmos DB的默认身份,而你当前配置的FirstPartyIdentity是微软第一方服务标识,不符合要求。

解决方案

1. 正确配置默认身份(defaultIdentity)

当使用用户分配托管标识时,defaultIdentity需设置为该标识的客户端ID(Client ID)或资源ID(Resource ID),而非FirstPartyIdentity。

2. 修改后的BICEP代码示例

场景1:用户分配标识在同一BICEP文件中定义

// 定义用户分配托管标识
resource cmkIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: 'cosmos-cmk-identity'
  location: resourceGroup().location
}

// 部署带CMK和连续备份的Cosmos DB
resource cosmos 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' = {
  name: 'your-cosmos-account-name'
  location: resourceGroup().location
  identity: {
    type: 'UserAssigned' // 仅使用用户分配标识,若需系统分配可设为'SystemAssigned,UserAssigned'
    userAssignedIdentities: {
      '${cmkIdentity.id}': {}
    }
  }
  properties: {
    databaseAccountOfferType: 'Standard'
    keyVaultKeyUri: 'https://your-vault-name.vault.azure.net/keys/your-key-name'
    defaultIdentity: cmkIdentity.properties.clientId // 使用用户分配标识的客户端ID
    // 配置连续备份模式(错误提示中提到的必要条件)
    backupPolicy: {
      type: 'Continuous'
      continuousModeProperties: {
        tier: 'Continuous7Days' // 可选Continuous30Days
      }
    }
    // 其他Cosmos DB配置(如一致性级别、区域等)
    consistencyPolicy: {
      defaultConsistencyLevel: 'Session'
    }
    locations: [
      {
        locationName: resourceGroup().location
        failoverPriority: 0
      }
    ]
  }
}

场景2:引用已存在的用户分配标识

如果用户分配标识已提前创建,可通过资源ID获取其客户端ID,或直接使用资源ID作为defaultIdentity的值:

param cmkIdentityResourceId string

// 获取已存在的用户分配标识的客户端ID
data existingIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: split(cmkIdentityResourceId, '/')[8]
  scope: resourceGroup(split(cmkIdentityResourceId, '/')[4], split(cmkIdentityResourceId, '/')[2])
}

resource cosmos 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' = {
  name: 'your-cosmos-account-name'
  location: resourceGroup().location
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${cmkIdentityResourceId}': {}
    }
  }
  properties: {
    databaseAccountOfferType: 'Standard'
    keyVaultKeyUri: 'https://your-vault-name.vault.azure.net/keys/your-key-name'
    defaultIdentity: existingIdentity.properties.clientId // 或直接用cmkIdentityResourceId
    backupPolicy: {
      type: 'Continuous'
      continuousModeProperties: {
        tier: 'Continuous7Days'
      }
    }
    // 其他配置项
  }
}

3. 必要的权限配置

  • 给用户分配标识授予Key Vault的密钥权限:需添加Get、Wrap Key、Unwrap Key权限
  • 确保Key Vault允许Cosmos DB访问:在Key Vault的防火墙设置中,勾选"允许受信任的微软服务访问此密钥保管库",或添加Cosmos DB的IP范围(若使用私有端点则需配置对应网络)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:52:41