带CNAME链的Azure Front Door自定义域名托管证书续期自动化
自动化Azure Front Door托管证书TXT验证续期方案
针对CNAME委托架构下Azure托管证书自动续期失败、需手动更新_dnsauth TXT记录的问题,可通过以下步骤实现自动化流程:
核心操作:调用RegenerateValidationToken API
Azure Front Door的自定义域名资源提供了RegenerateValidationToken操作,对应门户中"重新生成验证令牌"的功能,可通过REST API、Azure CLI或PowerShell触发。
1. 定期检查证书验证状态
先判断自定义域名是否处于证书验证pending状态:
- Azure CLI:
VALIDATION_STATE=$(az afd custom-domain show --resource-group <你的资源组名> --profile-name <你的AFD配置文件名> --name <自定义域名> --query "properties.validationProperties.validationState" -o tsv)
- PowerShell:
$domain = Get-AzFrontDoorCustomDomain -ResourceGroupName <你的资源组名> -FrontDoorName <你的AFD配置文件名> -Name <自定义域名> $validationState = $domain.ValidationProperties.ValidationState
2. 触发验证令牌重生成
当状态为Pending时,调用重生成接口:
- Azure CLI(通过az rest):
az rest --method post --uri "/subscriptions/<你的订阅ID>/resourceGroups/<你的资源组名>/providers/Microsoft.Cdn/profiles/<你的AFD配置文件名>/customDomains/<自定义域名>/regenerateValidationToken?api-version=2023-05-01"
- PowerShell(通过Invoke-AzRestMethod):
Invoke-AzRestMethod -Path "/subscriptions/<你的订阅ID>/resourceGroups/<你的资源组名>/providers/Microsoft.Cdn/profiles/<你的AFD配置文件名>/customDomains/<自定义域名>/regenerateValidationToken?api-version=2023-05-01" -Method Post
3. 获取新的TXT验证记录值
重生成后,提取新的_dnsauth令牌:
- Azure CLI:
NEW_TXT_TOKEN=$(az afd custom-domain show --resource-group <你的资源组名> --profile-name <你的AFD配置文件名> --name <自定义域名> --query "properties.validationProperties.validationTokens[?type=='TXT'].token" -o tsv)
- PowerShell:
$domain = Get-AzFrontDoorCustomDomain -ResourceGroupName <你的资源组名> -FrontDoorName <你的AFD配置文件名> -Name <自定义域名> $newTxtToken = ($domain.ValidationProperties.ValidationTokens | Where-Object { $_.Type -eq 'TXT' }).Token
4. 更新DNS TXT记录
根据你的DNS服务商,用对应工具更新_dnsauth.<你的自定义域名>的TXT记录值为上述NEW_TXT_TOKEN:
- 若使用Azure DNS,Azure CLI示例:
az network dns record-set txt update --resource-group <DNS资源组名> --zone-name <根域名> --record-set-name "_dnsauth.www" --set records[0].value="$NEW_TXT_TOKEN"
- 若使用Azure DNS,PowerShell示例:
$recordSet = Get-AzDnsRecordSet -ResourceGroupName <DNS资源组名> -ZoneName <根域名> -Name "_dnsauth.www" -RecordType TXT $recordSet.Records[0].Value = $newTxtToken Set-AzDnsRecordSet -RecordSet $recordSet
流水线搭建建议
- 用Azure DevOps Pipeline或GitHub Actions设置定期触发(建议每月一次,提前证书到期30天执行)
- 流程节点:Azure登录 → 检查验证状态 → (若pending)重生成令牌 → 获取新token → 更新DNS记录 → (可选)验证状态确认
- 添加错误处理:状态非pending时跳过执行,更新DNS后等待10-15分钟再检查验证状态是否转为
Succeeded
权限要求
确保执行流程的服务主体拥有以下权限:
- 对Front Door自定义域名的
Microsoft.Cdn/profiles/customDomains/regenerateValidationToken/action权限 - 对DNS区域的
Microsoft.Network/dnsZones/TXT/records/write权限
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

