使用BICEP创建带访问策略的Key Vault时生成复合身份的问题
问题:如何通过BICEP将服务主体以「应用」身份添加到Key Vault访问策略,而非复合身份?
我正在为企业应用使用BICEP创建Azure基础设施,我们的应用通过服务主体(application)使用Key Vault存储和检索机密。当我通过BICEP创建Key Vault并关联服务主体时,该主体在Key Vault访问策略中被创建为复合身份(compound identity)。我需要将其添加为‘application’,就像在Azure门户手动添加时的效果一样。请问如何将服务主体添加为应用而非复合身份?
当前使用的BICEP代码:
resource accessPolicydev 'Microsoft.KeyVault/vaults/accessPolicies@2023-07-01' = { parent: keyvaultExisting name: 'add' properties: { accessPolicies: [ { tenantId: tenantId objectId: objectId applicationId: applicationId permissions: { secrets: [ 'all' ] certificates: [ 'all' ] keys: [ 'all' ] } } ] } }
Azure门户手动添加应用的界面:
解决方案
问题根源在于你同时指定了objectId和applicationId字段——当这两个参数同时存在时,Azure会将其识别为复合身份。要实现和门户手动添加一致的「应用」身份效果,只需移除objectId字段,仅保留tenantId和applicationId即可。
修改后的BICEP代码:
resource accessPolicydev 'Microsoft.KeyVault/vaults/accessPolicies@2023-07-01' = { parent: keyvaultExisting name: 'add' properties: { accessPolicies: [ { tenantId: tenantId applicationId: applicationId // 仅保留应用ID,移除对象ID permissions: { secrets: [ 'all' ] certificates: [ 'all' ] keys: [ 'all' ] } } ] } }
当仅传递applicationId时,Key Vault会直接将该服务主体识别为独立的「应用」身份,完全匹配你在Azure门户手动选择应用的配置效果。
内容的提问来源于stack exchange,提问作者Damo
相关产品推荐
相关产品推荐

