https://dev.classmethod.jp/articles/set-route-53-private-zone-across-accounts/
https://dev.classmethod.jp/articles/vpc-peering-different-awsaccount/
前提:
アカウント: A
VPC: 10.0.0.0/16
サブネット: 10.0.0.0/24
プライベートホストゾーン名: zone20220919.local
アカウント: B
VPC: 10.1.0.0/16
サブネット: 10.1.0.0/24
プライベートホストゾーン名: zone20220919.local
-- 1. 事前準備
-- 1.1 aws cli version 2 インストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
-- 1.2 jqインストール
sudo yum -y install jq
-- 2. VPC、サブネット作成[アカウントA]
-- 2.1 VPC(10.0.0.0/16)を作成する
aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--instance-tenancy default \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=vpc01}]'
aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'
-- 2.2 サブネット(10.0.0.0/24)を作成する
aws ec2 create-subnet \
--availability-zone ap-northeast-1a \
--cidr-block 10.0.0.0/24 \
--vpc-id vpc-11111111111111111 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=subnet01}]'
aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'
-- 2.3 インターネットゲートウェイを作成する
aws ec2 create-internet-gateway \
--tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=igw01}]'
aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'
-- 2.4 インターネットゲートウェイをVPCにアタッチする
aws ec2 attach-internet-gateway \
--internet-gateway-id igw-22222222222222222 \
--vpc-id vpc-11111111111111111
-- 2.5 ルートテーブルのデフォルトゲートウェイとしてインターネットゲートウエイを指定する
aws ec2 describe-route-tables
aws ec2 describe-route-tables | jq -r '.RouteTables.RouteTableId'
aws ec2 create-route \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-22222222222222222 \
--route-table-id rtb-33333333333333333
-- 2.6 インスタンス作成(FW設定含む)
aws ec2 run-instances \
--image-id ami-0404778e217f54308 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance01}]' \
--subnet-id subnet-44444444444444444 \
--associate-public-ip-address
0.0.0.0/0からのSSH許可追加
aws ec2 authorize-security-group-ingress \
--group-id sg-55555555555555555 \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw01}]'
10.1.0.0/24からのアクセス許可
aws ec2 authorize-security-group-ingress \
--group-id sg-55555555555555555 \
--protocol all \
--port all \
--cidr 10.1.0.0/24 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw02}]'
-- 2.7 enableDnsHostnames および enableDnsSupport を true に設定
aws ec2 describe-vpc-attribute \
--attribute enableDnsSupport \
--vpc-id vpc-11111111111111111
aws ec2 describe-vpc-attribute \
--attribute enableDnsHostnames \
--vpc-id vpc-11111111111111111
aws ec2 modify-vpc-attribute \
--enable-dns-hostnames \
--vpc-id vpc-11111111111111111
aws ec2 modify-vpc-attribute \
--enable-dns-support \
--vpc-id vpc-11111111111111111
-- 2.8 プライベートホストゾーンの作成
aws route53 create-hosted-zone \
--name zone20220919.local \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-11111111111111111 \
--caller-reference 2022-09-16-23:09
aws route53 list-hosted-zones
-- 2.9 EC2インスタンスのプライベートIPアドレスをAレコードで登録する
{
"Comment": "CREATE/DELETE/UPSERT a record ",
"Changes": [
{ "Action": "UPSERT",
"ResourceRecordSet": { "Name": "instance01.zone20220919.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{ "Value": "10.0.0.85" }
]
}
}
]
}
aws route53 change-resource-record-sets \
--hosted-zone-id 666666666666666666666 \
--change-batch file://a.json
aws route53 list-resource-record-sets \
--hosted-zone-id 666666666666666666666
-- 3. VPC、サブネット作成[アカウントB]
-- 3.1 VPC(10.1.0.0/16)を作成する
aws ec2 create-vpc \
--cidr-block 10.1.0.0/16 \
--instance-tenancy default \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=vpc11}]'
aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'
-- 3.2 サブネット(10.1.0.0/24)を作成する
aws ec2 create-subnet \
--availability-zone ap-northeast-1a \
--cidr-block 10.1.0.0/24 \
--vpc-id vpc-77777777777777777 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=subnet11}]'
aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'
-- 3.3 インターネットゲートウェイを作成する
aws ec2 create-internet-gateway \
--tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=igw11}]'
aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'
-- 3.4 インターネットゲートウェイをVPCにアタッチする
aws ec2 attach-internet-gateway \
--internet-gateway-id igw-88888888888888888 \
--vpc-id vpc-77777777777777777
-- 3.5 ルートテーブルのデフォルトゲートウェイとしてインターネットゲートウエイを指定する
aws ec2 describe-route-tables
aws ec2 describe-route-tables | jq -r '.RouteTables.RouteTableId'
aws ec2 create-route \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-88888888888888888 \
--route-table-id rtb-99999999999999999
-- 3.6 インスタンス作成(FW設定含む)
aws ec2 run-instances \
--image-id ami-0404778e217f54308 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance11}]' \
--subnet-id subnet-00000000000000000 \
--associate-public-ip-address
0.0.0.0/0からのSSH許可追加
aws ec2 authorize-security-group-ingress \
--group-id sg-aaaaaaaaaaaaaaaaa \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw11}]'
10.0.0.0/24からのアクセス許可
aws ec2 authorize-security-group-ingress \
--group-id sg-aaaaaaaaaaaaaaaaa \
--protocol all \
--port all \
--cidr 10.0.0.0/24 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw12}]'
-- 3.7 enableDnsHostnames および enableDnsSupport を true に設定
aws ec2 describe-vpc-attribute \
--attribute enableDnsSupport \
--vpc-id vpc-77777777777777777
aws ec2 describe-vpc-attribute \
--attribute enableDnsHostnames \
--vpc-id vpc-77777777777777777
aws ec2 modify-vpc-attribute \
--enable-dns-hostnames \
--vpc-id vpc-77777777777777777
aws ec2 modify-vpc-attribute \
--enable-dns-support \
--vpc-id vpc-77777777777777777
-- 4. VPCピアリング作成
-- 4.1 作成[アカウントA]
aws ec2 create-vpc-peering-connection \
--peer-owner-id bbbbbbbbbbbb \
--peer-vpc-id vpc-77777777777777777 \
--vpc-id vpc-11111111111111111 \
--tag-specifications 'ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=pcx01}]'
aws ec2 describe-vpc-peering-connections
-- 4.2 承諾[アカウントB]
aws ec2 accept-vpc-peering-connection \
--vpc-peering-connection-id pcx-ccccccccccccccccc
-- 5. VPCピアリング間のルート追加
-- 5.1 ルート追加[アカウントA]
aws ec2 create-route \
--destination-cidr-block 10.1.0.0/16 \
--gateway-id pcx-ccccccccccccccccc \
--route-table-id rtb-33333333333333333
-- 5.2 ルート追加[アカウントB]
aws ec2 create-route \
--destination-cidr-block 10.0.0.0/16 \
--gateway-id pcx-ccccccccccccccccc \
--route-table-id rtb-99999999999999999
-- 6. pingで疎通確認
ping 10.1.0.170
ping 10.0.0.85
-- 7. プライベートホストゾーンのピアリング先アカウントへの紐づけ
-- 7.1 紐づけ許可[アカウントA]
aws route53 create-vpc-association-authorization \
--hosted-zone-id 666666666666666666666 \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-77777777777777777
aws route53 list-hosted-zones
aws route53 list-vpc-association-authorizations \
--hosted-zone-id 666666666666666666666
aws route53 get-hosted-zone \
--id 666666666666666666666
-- 7.2 紐づけ実施[アカウントB]
aws route53 associate-vpc-with-hosted-zone \
--hosted-zone-id 666666666666666666666 \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-77777777777777777
-- 7.3 EC2インスタンスのプライベートIPアドレスをAレコードで登録する[アカウントA]
※紐づけ実施後もアカウントBからはホストゾーンを参照できない
{
"Comment": "CREATE/DELETE/UPSERT a record ",
"Changes": [
{ "Action": "UPSERT",
"ResourceRecordSet": { "Name": "instance11.zone20220919.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{ "Value": "10.1.0.170" }
]
}
}
]
}
aws route53 change-resource-record-sets \
--hosted-zone-id 666666666666666666666 \
--change-batch file://a.json
aws route53 list-resource-record-sets \
--hosted-zone-id 666666666666666666666
-- 8. 名前解決確認
各アカウントで下記コマンドを実行し、名前解決できることを確認
nslookup instance01.zone20220919.local
nslookup instance11.zone20220919.local
-- 9. VPCピアリング削除[アカウントA]
aws ec2 delete-vpc-peering-connection \
--vpc-peering-connection-id pcx-ccccccccccccccccc
aws ec2 describe-vpc-peering-connections
-- 10. クリーンアップ[アカウントB]
-- インスタンス削除
aws ec2 describe-instances
aws ec2 terminate-instances \
--instance-ids i-ddddddddddddddddd
-- インターネットゲートウェイ削除(VPCからデタッチしてから)
aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'
aws ec2 detach-internet-gateway \
--internet-gateway-id igw-88888888888888888 \
--vpc-id vpc-77777777777777777
aws ec2 delete-internet-gateway \
--internet-gateway-id igw-88888888888888888
-- サブネット削除
aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'
aws ec2 delete-subnet \
--subnet-id subnet-00000000000000000
-- VPC削除
aws ec2 delete-vpc \
--vpc-id vpc-77777777777777777
aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'
-- 11. クリーンアップ[アカウントA]
-- Aレコードの削除
{
"Comment": "CREATE/DELETE/UPSERT a record ",
"Changes": [
{ "Action": "DELETE",
"ResourceRecordSet": { "Name": "instance01.zone20220919.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{ "Value": "10.0.0.85" }
]
}
},
{ "Action": "DELETE",
"ResourceRecordSet": { "Name": "instance11.zone20220919.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{ "Value": "10.1.0.170" }
]
}
}
]
}
aws route53 change-resource-record-sets \
--hosted-zone-id 666666666666666666666 \
--change-batch file://a.json
aws route53 list-resource-record-sets \
--hosted-zone-id 666666666666666666666
-- プライベートホストゾーンの削除
aws route53 list-hosted-zones
aws route53 delete-hosted-zone \
--id 666666666666666666666
-- インスタンス削除
aws ec2 describe-instances
aws ec2 terminate-instances \
--instance-ids i-eeeeeeeeeeeeeeeee
-- インターネットゲートウェイ削除(VPCからデタッチしてから)
aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'
aws ec2 detach-internet-gateway \
--internet-gateway-id igw-22222222222222222 \
--vpc-id vpc-11111111111111111
aws ec2 delete-internet-gateway \
--internet-gateway-id igw-22222222222222222
-- サブネット削除
aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'
aws ec2 delete-subnet \
--subnet-id subnet-44444444444444444
-- VPC削除
aws ec2 delete-vpc \
--vpc-id vpc-11111111111111111
aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'