如何使用Azure CLI向Azure Front Door上传自定义TLS证书并通过定时Bash脚本自动维护证书更新
如何使用Azure CLI向Azure Front Door上传自定义TLS证书并通过定时Bash脚本自动维护证书更新
嗨,我来帮你梳理下用Bash脚本结合Azure CLI自动维护Azure Front Door自定义TLS证书的流程~你之前提到的应用服务器两步操作思路没问题,但Front Door的证书管理逻辑有点不一样,它依赖Azure Key Vault来存储证书,我给你拆解成具体可执行的步骤:
前置准备
- 确保你已经安装并登录了Azure CLI,且拥有对应资源(Front Door、Key Vault)的操作权限
- 准备好更新后的PFX格式证书文件,以及证书密码
- 确认你的Key Vault已经启用了软删除和清除保护(这是Front Door的硬性要求)
具体脚本步骤
1. 将新证书导入Azure Key Vault
Front Door不能直接上传证书,必须先把证书存到Key Vault里:
# 替换成你的变量 keyVaultName="你的Key Vault名称" certificateName="证书在Vault中的标识名称" domain="你的域名" pfxPass="PFX证书密码" # 导入证书到Key Vault az keyvault certificate import --vault-name "$keyVaultName" --name "$certificateName" --file "$domain.pfx" --password "$pfxPass"
2. 获取证书的完整资源ID
接下来需要拿到刚导入证书的唯一ID,用来关联到Front Door:
certificateId=$(az keyvault certificate show --vault-name "$keyVaultName" --name "$certificateName" --query id --output tsv)
3. 将证书绑定到Front Door的自定义域名
最后一步就是把Key Vault里的证书关联到Front Door的目标域名上:
# 替换成你的Front Door相关变量 subscription="你的订阅ID" resourceGroup="资源组名称" frontDoorName="Front Door实例名称" customDomainName="Front Door中配置的自定义域名" # 切换到目标订阅(如果需要的话) az account set --subscription "$subscription" # 更新域名的TLS证书配置 az network front-door custom-domain update \ --front-door-name "$frontDoorName" \ --resource-group "$resourceGroup" \ --name "$customDomainName" \ --certificate-source KeyVault \ --certificate-id "$certificateId"
完整定时脚本示例
把上面的步骤整合起来,加上错误处理,就是一个可以定时运行的脚本:
#!/bin/bash # -------------------------- 配置区 -------------------------- subscription="你的订阅ID" resourceGroup="你的资源组名称" frontDoorName="你的Front Door实例名称" keyVaultName="你的Key Vault名称" certificateName="Key Vault中的证书名称" domain="你的域名(对应PFX文件名)" pfxPass="PFX证书密码" customDomainName="Front Door里的自定义域名" # ----------------------------------------------------------- # 切换到目标订阅 az account set --subscription "$subscription" # 导入证书到Key Vault echo "开始导入证书到Key Vault..." az keyvault certificate import --vault-name "$keyVaultName" --name "$certificateName" --file "$domain.pfx" --password "$pfxPass" if [ $? -ne 0 ]; then echo "证书导入失败,请检查Key Vault权限或证书文件!" exit 1 fi # 获取证书ID echo "获取证书资源ID..." certificateId=$(az keyvault certificate show --vault-name "$keyVaultName" --name "$certificateName" --query id --output tsv) if [ -z "$certificateId" ]; then echo "无法获取证书ID,请检查证书是否导入成功!" exit 1 fi # 更新Front Door域名证书 echo "更新Front Door自定义域名证书..." az network front-door custom-domain update \ --front-door-name "$frontDoorName" \ --resource-group "$resourceGroup" \ --name "$customDomainName" \ --certificate-source KeyVault \ --certificate-id "$certificateId" if [ $? -eq 0 ]; then echo "✅ 证书更新完成!" else echo "❌ 证书更新失败,请检查Front Door配置或权限!" exit 1 fi
定时运行设置
- 如果是在Linux服务器上,你可以用
crontab来设置定时任务,比如每月运行一次:# 编辑crontab crontab -e # 添加一行(每月1号凌晨2点运行脚本) 0 2 1 * * /path/to/your/cert-update-script.sh >> /var/log/cert-update.log 2>&1 - 如果想在云端托管,推荐用Azure Automation Runbook,它可以直接在Azure环境中运行脚本,还自带监控和告警功能。
注意事项
- 运行脚本的身份(比如服务主体)需要拥有Key Vault的
Certificate Import权限,以及Front Door的Custom Domain Update权限 - Key Vault需要允许Front Door访问:可以在Key Vault的防火墙设置中启用“允许受信任的Microsoft服务访问此密钥保管库”
- 证书必须是PFX格式,包含完整的私钥,有效期至少保留30天(Front Door的要求)
备注:内容来源于stack exchange,提问作者The Fabio
相关产品推荐
相关产品推荐

