Azure Bicep部署App Service证书报KeyVault Certificate参数无效
问题修复方案
你出现该报错主要是遗漏了以下几处必要配置:
- Key Vault访问权限配置缺失:App Service的资源提供程序
Microsoft.Azure.Websites没有Key Vault的机密读取权限,你需要在Key Vault的accessPolicies中为以下固定服务主体添加获取机密、获取证书权限:
主体应用ID:abfa0a7c-a6b6-4736-8310-330dcd5a4f12(所有Azure公有云环境该ID统一) - Key Vault软删除未开启:Azure要求用于关联App Service证书的Key Vault必须开启软删除功能,你需要在Key Vault的properties中添加
enableSoftDelete: true,软删除保留天数最小设为7天。 - 证书关联参数填写错误:
Microsoft.Web/certificates资源的keyVaultSecretName参数只需填机密本身的名称,不需要带Key Vault名称,你此处如果填了mykeyvault/sslcert就会报错,应该填sslcert,建议直接用Bicep的动态引用写法sslCertificateSecret.name.split('/')[1]避免写错。 - 带密码的PFX未配置密码参数:如果你的PFX证书导出时设置了密码,需要在
Microsoft.Web/certificates的properties中添加password: <你的pfx导出密码>配置项。 - base64格式问题:确认你传入的base64字符串没有换行、没有PEM格式的头尾标识(如
-----BEGIN PRIVATE KEY-----这类内容),是PFX二进制文件直接转换的纯base64字符串。
修正后的关键代码示例
resource kv 'Microsoft.KeyVault/vaults@2021-06-01-preview' = { name: 'mykeyvault' location: resourceGroup().location properties: { tenantId: tenantId sku: { name: 'standard' family: 'A' } enabledForTemplateDeployment: true enableSoftDelete: true // 新增:开启软删除 softDeleteRetentionInDays: 7 // 新增:软删除保留天数 accessPolicies: [ // 新增:给App Service资源提供程序加权限 { tenantId: tenantId objectId: 'abfa0a7c-a6b6-4736-8310-330dcd5a4f12' permissions: { secrets: [ 'get' ] certificates: [ 'get' ] } } // 其他原有访问策略保留 ] } } resource sslCertificate 'Microsoft.Web/certificates@2021-01-15' = { name: 'myCertificate' location: resourceGroup().location properties: { keyVaultId: kv.id // 直接动态引用避免硬编码错误 keyVaultSecretName: sslCertificateSecret.name.split('/')[1] // 自动提取机密名称 serverFarmId: appServicePlan.id // password: '你的pfx导出密码' // 如果PFX有密码则取消注释填写 } }
内容的提问来源于stack exchange,提问作者olivier
相关产品推荐
相关产品推荐

