From 28303ffa825ffeeb43be5aaaae6f21a2c06798f2 Mon Sep 17 00:00:00 2001 From: AirboZH Date: Tue, 2 Dec 2025 18:20:35 +0800 Subject: [PATCH] feat: Add support for AWS Route 53 DNS provider (#11158) --- agent/go.mod | 1 + agent/go.sum | 2 ++ agent/utils/ssl/dns_provider.go | 15 +++++++++++++++ frontend/src/global/mimetype.ts | 4 ++++ frontend/src/lang/modules/en.ts | 2 ++ frontend/src/lang/modules/es-es.ts | 2 ++ frontend/src/lang/modules/ja.ts | 2 ++ frontend/src/lang/modules/ko.ts | 2 ++ frontend/src/lang/modules/ms.ts | 2 ++ frontend/src/lang/modules/pt-br.ts | 2 ++ frontend/src/lang/modules/ru.ts | 2 ++ frontend/src/lang/modules/tr.ts | 2 ++ frontend/src/lang/modules/zh-Hant.ts | 2 ++ frontend/src/lang/modules/zh.ts | 2 ++ .../website/ssl/dns-account/create/index.vue | 18 +++++++++++++++++- 15 files changed, 59 insertions(+), 1 deletion(-) diff --git a/agent/go.mod b/agent/go.mod index f36cc7f34..7a7bcdc7a 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -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/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/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/sso v1.30.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10 // indirect diff --git a/agent/go.sum b/agent/go.sum index 1464d80d5..c2d8f3d97 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -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/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/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/go.mod h1:wYNqY3L02Z3IgRYxOBPH9I1zD9Cjh9hI5QOy/eOjQvw= github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 h1:MxMBdKTYBjPQChlJhi4qlEueqB1p1KcbTEa7tD5aqPs= diff --git a/agent/utils/ssl/dns_provider.go b/agent/utils/ssl/dns_provider.go index 32bcb3869..7b45e401b 100644 --- a/agent/utils/ssl/dns_provider.go +++ b/agent/utils/ssl/dns_provider.go @@ -21,6 +21,7 @@ import ( "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/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/tencentcloud" "github.com/go-acme/lego/v4/providers/dns/vercel" @@ -35,6 +36,7 @@ const ( DnsPod DnsType = "DnsPod" AliYun DnsType = "AliYun" AliESA DnsType = "AliESA" + AWSRoute53 DnsType = "AWSRoute53" CloudFlare DnsType = "CloudFlare" CloudDns DnsType = "CloudDns" NameSilo DnsType = "NameSilo" @@ -120,6 +122,19 @@ func getDNSProviderConfig(dnsType DnsType, params string) (challenge.Provider, e config.PollingInterval = pollingInterval config.TTL = ttl 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: config := cloudflare.NewDefaultConfig() config.AuthEmail = param.Email diff --git a/frontend/src/global/mimetype.ts b/frontend/src/global/mimetype.ts index 89b1c6ae9..3f6b23fd7 100644 --- a/frontend/src/global/mimetype.ts +++ b/frontend/src/global/mimetype.ts @@ -180,6 +180,10 @@ export const DNSTypes = [ label: i18n.global.t('website.aliEsa'), value: 'AliESA', }, + { + label: i18n.global.t('website.awsRoute53'), + value: 'AWSRoute53', + }, { label: i18n.global.t('website.tencentCloud'), value: 'TencentCloud', diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index fc8d2b7a3..f23426476 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2351,6 +2351,7 @@ const message = { createDnsAccount: 'DNS account', aliyun: 'Aliyun DNS', aliEsa: 'Aliyun ESA', + awsRoute53: 'AWS Route 53', manual: 'Manual parsing', key: 'Key', check: 'View', @@ -2831,6 +2832,7 @@ const message = { pushNode: 'Sync to Other Nodes', pushNodeHelper: 'Push to selected nodes after application/renewal', fromMaster: 'Master Node Push', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: 'Create rule', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index 4315b0265..c8f6aa2e5 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -2350,6 +2350,7 @@ const message = { createDnsAccount: 'Cuenta DNS', aliyun: 'Aliyun DNS', aliEsa: 'Aliyun ESA', + awsRoute53: 'AWS Route 53', manual: 'Resolución manual', key: 'Clave', check: 'Ver', @@ -2808,6 +2809,7 @@ const message = { pushNode: 'Sincronizar con otros nodos', pushNodeHelper: 'Enviar a los nodos seleccionados después de la aplicación/renovación', fromMaster: 'Envío desde el nodo maestro', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: 'Crear regla', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 1b189d05a..08918ae55 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2271,6 +2271,7 @@ const message = { createDnsAccount: 'DNSアカウント', aliyun: 'エイリアン', aliEsa: 'エイリアン ESA', + awsRoute53: 'AWS Route 53', manual: '手動解析', key: '鍵', check: 'ビュー', @@ -2750,6 +2751,7 @@ const message = { pushNode: '他のノードに同期', pushNodeHelper: '申請/更新後に選択したノードにプッシュ', fromMaster: 'マスターノードからのプッシュ', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: 'ルールを作成します', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 2016e24f3..feb2c775e 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2231,6 +2231,7 @@ const message = { createDnsAccount: 'DNS 계정 생성', aliyun: '알리윤', aliEsa: '알리윤 ESA', + awsRoute53: 'AWS Route 53', manual: '수동 설정', key: '키', check: '보기', @@ -2701,6 +2702,7 @@ const message = { pushNode: '다른 노드에 동기화', pushNodeHelper: '신청/갱신 후 선택한 노드로 푸시', fromMaster: '마스터 노드에서 푸시', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: '규칙 만들기', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 37e7d8d54..b7249f115 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2325,6 +2325,7 @@ const message = { createDnsAccount: 'Akaun DNS', aliyun: 'Aliyun', aliEsa: 'Aliyun ESA', + awsRoute53: 'AWS Route 53', manual: 'Penyelesaian Manual', key: 'Kunci', check: 'Lihat', @@ -2810,6 +2811,7 @@ const message = { pushNode: 'Segerakan ke Nod Lain', pushNodeHelper: 'Tolak ke nod terpilih selepas permohonan/pembaharuan', fromMaster: 'Tolak dari Nod Utama', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: 'Buat peraturan', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index b374b6ecc..fb9dc200e 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2327,6 +2327,7 @@ const message = { createDnsAccount: 'Conta DNS', aliyun: 'Aliyun', aliEsa: 'Aliyun ESA', + awsRoute53: 'AWS Route 53', manual: 'Análise manual', key: 'Chave', check: 'Ver', @@ -2816,6 +2817,7 @@ const message = { pushNode: 'Sincronizar com Outros Nós', pushNodeHelper: 'Enviar para os nós selecionados após a aplicação/renovação', fromMaster: 'Envio do Nó Mestre', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: 'Criar regra', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 38d9b124d..5e906b33a 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2322,6 +2322,7 @@ const message = { createDnsAccount: 'DNS аккаунт', aliyun: 'Aliyun', aliEsa: 'Aliyun ESA', + awsRoute53: 'AWS Route 53', manual: 'Ручная настройка', key: 'Ключ', check: 'Просмотр', @@ -2810,6 +2811,7 @@ const message = { pushNode: 'Синхронизация с другими узлами', pushNodeHelper: 'Отправить на выбранные узлы после заявки/продления', fromMaster: 'Отправка с главного узла', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: 'Создать правило', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index 3a9a22e8d..ea2d29333 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -2382,6 +2382,7 @@ const message = { createDnsAccount: 'DNS hesabı', aliyun: 'Aliyun DNS', aliEsa: 'Aliyun ESA', + awsRoute53: 'AWS Route 53', manual: 'Manuel çözümleme', key: 'Anahtar', check: 'Görüntüle', @@ -2869,6 +2870,7 @@ const message = { pushNode: 'Diğer Düğümlere Senkronize Et', pushNodeHelper: 'Başvuru/yenilemeden sonra seçilen düğümlere gönder', fromMaster: 'Ana Düğümden Gönder', + hostedZoneID: 'Hosted Zone ID', }, firewall: { create: 'Kural oluştur', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 0db11da68..55c51835c 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2184,6 +2184,7 @@ const message = { createDnsAccount: 'DNS 帳戶', aliyun: '阿里雲 DNS', aliEsa: '阿里雲 ESA', + awsRoute53: 'AWS Route 53(亞馬遜)', manual: '手動解析', key: '金鑰', check: '查看', @@ -2632,6 +2633,7 @@ const message = { pushNode: '同步到其他節點', pushNodeHelper: '申請/續期之後推送到選擇的節點', fromMaster: '主節點推送', + hostedZoneID: '託管區域 ID', }, firewall: { create: '建立規則', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index abfd72647..853e9d61a 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2180,6 +2180,7 @@ const message = { createDnsAccount: 'DNS 账户', aliyun: '阿里云', aliEsa: '阿里云 ESA', + awsRoute53: 'AWS Route 53(亚马逊)', manual: '手动解析', key: '密钥', check: '查看', @@ -2628,6 +2629,7 @@ const message = { pushNode: '同步到其他节点', pushNodeHelper: '申请/续期之后推送到选择的节点', fromMaster: '主节点推送', + hostedZoneID: '托管区域 ID', }, firewall: { create: '创建规则', diff --git a/frontend/src/views/website/ssl/dns-account/create/index.vue b/frontend/src/views/website/ssl/dns-account/create/index.vue index a5bf40faa..b6407a316 100644 --- a/frontend/src/views/website/ssl/dns-account/create/index.vue +++ b/frontend/src/views/website/ssl/dns-account/create/index.vue @@ -24,7 +24,8 @@ account.type === 'AliYun' || account.type === 'AliESA' || account.type === 'HuaweiCloud' || - account.type === 'BaiduCloud' + account.type === 'BaiduCloud' || + account.type === 'AWSRoute53' " > @@ -159,6 +160,21 @@ +
+ + + + + + +