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

使用Bicep为Azure Function配置Key Vault访问策略报objectId错误如何解决

错误原因

你传入的objectId参数值错误。
test_resource.id是Azure Function资源自身的ARM资源路径,格式为类似/subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.Web/sites/<函数名>的层级路径。而Key Vault访问策略的objectId字段要求传入Azure AD对象的GUID格式主体ID,二者完全不匹配,因此触发Invalid value found at accessPolicies[0].ObjectId报错。

修复方案

你配置的Function开启了系统分配托管标识,该标识创建完成后会自动生成对应的AAD主体ID,直接引用Bicep中Function资源输出的identity.principalId属性作为objectId即可,无需手动查询ID值。
修正后的访问策略代码片段:

resource devops_keyvault 'Microsoft.KeyVault/vaults@2021-10-01' existing = {
  name: keyVaultName
}

resource keyvault_access_policy 'Microsoft.KeyVault/vaults/accessPolicies@2021-10-01' = {
  name: 'add'
  parent: devops_keyvault
  properties: {
    accessPolicies: [
      {
        objectId: test_resource.identity.principalId // 替换为托管标识的主体ID
        permissions: {
          'keys': []
          'secrets': [
            'list'
            'get'
          ]
          'certificates': [
            'list'
            'get'
          ]
        }
        tenantId: subscription().tenantId
      }
    ]
  }
}
注意事项
  • Bicep会自动识别该引用的依赖关系,部署时会先完成Function资源及其系统托管标识的创建,再执行Key Vault访问策略的部署,不需要额外显式配置dependsOn。
  • 如果后续使用用户分配托管标识,同样需要传入对应托管标识资源的principalId属性,不能传入Function资源自身的ARM ID。
  • 不要将托管标识的principalId和函数发布凭据、部署槽相关ID混淆,系统分配托管标识的主体ID固定存放在资源的identity.principalId字段下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:15:34