feat: Add support for AWS Route 53 DNS provider (#11158)

This commit is contained in:
AirboZH 2025-12-02 18:20:35 +08:00 committed by GitHub
parent 1f9a3aa51a
commit 28303ffa82
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 59 additions and 1 deletions

View file

@ -86,6 +86,7 @@ require (
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.5 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.5 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14 // indirect
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.0 // indirect
github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.30.5 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.5 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10 // indirect

View file

@ -157,6 +157,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 h1:FIouAnCE
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14/go.mod h1:UTwDc5COa5+guonQU8qBikJo1ZJ4ln2r1MkF7Dqag1E= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14/go.mod h1:UTwDc5COa5+guonQU8qBikJo1ZJ4ln2r1MkF7Dqag1E=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14 h1:FzQE21lNtUor0Fb7QNgnEyiRCBlolLTX/Z1j65S7teM= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14 h1:FzQE21lNtUor0Fb7QNgnEyiRCBlolLTX/Z1j65S7teM=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14/go.mod h1:s1ydyWG9pm3ZwmmYN21HKyG9WzAZhYVW85wMHs5FV6w= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14/go.mod h1:s1ydyWG9pm3ZwmmYN21HKyG9WzAZhYVW85wMHs5FV6w=
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.0 h1:W3+0Cbc9awFBr9Yt7nFUkvB4N4e7vVIGtKD1qDttXn4=
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.0/go.mod h1:Wa3q5R2uwIfIL3HZH+vG1/P9y7CjjfzTgcz5IWXlsZs=
github.com/aws/aws-sdk-go-v2/service/s3 v1.92.1 h1:OgQy/+0+Kc3khtqiEOk23xQAglXi3Tj0y5doOxbi5tg= github.com/aws/aws-sdk-go-v2/service/s3 v1.92.1 h1:OgQy/+0+Kc3khtqiEOk23xQAglXi3Tj0y5doOxbi5tg=
github.com/aws/aws-sdk-go-v2/service/s3 v1.92.1/go.mod h1:wYNqY3L02Z3IgRYxOBPH9I1zD9Cjh9hI5QOy/eOjQvw= github.com/aws/aws-sdk-go-v2/service/s3 v1.92.1/go.mod h1:wYNqY3L02Z3IgRYxOBPH9I1zD9Cjh9hI5QOy/eOjQvw=
github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 h1:MxMBdKTYBjPQChlJhi4qlEueqB1p1KcbTEa7tD5aqPs= github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 h1:MxMBdKTYBjPQChlJhi4qlEueqB1p1KcbTEa7tD5aqPs=

View file

@ -21,6 +21,7 @@ import (
"github.com/go-acme/lego/v4/providers/dns/ovh" "github.com/go-acme/lego/v4/providers/dns/ovh"
"github.com/go-acme/lego/v4/providers/dns/rainyun" "github.com/go-acme/lego/v4/providers/dns/rainyun"
"github.com/go-acme/lego/v4/providers/dns/regru" "github.com/go-acme/lego/v4/providers/dns/regru"
"github.com/go-acme/lego/v4/providers/dns/route53"
"github.com/go-acme/lego/v4/providers/dns/spaceship" "github.com/go-acme/lego/v4/providers/dns/spaceship"
"github.com/go-acme/lego/v4/providers/dns/tencentcloud" "github.com/go-acme/lego/v4/providers/dns/tencentcloud"
"github.com/go-acme/lego/v4/providers/dns/vercel" "github.com/go-acme/lego/v4/providers/dns/vercel"
@ -35,6 +36,7 @@ const (
DnsPod DnsType = "DnsPod" DnsPod DnsType = "DnsPod"
AliYun DnsType = "AliYun" AliYun DnsType = "AliYun"
AliESA DnsType = "AliESA" AliESA DnsType = "AliESA"
AWSRoute53 DnsType = "AWSRoute53"
CloudFlare DnsType = "CloudFlare" CloudFlare DnsType = "CloudFlare"
CloudDns DnsType = "CloudDns" CloudDns DnsType = "CloudDns"
NameSilo DnsType = "NameSilo" NameSilo DnsType = "NameSilo"
@ -120,6 +122,19 @@ func getDNSProviderConfig(dnsType DnsType, params string) (challenge.Provider, e
config.PollingInterval = pollingInterval config.PollingInterval = pollingInterval
config.TTL = ttl config.TTL = ttl
p, err = aliesa.NewDNSProviderConfig(config) p, err = aliesa.NewDNSProviderConfig(config)
case AWSRoute53:
config := route53.NewDefaultConfig()
config.AccessKeyID = param.AccessKey
config.SecretAccessKey = param.SecretKey
config.Region = param.Region
if config.Region == "" {
config.Region = "us-east-1"
}
config.HostedZoneID = param.Endpoint
config.PropagationTimeout = propagationTimeout
config.PollingInterval = pollingInterval
config.TTL = ttl
p, err = route53.NewDNSProviderConfig(config)
case CloudFlare: case CloudFlare:
config := cloudflare.NewDefaultConfig() config := cloudflare.NewDefaultConfig()
config.AuthEmail = param.Email config.AuthEmail = param.Email

View file

@ -180,6 +180,10 @@ export const DNSTypes = [
label: i18n.global.t('website.aliEsa'), label: i18n.global.t('website.aliEsa'),
value: 'AliESA', value: 'AliESA',
}, },
{
label: i18n.global.t('website.awsRoute53'),
value: 'AWSRoute53',
},
{ {
label: i18n.global.t('website.tencentCloud'), label: i18n.global.t('website.tencentCloud'),
value: 'TencentCloud', value: 'TencentCloud',

View file

@ -2351,6 +2351,7 @@ const message = {
createDnsAccount: 'DNS account', createDnsAccount: 'DNS account',
aliyun: 'Aliyun DNS', aliyun: 'Aliyun DNS',
aliEsa: 'Aliyun ESA', aliEsa: 'Aliyun ESA',
awsRoute53: 'AWS Route 53',
manual: 'Manual parsing', manual: 'Manual parsing',
key: 'Key', key: 'Key',
check: 'View', check: 'View',
@ -2831,6 +2832,7 @@ const message = {
pushNode: 'Sync to Other Nodes', pushNode: 'Sync to Other Nodes',
pushNodeHelper: 'Push to selected nodes after application/renewal', pushNodeHelper: 'Push to selected nodes after application/renewal',
fromMaster: 'Master Node Push', fromMaster: 'Master Node Push',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: 'Create rule', create: 'Create rule',

View file

@ -2350,6 +2350,7 @@ const message = {
createDnsAccount: 'Cuenta DNS', createDnsAccount: 'Cuenta DNS',
aliyun: 'Aliyun DNS', aliyun: 'Aliyun DNS',
aliEsa: 'Aliyun ESA', aliEsa: 'Aliyun ESA',
awsRoute53: 'AWS Route 53',
manual: 'Resolución manual', manual: 'Resolución manual',
key: 'Clave', key: 'Clave',
check: 'Ver', check: 'Ver',
@ -2808,6 +2809,7 @@ const message = {
pushNode: 'Sincronizar con otros nodos', pushNode: 'Sincronizar con otros nodos',
pushNodeHelper: 'Enviar a los nodos seleccionados después de la aplicación/renovación', pushNodeHelper: 'Enviar a los nodos seleccionados después de la aplicación/renovación',
fromMaster: 'Envío desde el nodo maestro', fromMaster: 'Envío desde el nodo maestro',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: 'Crear regla', create: 'Crear regla',

View file

@ -2271,6 +2271,7 @@ const message = {
createDnsAccount: 'DNSアカウント', createDnsAccount: 'DNSアカウント',
aliyun: 'エイリアン', aliyun: 'エイリアン',
aliEsa: 'エイリアン ESA', aliEsa: 'エイリアン ESA',
awsRoute53: 'AWS Route 53',
manual: '手動解析', manual: '手動解析',
key: '鍵', key: '鍵',
check: 'ビュー', check: 'ビュー',
@ -2750,6 +2751,7 @@ const message = {
pushNode: '他のノードに同期', pushNode: '他のノードに同期',
pushNodeHelper: '申請/更新後に選択したノードにプッシュ', pushNodeHelper: '申請/更新後に選択したノードにプッシュ',
fromMaster: 'マスターノードからのプッシュ', fromMaster: 'マスターノードからのプッシュ',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: 'ルールを作成します', create: 'ルールを作成します',

View file

@ -2231,6 +2231,7 @@ const message = {
createDnsAccount: 'DNS 계정 생성', createDnsAccount: 'DNS 계정 생성',
aliyun: '알리윤', aliyun: '알리윤',
aliEsa: '알리윤 ESA', aliEsa: '알리윤 ESA',
awsRoute53: 'AWS Route 53',
manual: '수동 설정', manual: '수동 설정',
key: '키', key: '키',
check: '보기', check: '보기',
@ -2701,6 +2702,7 @@ const message = {
pushNode: '다른 노드에 동기화', pushNode: '다른 노드에 동기화',
pushNodeHelper: '신청/갱신 선택한 노드로 푸시', pushNodeHelper: '신청/갱신 선택한 노드로 푸시',
fromMaster: '마스터 노드에서 푸시', fromMaster: '마스터 노드에서 푸시',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: '규칙 만들기', create: '규칙 만들기',

View file

@ -2325,6 +2325,7 @@ const message = {
createDnsAccount: 'Akaun DNS', createDnsAccount: 'Akaun DNS',
aliyun: 'Aliyun', aliyun: 'Aliyun',
aliEsa: 'Aliyun ESA', aliEsa: 'Aliyun ESA',
awsRoute53: 'AWS Route 53',
manual: 'Penyelesaian Manual', manual: 'Penyelesaian Manual',
key: 'Kunci', key: 'Kunci',
check: 'Lihat', check: 'Lihat',
@ -2810,6 +2811,7 @@ const message = {
pushNode: 'Segerakan ke Nod Lain', pushNode: 'Segerakan ke Nod Lain',
pushNodeHelper: 'Tolak ke nod terpilih selepas permohonan/pembaharuan', pushNodeHelper: 'Tolak ke nod terpilih selepas permohonan/pembaharuan',
fromMaster: 'Tolak dari Nod Utama', fromMaster: 'Tolak dari Nod Utama',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: 'Buat peraturan', create: 'Buat peraturan',

View file

@ -2327,6 +2327,7 @@ const message = {
createDnsAccount: 'Conta DNS', createDnsAccount: 'Conta DNS',
aliyun: 'Aliyun', aliyun: 'Aliyun',
aliEsa: 'Aliyun ESA', aliEsa: 'Aliyun ESA',
awsRoute53: 'AWS Route 53',
manual: 'Análise manual', manual: 'Análise manual',
key: 'Chave', key: 'Chave',
check: 'Ver', check: 'Ver',
@ -2816,6 +2817,7 @@ const message = {
pushNode: 'Sincronizar com Outros Nós', pushNode: 'Sincronizar com Outros Nós',
pushNodeHelper: 'Enviar para os nós selecionados após a aplicação/renovação', pushNodeHelper: 'Enviar para os nós selecionados após a aplicação/renovação',
fromMaster: 'Envio do Mestre', fromMaster: 'Envio do Mestre',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: 'Criar regra', create: 'Criar regra',

View file

@ -2322,6 +2322,7 @@ const message = {
createDnsAccount: 'DNS аккаунт', createDnsAccount: 'DNS аккаунт',
aliyun: 'Aliyun', aliyun: 'Aliyun',
aliEsa: 'Aliyun ESA', aliEsa: 'Aliyun ESA',
awsRoute53: 'AWS Route 53',
manual: 'Ручная настройка', manual: 'Ручная настройка',
key: 'Ключ', key: 'Ключ',
check: 'Просмотр', check: 'Просмотр',
@ -2810,6 +2811,7 @@ const message = {
pushNode: 'Синхронизация с другими узлами', pushNode: 'Синхронизация с другими узлами',
pushNodeHelper: 'Отправить на выбранные узлы после заявки/продления', pushNodeHelper: 'Отправить на выбранные узлы после заявки/продления',
fromMaster: 'Отправка с главного узла', fromMaster: 'Отправка с главного узла',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: 'Создать правило', create: 'Создать правило',

View file

@ -2382,6 +2382,7 @@ const message = {
createDnsAccount: 'DNS hesabı', createDnsAccount: 'DNS hesabı',
aliyun: 'Aliyun DNS', aliyun: 'Aliyun DNS',
aliEsa: 'Aliyun ESA', aliEsa: 'Aliyun ESA',
awsRoute53: 'AWS Route 53',
manual: 'Manuel çözümleme', manual: 'Manuel çözümleme',
key: 'Anahtar', key: 'Anahtar',
check: 'Görüntüle', check: 'Görüntüle',
@ -2869,6 +2870,7 @@ const message = {
pushNode: 'Diğer Düğümlere Senkronize Et', pushNode: 'Diğer Düğümlere Senkronize Et',
pushNodeHelper: 'Başvuru/yenilemeden sonra seçilen düğümlere gönder', pushNodeHelper: 'Başvuru/yenilemeden sonra seçilen düğümlere gönder',
fromMaster: 'Ana Düğümden Gönder', fromMaster: 'Ana Düğümden Gönder',
hostedZoneID: 'Hosted Zone ID',
}, },
firewall: { firewall: {
create: 'Kural oluştur', create: 'Kural oluştur',

View file

@ -2184,6 +2184,7 @@ const message = {
createDnsAccount: 'DNS 帳戶', createDnsAccount: 'DNS 帳戶',
aliyun: '阿里雲 DNS', aliyun: '阿里雲 DNS',
aliEsa: '阿里雲 ESA', aliEsa: '阿里雲 ESA',
awsRoute53: 'AWS Route 53亞馬遜',
manual: '手動解析', manual: '手動解析',
key: '金鑰', key: '金鑰',
check: '查看', check: '查看',
@ -2632,6 +2633,7 @@ const message = {
pushNode: '同步到其他節點', pushNode: '同步到其他節點',
pushNodeHelper: '申請/續期之後推送到選擇的節點', pushNodeHelper: '申請/續期之後推送到選擇的節點',
fromMaster: '主節點推送', fromMaster: '主節點推送',
hostedZoneID: '託管區域 ID',
}, },
firewall: { firewall: {
create: '建立規則', create: '建立規則',

View file

@ -2180,6 +2180,7 @@ const message = {
createDnsAccount: 'DNS 账户', createDnsAccount: 'DNS 账户',
aliyun: '阿里云', aliyun: '阿里云',
aliEsa: '阿里云 ESA', aliEsa: '阿里云 ESA',
awsRoute53: 'AWS Route 53亚马逊',
manual: '手动解析', manual: '手动解析',
key: '密钥', key: '密钥',
check: '查看', check: '查看',
@ -2628,6 +2629,7 @@ const message = {
pushNode: '同步到其他节点', pushNode: '同步到其他节点',
pushNodeHelper: '申请/续期之后推送到选择的节点', pushNodeHelper: '申请/续期之后推送到选择的节点',
fromMaster: '主节点推送', fromMaster: '主节点推送',
hostedZoneID: '托管区域 ID',
}, },
firewall: { firewall: {
create: '创建规则', create: '创建规则',

View file

@ -24,7 +24,8 @@
account.type === 'AliYun' || account.type === 'AliYun' ||
account.type === 'AliESA' || account.type === 'AliESA' ||
account.type === 'HuaweiCloud' || account.type === 'HuaweiCloud' ||
account.type === 'BaiduCloud' account.type === 'BaiduCloud' ||
account.type === 'AWSRoute53'
" "
> >
<el-form-item label="Access key" prop="authorization.accessKey"> <el-form-item label="Access key" prop="authorization.accessKey">
@ -159,6 +160,21 @@
<el-input v-model.trim="account.authorization['baseURL']"></el-input> <el-input v-model.trim="account.authorization['baseURL']"></el-input>
</el-form-item> </el-form-item>
</div> </div>
<div v-if="account.type === 'AWSRoute53'">
<el-form-item label="Region" prop="authorization.region">
<el-input
v-model.trim="account.authorization['region']"
:placeholder="'us-east-1'"
></el-input>
</el-form-item>
<el-form-item
:label="$t('ssl.hostedZoneID')"
prop="authorization.endpoint"
:rules="[Rules.requiredInput]"
>
<el-input v-model.trim="account.authorization['endpoint']"></el-input>
</el-form-item>
</div>
</el-form> </el-form>
</el-col> </el-col>
</el-row> </el-row>