自定义 DNS 名称和 TLS 绑定是否在 Azure ARM 模板重新部署期间保留?

Are custom DNS names and TLS bindings peristed during Azure ARM Template re-deployment?

情况:

我们使用自定义 ARM 模板为客户端部署了多个相同的应用服务实例。这些服务托管在客户自己的 Azure 帐户上。 在我们部署之后,客户端开始为所有面向 Web 的实例手动配置自定义 DNS 名称和 TLS 证书。我们无权访问他们的私人证书(我们也不想要):

一切正常,但是...

问题: 我担心 TLS 配置会被刷新 if/when 我们必须重新部署我们的 ARM 模板。通常,当客户想要更改某些设置时,我会自定义并重新部署所有实例。 我需要确保他们的 TLS 配置在这种情况下不会丢失。

我有 DNS 和 TLS 绑定的 ARM 配置(引用私有证书指纹),也许将这些块合并到我们的 ARM 模板中就足以保留客户端的配置?

 {
     "type": "Microsoft.Web/sites/hostNameBindings",
     "apiVersion": "2018-11-01",
     "name": "[concat(parameters('site_name'), '/', parameters('site_name'), '.xxxxxx.com')]",
     "location": "West Europe",
     "dependsOn": [
         "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
     ],
     "properties": {
         "siteName": "site-name",
         "hostNameType": "Verified",
         "sslState": "SniEnabled",
         "thumbprint": "45DA3B...67"
     }
 }

 ...     

 "hostNameSslStates": [
 {
     "name": "[concat(parameters('site_name'), '.xxxxxx.com')]",
     "sslState": "SniEnabled",
     "thumbprint": "45DA3B...67",
     "hostType": "Standard"
 },
 ...

问题: 即使无法访问私人证书,是否有办法保留和合并客户的 TLS 设置? 我在 Azure ARM 文档中找不到明确的答案。

澄清: 我知道有更简洁的方法可以通过 ARM 自动执行 DNS/TLS 配置,但现在我无法更改设置,需要使用现有的设置。

如果您不通过 ARM 进行 SSL 配置,最好从您的 ARM 模板中完全省略这些部分。我们有同样的情况,它工作得很好。确保ARM以增量模式执行,否则你可能会遇到问题。

  • 不要使用您的 ARM 模板部署任何 Microsoft.Web/sites/hostNameBindings 资源
  • 从您的 Microsoft.Web/sites 资源中删除 hostNameSslStates

您可以使用像 this:

这样简单的 ARM 模板对其进行测试
    {
      "apiVersion": "2018-11-01",
      "type": "Microsoft.Web/sites",
      "kind": "app",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
      ]
    }

您的 SSL 配置不会被触及,因此您的绑定保持不变。这是常见的 ARM 行为。如果你不指定模板的某个部分,它就不会被触及。但是,如果您指定一个数组,它将替换整个数组。在这种情况下,ARM 不会合并。这就是为什么你应该省略 hostNameSslStates.