从Key Vault机密部署Web应用程序证书,并将其用于创建SSL绑定-LinkedAuthorizationFailed

时间:2019-07-04 11:42:46

标签: azure azure-web-sites azure-pipelines azure-keyvault arm-template

我正在尝试将具有SSL绑定的自定义域添加到具有ARM模板的Web应用程序。我可以在Azure门户中手动完成此操作,但希望它与ARM模板一起使用。

证书位于密钥库中,该密钥库与Web应用程序不在同一资源组中。我可以从发布管道中的密钥库访问普通机密,如databaseconnectionstrings。问题是当我尝试访问证书时。我对密钥库证书具有GET权限。

我正在使用这个github模板 https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-certificate-from-key-vault

这是我尝试通过发布管道部署ARM模板时遇到的错误。

  

“错误”:{
      “ code”:“ LinkedAuthorizationFailed”,
      “ message”:“对象ID为'xxxx'的客户端'xxxx'有权在范围'***/providers/Microsoft.Web/certificates/xxxxx'上执行操作'Microsoft.Web / certificates / write';但是,它无权执行操作'write '在链接范围'/subscriptions/xxxx/resourceGroups/xxx/providers/Microsoft.KeyVault/vaults/xxxxx'上。”
    }

2 个答案:

答案 0 :(得分:0)

您可以尝试增加Azure DevOps服务连接对访问策略下的关键保管库证书具有的权限,可以从所有证书权限开始,作为故障排除步骤以确认其与权限相关,然后根据需要减少,可能只需要Get和创建吗?

答案 1 :(得分:0)

我通过在ARM模板中创建4个资源解决了它。证书,应用服务计划,Web应用和主机名绑定。就像这个github azure-quickstart-template https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-custom-domain-and-ssl

对我来说,关键是通过添加pxfBlob并删除密钥库属性来修改证书资源,请参见下面的代码。 certificatePfx是一个安全字符串,在keyVault的发布管道中设置。

{
  "type": "Microsoft.Web/certificates",
  "name": "[parameters('certificateName')]",
  "apiVersion": "2016-03-01",
  "location": "[resourceGroup().location]",
  "properties": {
    "name": "[parameters('webAppName')]",
    "serverFarmId": "[concat(resourceId('Microsoft.Web/serverFarms', parameters('appServicePlanName')))]",
    "hostNames": [
      "parameters('hostname_wildcard')",
      "parameters('hostname_domain')"
    ],
    "pfxBlob": "[parameters('certificatePfx')]"
  },
  "dependsOn": [
    "[concat('Microsoft.Web/sites/',parameters('webAppName'))]"
  ]
},