# 前言

如果你的业务场景有多个 AWS 账号,那么私有域共享就是一个绕不开的话题。

aws 中的 route53 私有域配置跨账号共享有两种方案,一种是直接跨账号关联 VPC,一种是通过配置文件共享的形式实现。本文采用第一种方案,只需要两条命令即可完成此需求。

# 操作

比如要将 A 账号的 test.com 共享给 B 账号的 VPC 使用:

  1. 首先在 A账号 发起关联 B账号 VPC 的请求。注意此命令要在添加了 A账号 秘钥的 aws 命令行上执行。

    aws route53 create-vpc-association-authorization --hosted-zone-id Z02343401TXXXXX --vpc VPCRegion=ap-southeast-1,VPCId=vpc-xxxxxxxxxxxx --region ap-southeast-1
    

    1

    • --hosted-zone-id:指定私有域的 ID。文末会提供批量查询私有域 ID 的方法。
    • region:指定区域。
    • VPCId:指定 B 账号的 VPCID。
  2. 然后在 B账号 接受刚刚的请求。注意此命令要在添加了 B账号 秘钥的 aws 命令行上执行。

    $ aws route53 associate-vpc-with-hosted-zone --hosted-zone-id Z02343401TXXXXX --vpc VPCRegion=ap-southeast-1,VPCId=vpc-xxxxxxxxxxxx --region ap-southeast-1
    
    # 可能会有如下输出:
    
    {
        "ChangeInfo": {
            "Id": "/change/C083xxxxxxxxxx",
            "Status": "PENDING",
            "SubmittedAt": "2024-10-16T11:21:39.232000+00:00",
            "Comment": ""
        }
    }
    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    执行完毕之后,需要等待一会儿,然后再去到 A账号 查看私有域 test.com 所关联的 VPC列表,已经可以看到关联到了 B账号VPCId

    大约要再等一会儿,就可以在 B 账号 VPC 内的主机上进行验证了。如果不生效,请多等一会儿。

如上两步均通过 aws cli 命令行完成,控制台没有操作的入口,注意先配置好两个账号的秘钥认证工作。

申明

原创文章eryajf,未经授权,严禁转载,侵权必究!此乃文中随机水印,敬请读者谅解。

# 其他辅助命令

查看账号下所有私有域列表

有了如上两条命令之后,你可能会需要批量处理粗需求,那么可以先通过命令拿到私有域列表。然后遍历 ID 进行批量处理。

#!/bin/bash

# 获取所有托管区域信息
hosted_zones=$(aws route53 list-hosted-zones --query "HostedZones[?Config.PrivateZone==\`true\`]" --output json)

# 打印表头
printf "| %-20s | %-30s | %-10s | %-15s |\n" "ID" "Name" "备注" "解析记录数"
printf "|----------------------|--------------------------------|------------|-----------------|\n"

# 遍历每个托管区域并打印信息
echo "$hosted_zones" | jq -c '.[]' | while read -r zone; do
    id=$(echo "$zone" | jq -r '.Id' | sed 's/\/hostedzone\///')
    name=$(echo "$zone" | jq -r '.Name')
    comment=$(echo "$zone" | jq -r '.Config.Comment // "无"')
    record_count=$(echo "$zone" | jq -r '.ResourceRecordSetCount')

    printf "| %-20s | %-30s | %-10s | %-15s |\n" "$id" "$name" "$comment" "$record_count"
done

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

查看指定私有域关联的 VPC 列表

aws route53 get-hosted-zone --id Z02343401TXXXXX --query 'VPCs[*].[VPCId, VPCRegion]' --output table

1