部署包含存储在密钥保管库中的证书的 ARM 模板时出错

Error when deploying ARM template that includes certificate stored in key vault

我正在尝试从 Release Management 部署一个 ARM 模板,其中包含一个 'Microsoft.Web/certificates' 资源,该资源引用存储在密钥保管库中的证书。当密钥保管库与我要部署到的资源组存在于同一订阅中时,这会很好地工作。但是,当密钥保管库存在于不同的订阅中时,我收到以下错误。

资源 Microsoft.Web/certificates 'cert name' 失败并显示消息

{
    "Code": "BadRequest",
    "Message": "The parameter Properties.KeyVaultId has an invalid value.",
    "Target": null,
    "Details": [
    {
      "Message": "The parameter Properties.KeyVaultId has an invalid value."
    },
    {
      "Code": "BadRequest"
    },
    { 
      "ErrorEntity": {
        "Code": "BadRequest",
        "Message": "The parameter Properties.KeyVaultId has an invalid value.",
        "ExtendedCode": "51008",
        "MessageTemplate": "The parameter {0} has an invalid value.",
        "Parameters": [
          "Properties.KeyVaultId"
        ],
        "InnerErrors": null
      }
    }
    ], 
    "Innererror": null
}'

证书资源在我的模板中定义如下。

    {
        "type":"Microsoft.Web/certificates",
        "name": "SomeName",
        "location": "East US 2",
        "apiVersion": "2016-03-01",
        "properties": {
            "keyVaultId": "/subscriptions/<subscriptionId>/resourceGroups/<vault resource group>/providers/Microsoft.KeyVault/vaults/<vault name>",
            "keyVaultSecretName": "SecretName"                
        }            
    }

我正在使用 VSTS 中的 Azure 资源组部署任务来部署资源组。该任务配置为使用具有服务主体的端点,该服务主体在 Azure 中设置了以下权限:

Microsoft.Azure.WebSites 主体被授予获取密钥保管库机密的权限。

密钥保管库还启用了 'Enable access to Azure Resource Manager for template deployment' 选项。证书是使用 powershell 而不是通过门户上传到密钥库的。

我是不是遗漏了什么?

谢谢

我想我找到了这个问题的原因。显然,创建资源组后,您不能更改秘密名称。如果这样做,将抛出上述错误。

如果要更改密文名称,需要删除资源组并重新部署所有内容。

您是否一直在更改 ARM 模板中的秘密名称,而没有删除 Azure 门户中的完整资源组?

如果您在之前的部署中引用了 keyvault 中的证书(秘密)并且该证书已在 keyvault 中被删除或替换,您可以获得此信息。新部署将失败并出现上述错误 (51008)。例如,如果您已从另一个 keyvault 存储迁移机密。

这与同一证书的版本不同。新版本可以正常工作。

将密钥替换为密钥库中的原始密钥或删除密钥并添加新密钥。