AWS Route53 跨账号迁移域

429次阅读
没有评论

共计 3537 个字符,预计需要花费 9 分钟才能阅读完成。

背景

Route53 旧域托管在一个单独的账号A下,不便于维护。账号B是主要维护的账号,计划将域切换至B。

迁移方式调研

直接转移(不推荐)

此方式依赖条件过多,需要在域名注册商进行大量配置才可以实现。

而且也未知最终效果是否理想。如果出问题影响面积巨大,不便于回滚。

​​AWS Route53 跨账号迁移域​​

参考链接:https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/domain-transfer-to-route-53.html

使用区域文件导入导出 (不能满足需求)

AWS支持使用bind格式,将域名解析全量导入至域中。导入验证完毕后,需在dns托管商进行域ns变更指向。

参考链接:https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/domain-transfer-to-route-53.html

获取bind格式域名记录

AWS没有客户API可用于导出区域文件,咨询AWS售后,反馈是需要提case让后台导出。

但bind记录仅有 域名​、ttl​ 、解析类型​ 、解析值​ 四个字段,不能满足 geo 或者 alias 此类更为复杂的路由类型的导入和导出。(geo、alias 有更多的字段需求)

AWS Route53 跨账号迁移域

参考链接:

https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html?icmpid=docs_console_unmapped

https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/hosted-zones-migrating.html#hosted-zones-migrating-create-file

使用第三方套件导入和导出解析(推荐)

github 上有开源第三方套件用于精细化操作route53,可借此执行对解析的导入和导出。

参考链接:GitHub – barnybug/cli53:Amazon Route 53 的命令行工具

创建域

在账号B下创建需迁移的域托管区

AWS Route53 跨账号迁移域​​

​​AWS Route53 跨账号迁移域​​

创建完毕后,域下会自动生成新的ns记录:

AWS Route53 跨账号迁移域​​

配置第三方程序

首先下载最新版本的包,配置环境

参考链接:github.com/barnybug/cli5…

$ wget https://github.com/barnybug/cli53/releases/download/0.8.18/cli53-linux-amd64
$ chmod +x cli53-linux-amd64
$ mkdir files
$ mkdir tmp
编写导出脚本

在账号A 创建IAM用户,并分配 aksk,需要授权 route53 读取权限。

然后编写导出脚本 export.sh​,用于在账号A 导出域名解析记录。

# 配置脚本
$ vim export.sh 
#指定账号,domain,ak,sk
account=accountA
domain='***.com'
export AWS_ACCESS_KEY_ID='***'
export AWS_SECRET_ACCESS_KEY='***'

./cli53-linux-amd64 export $domain |grep -wvE "SOA|NS" |tee ./files/$account-$domain-resolve_list.txt

# 执行脚本观察效果
$ bash export.sh 
$ORIGIN ***.com.
_dnsauth    300    IN    TXT    "202203020000000r0f01xt7sxi75t6s5lg5jy5usgaqqyjshdsxfxqxk708tu6e0"
_dnsauth.eu    300    IN    TXT    "202009240000004z65fr8nfcw7n2jobsrv8d8sds3mjdwlx3bwg892560dvy9n7o"
_dnsauth.in    300    IN    TXT    "202009240000003s0hvumqah6ixj1pvh9y07symc15w4motwwvhbrfm9l5vxpppj"
eu    300    IN    CNAME    forbidden.***.com. ; AWS routing="GEOLOCATION" countryCode="CN" identifier="中国"
eu    300    IN    CNAME    s-euc.***.com. ; AWS routing="GEOLOCATION" countryCode="*" identifier="欧洲"
......

可以看到解析已经被打印在终端,并且存储在文件中。

导出后人工核验解析记录是否与控制台一致,避免错漏。

编写导入脚本

在账号A 创建IAM用户,并分配 aksk,需要授权 route53 读取和写入权限。

然后编写导出脚本 import.sh​,用于在账号B 导入域名解析记录。

# 配置脚本
$ vim import.sh
account=accountB
domain='***.com'
export AWS_ACCESS_KEY_ID='***'
export AWS_SECRET_ACCESS_KEY='***'

./cli53-linux-amd64 import --file ./files/$account-$domain-resolve_list.txt --upsert $domain

编写检验脚本

检验脚本用于在账号B 导入解析后,再将其导出。

对比和之前从账号A 导出的解析是否有差异。

$ vim check.sh
src_account=accountA
src_ak='***'
src_sk='***'

dest_account=accountB
dest_ak='***'
dest_sk='***'

domain='***.com'

# 导出源账号下解析,剔除soa和ns,排序后输出到文件
export AWS_ACCESS_KEY_ID=$src_ak
export AWS_SECRET_ACCESS_KEY=$src_sk

echo "导出源账号解析..."
./cli53-linux-amd64 export $domain |grep -wvE "SOA|NS" > ./tmp/$src_account-$domain-resolve_list.txt

# 导出目标账号下解析,剔除soa和ns,排序后输出到文件
export AWS_ACCESS_KEY_ID=$dest_ak
export AWS_SECRET_ACCESS_KEY=$dest_sk

echo "导出目标账号解析..."
./cli53-linux-amd64 export $domain |grep -wvE "SOA|NS" > ./tmp/$dest_account-$domain-resolve_list.txt

# 判断文件内容差异,一致的话表示成功
# "执行验证..."
diff ./tmp/$src_account-$domain-resolve_list.txt ./tmp/$dest_account-$domain-resolve_list.txt
if [ $? -eq 0 ];then
  echo "源账号和目标账号下 $domain 解析完全一致"
else
  echo "异常"
fi

参考链接:

GitHub – barnybug/cli53:Amazon Route 53 的命令行工具

执行迁移

步骤如下:

  1. 运维侧通知业务方:停止对迁移域的任何解析变更操作、约定变更时间、评估影响面。
  2. 将域名解析从账号A导出:执行导出脚本
  3. 将域名解析导入至账号B:执行导入脚本
  4. 检验 A 、B 账号解析是否一致:执行检验脚本 & 控制台核对
  5. 检验 B账号下域解析是否正常:指定 B账号中 创建域后分配的ns,执行 dig 测试部分域名解析
    dig ***.com @ns-887.awsdns-46.net.
    
  6. 上述检验无问题后,在域名注册商切换ns指向为 B账号域分配的ns。
  7. 运维 & QA 执行解析测试,核心业务测试。
  8. 放开对域的解析变更,同时需持续两周观察状态,账号B ns生效需要很长时间。可以在账号A 查询该域名的解析次数。
  9. 确认账号B 新ns全面生效,且账号A 的解析次数下降到忽略不计额地步时,可删除A 下的域。

故障回滚

若发生故障,在域名注册商回滚ns指向,指向值为 账号A 域分配的ns。

同时需注意,在账号B ns生效时期内,若对域名有变更。回滚解析时需要将变更同步到A账号。

总结

在生产环境操作完毕后,并未发生故障。

此类重大变更,一定要遵循以下原则:

  • 测试环境验证方案可靠性
  • 确认影响面
  • 全面通知相关业务方
  • 完备的测试流程
  • 回滚方案

引用链接

正文完
 
pengyinwei
版权声明:本站原创文章,由 pengyinwei 2023-10-24发表,共计3537字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.opshub.cn
评论(没有评论)