gpt4 book ai didi

azure - 从脚本更新 Azure CDN 自定义域证书

转载 作者:行者123 更新时间:2023-12-04 12:11:08 25 4
gpt4 key购买 nike

如何触发 Azure CDN 在不停机的情况下从 key 存储中读取最新版本的自定义证书?

我的 CDN 设置工作正常,但考虑到 Let's Encrypt,证书的生命周期很短,需要自动化更新。在 Azure CLI 上执行 az keyvault 证书导入 操作非常简单,可以将证书更新到 Key Vault,但接下来该怎么办呢?如何告诉 Azure CDN 开始使用新版本的证书?

尝试失败

  • 等了几个小时。什么都没发生。
  • 在已启用 HTTPS 的域上运行 az cdn custom-domain enable-https。结果:内部配置错误和几个小时的停机时间,首先禁用自定义域,然后启用它。不过,证书已更新。

来自 Azure 门户

有关自定义域证书版本的 Azure 门户工具提示显示“选择要使用的证书版本。默认情况下,我们将使用最新版本。”创建终结点时确实如此,但如何开始使用最新版本呢?已从下拉列表中选择了最新版本,但我确实选择了以前的版本并选择了最新版本。这样做会启用“保存”。

保存表单会导致证书的无停机更新。不错,但考虑到自动化和脚本编写,这并不是真正的出路。

可能会起作用,但我还没有测试过

  • 应用 CDN 设置的 ARM 模板
  • Powershell Az.Cdn具有 Start-AzCdnEndpoint/Stop-AzCdnEndpoint cmdlet。也许有帮助,但 100% 保证会产生停机时间。

在下一个更新周期有什么我可以尝试的吗?

最佳答案

自 2021 年 4 月 5 日起,Azure CDN 可以被告知使用特定 KeyVault 证书的“最新”版本。我还没有找到任何有关此更改的消息,但它已添加到 the documentationthis commit.

In order for the certificate to be automatically rotated to the latest version when a newer version of the certificate is available in your Key Vault, please set the certificate/secret version to 'Latest'. If a specific version is selected, you have to re-select the new version manually for certificate rotation. It takes up to 24 hours for the new version of the certificate/secret to be deployed.

在门户中,可以通过在“证书/ secret 版本”下拉列表中选择“最新”选项来完成此操作。使用 Azure CLI,可以通过以下方式完成此操作:

az cdn custom-domain enable-https \
--resource-group "$cdnResourceGroupName" \
--profile-name "$cdnProfileName" \
--endpoint-name "$cdnEndpointName" \
--name "$cdnCustomDomainName" \
--user-cert-subscription-id "$subscriptionId" \
--user-cert-group-name "$keyVaultResourceGroupName" \
--user-cert-vault-name "$keyVaultName" \
--user-cert-secret-name "$secretName" \
--user-cert-protocol-type 'sni'

请注意,此命令不会设置--user-cert-secret-version参数,这是您选择“最新”功能的方式。

对于任何想要手动执行此操作的人,手动执行此操作的旧答案如下。

<小时/>

Running az cdn custom-domain enable-https on a domain having the HTTPS already enabled. Result: an internal misconfiguration and couple hours of downtime to first disable the custom domain and then enable it.

自 2021 年 4 月 5 日起,这可以通过 Azure CLI 完成:

az cdn custom-domain enable-https \
--resource-group "$cdnResourceGroupName" \
--profile-name "$cdnProfileName" \
--endpoint-name "$cdnEndpointName" \
--name "$cdnCustomDomainName" \
--user-cert-subscription-id "$subscriptionId" \
--user-cert-group-name "$keyVaultResourceGroupName" \
--user-cert-vault-name "$keyVaultName" \
--user-cert-secret-name "$secretName" \
--user-cert-secret-version "$secretVersion" \
--user-cert-protocol-type 'sni'

(当这个答案最初于 2019 年 5 月编写时,Azure CLI 记录了一个 --custom-domain-https-parameters 参数,暗示它可以用于此目的。如果该参数是如果未提供,CLI 将运行 CDN 管理的证书工作流程(由 DigiCert 颁发的证书)。但是,从未正确记录如何实际使用该参数。截至 2021 年 3 月,该参数再次从 CLI 中删除。最后,自 2021 年 4 月起,已添加 --user-cert-* 参数。)

等效功能已于 2019 年 3 月添加到 the .Net SDK, 。所以the Nuget package应该允许您使用用户管理的证书。

截至 2021 年 4 月,Azure PowerShell's Enable-AzCdnCustomDomainHttps commandlet仍然不支持用户管理的证书,仅支持 CDN 管理的证书。

或者您可以直接使用 REST API,如文档 here. 所示。向 https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Cdn/profiles/$cdnProfileName/endpoints/$cdnEndpointName 发出 POST 请求/customDomains/$cdnCustomDomainName/enableCustomHttps?api-version=2018-04-02application/json 正文如下

{
"certificateSource": "AzureKeyVault",
"certificateSourceParameters": {
"@odata.type": "#Microsoft.Azure.Cdn.Models.KeyVaultCertificateSourceParameters",
"deleteRule": "NoAction",
"resourceGroupName": "$resourceGroupName",
"secretName": "$secretName",
"secretVersion": "$secretVersion",
"subscriptionId": "$subscriptionId",
"updateRule": "NoAction",
"vaultName": "$keyVaultName"
},
"protocolType": "ServerNameIndication"
}

$resourceGroupName$keyVaultName 标识 KeyVault。 $secretName$secretVersion 标识证书。 (如果门户没有显示您的 KeyVault 中的任何 secret ,请不要感到困惑;带有私钥的 KeyVault 证书隐式是具有相同名称和版本的 KeyVault secret 。)

此 API 端点遵循标准 REST 语义,因为它是长时间运行的异步操作,所以它返回 HTTP 202 Accepted。它将在响应中设置 Location header ,您应该重复 GET 该 URL,直到它解析为成功或失败状态代码。

请注意,门户还使用 REST API,因此您始终可以通过在门户 UI 中执行步骤并在浏览器的开发人员工具中检查网络请求来获得此信息。不过,您需要获取自己的 oauth2 token (通过创建 SP)。

<小时/>

旁白:为了节省人们在尝试为自己的域执行此操作时发现这一点所花费的时间,请不要被文档或 the example in the Azure Rest API specs repo. 所愚弄。它们暗示 API 版本 2017-10-12 支持 customHttpsParameters,但实际上只有 2018-04-02 及更高版本支持它。如果您使用2017-10-12,则该参数将被静默忽略,并且它将尝试使用 Digicert 自动证书工作流程。

关于azure - 从脚本更新 Azure CDN 自定义域证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55666931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com