こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY4になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
https://qiita.com/satosato_kozakana/items/446971c2deca7e27d0aa
VPCの外から名前解決をしてみよう!!
📝 概要
| 項目 | 内容 |
|---|---|
| 所要時間 | 約2時間 |
| メインサービス | Route 53, Transit Gateway, VPCエンドポイント |
| 学べること | VPC外からの名前解決、VPC間の接続、エンドポイント経由の接続 |
| 想定費用 | 約1500円(※かかった時間により変動します) |
⚠️ 注意:今回リソースの削除まで行うため、ハンズオンを最後まで実施すればリソースの課金は継続しません。しかし、途中で離脱する等で、以下のリソースを削除し忘れると課金が継続します。
🎯 課題内容
本課題ではVPC間の接続を行います。
これまで作成したVPCを複製し、両VPCのEC2間で疎通を行えるようにしてください。
また、Route 53を使用してVPC内外からEC2の名前解決を行います。※ただし、今回はオンプレ環境からのアクセスも考慮してPrivate Hosted Zoneの共有は禁止です。
最後に、VPC内からS3へアクセスできるよう設定していきます。
📊 アーキテクチャ図
🔧 実装機能
- 2つのVPCをTGWで接続し、EC2同士で疎通可能な状態を作成
- 名前解決を行えるようRoute 53のPrivate Hosted Zoneを設定
- オンプレ環境に見立てたVPCから異なるVPCの名前解決を行えるようフォワードルールを設定し、エンドポイントを作成
- VPCからS3にアクセスできるようにゲートウェイ型のVPCエンドポイントを作成
💡 実装のヒント
TGWを用いた通信
TGWを用いて通信を行う場合は、各VPCのルートテーブルでTGWを宛先としたルートを追加する必要があります。
Route 53を用いた名前解決
自分で作成したドメインを用いて名前解決を行う場合、Route 53のPrivate Hosted Zoneを使用する必要があります。
オンプレ環境(または他のVPC)からAWS内の名前解決を行うためにはVPC内にインバウンドエンドポイントを作成します。
AWS内からオンプレ環境(または他のVPC)の名前解決を行うためには、VPC内にアウトバウンドエンドポイントを作成します。
また、VPC外のDNSを用いて名前解決を行う場合は、Route 53 Resolverにて転送ルールを設定する必要があります。
S3へのアクセス
VPC内からS3へプライベートにアクセスしたい場合は、VPCエンドポイントを作成します。
VPCエンドポイントにはインターフェース型とゲートウェイ型があり、状況による使い分けが必要です。
✅ 完成後のチェックポイント
- VPCを跨いだEC2間で問題なく疎通確認を行えている
- Route 53 Resolverで正しく転送ルールが設定できている
- オンプレ想定のVPCにアウトバウンドエンドポイント、AWSのVPCにインバウンドエンドポイントを正しく設定できている
- オンプレ想定のEC2からAWSのEC2へ名前解決が行えている
- EC2からS3へエンドポイントを用いて正しくアクセスできる
🧰 使用資材
なし
🔗 リファレンスリンク
🛠️ 解答・構築手順(クリックで開く)
解答と構築手順を見る
✅ ステップ1:VPCの準備
1.前章(Amazon VPCでネットワーク空間を構築してみよう)を参考に、VPCを2つ、Subnetを2つずつ、Route Table、IAMロール、EC2、エンドポイントを構築する
※S3へアクセスすることも考慮し、IAMロールにはAmazonS3FullAccessポリシーも付与
・app-vpc:10.0.0.0/16
・app-subnet-a:10.0.1.0/24
・app-subnet-b:10.0.2.0/24(EC2用)
・onprem-vpc:10.10.0.0/16
・onprem-subnet-a:10.10.1.0/24
・onprem-subnet-b:10.10.2.0/24(EC2用)
2.セキュリティグループを4つ(それぞれのVPCにEC2用SGとエンドポイント用SGを1つずつ)を作成する
EC2用
・インバウンドルール
| タイプ | プロトコル | ポート | 送信元 |
|---|---|---|---|
| カスタムICMP-IPv4 | すべて | すべて | 10.10.0.0/16(onprem-vpcでは10.0.0.0/16) |
・アウトバウンドルール
| タイプ | プロトコル | ポート | 送信元 |
|---|---|---|---|
| カスタムICMP-IPv4 | すべて | すべて | 10.10.0.0/16(onprem-vpcでは10.0.0.0/16) |
| HTTPS | TCP | 443 | エンドポイント用SG |
エンドポイント用
・インバウンドルール
| タイプ | プロトコル | ポート | 送信元 |
|---|---|---|---|
| HTTPS | TCP | 443 | EC2用SG |
3.セキュリティーグループ(インバウンドエンドポイントとアウトバウンドエンドポイント兼用)を新たに作成する
・インバウンドルール
| タイプ | プロトコル | ポート | 送信元 |
|---|---|---|---|
| RDP(TCP) | TCP | 53 | 10.10.0.0/16(onprem-vpcでは10.10.0.0/16) |
| RDP(UDP) | UDP | 53 | 10.10.0.0/16(onprem-vpcでは10.10.0.0/16) |
・アウトバウンドルール
| タイプ | プロトコル | ポート | 送信先 |
|---|---|---|---|
| RDP(TCP) | TCP | 53 | 10.0.0.0/16(onprem-vpcでは10.0.0.0/16) |
| RDP(UDP) | UDP | 53 | 10.0.0.0/16(onprem-vpcでは10.0.0.0/16) |
✅ ステップ2:Transit Gatewayの作成
app-vpcとonprem-vpcを接続するTransit Gatewayを作成します
1.「VPC」 → 「Transit Gateway」 →「Transit Gatewayを作成」
以下項目を入力してTransit Gatewayを作成
| 設定項目 | 値 |
|---|---|
| ASN | 64512 |
| DNSサポート | 有効 |
| セキュリティグループ参照サポート | 無効 |
| VPN ECMPサポート | 無効 |
| デフォルトルートテーブルの関連付け | 無効 |
| デフォルトルートテーブル伝播 | 無効 |
| マルチキャストサポート | 無効 |
| クロスアカウント共有オプションの設定 | 無効 |
| CIDRブロック | 10.20.0.0/24 |
2.「VPC」 → 「Transit Gateway アタッチメント」 → 「Transit Gatewayアタッチメントを作成」
以下項目を入力してTransit Gatewayアタッチメントを各VPCに作成
| 設定項目 | 値 |
|---|---|
| Transit Gateway ID | 2で作成したTGWのID |
| アタッチメントタイプ | VPC |
| DNSサポート | 有効 |
| セキュリティグループ参照サポート | 無効 |
| IPv6 サポート | 無効 |
| アプライアンスモードサポート | 無効 |
| VPC ID | app-vpc(onprem-vpc) |
| サブネット ID | app-subnet-a(onprem-subnet-a) |
3.EC2用のルートテーブル、エンドポイント用のルートテーブルにそれぞれ以下を追加する
| 送信先 | ターゲット |
|---|---|
| 10.10.0.0/16(onprem-vpcの場合は10.0.0.0/16) | Transit Gateway/2で作成したTGWのID |
4.「VPC」 → 「Transit Gatewayルートテーブル」 → 「Transit Gatewayルートテーブルを作成」
以下項目を入力してTransit Gatewayルートテーブルを作成
| 設定項目 | 値 |
|---|---|
| Transit Gateway ID | 2で作成したTGWのID |
5.「VPC」 → 「Transit Gatewayルートテーブル」 → 「Transit GatewayルートテーブルID」 → 「関連付けを作成」
以下項目を入力してTransit Gatewayアタッチメントと関連付け
| 設定項目 | 値 |
|---|---|
| 関連付けるアタッチメントを選択 | 4で作成したTGWアタッチメントのID |
| ※1度に複数個関連付けられないため、1つずつ同じルートテーブルに関連付ける |
6.「VPC」 → 「Transit Gatewayルートテーブル」 → 「Transit GatewayルートテーブルID」 → 「伝播を作成」
以下項目を入力してTransit Gatewayアタッチメントと伝播を作成する
| 設定項目 | 値 |
|---|---|
| 伝播するアタッチメントを選択 | 4で作成したTGWアタッチメントのID |
※1度に複数個伝播できないため、1つずつ同じルートテーブルに伝播する
✅ ステップ3:EC2間で疎通試験
-
EC2にSystems Managerを用いて接続
-
app-vpcのEC2からonprem-vpcのEC2へping
ping 10.10.2.xx(onprem-vpc内のEC2のPrivate IP) -
onprem-vpcのEC2からapp-vpcのEC2へping
ping 10.0.2.xx(app-vpc内のEC2のPrivate IP)
✅ ステップ4:Route 53 Hosted Zone作成
1.「Route 53」 → 「ホストゾーン」 →「ホストゾーンの作成」
以下項目を入力してapp-vpcにプライベートホストゾーンを作成
| 設定項目 | 値 |
|---|---|
| ドメイン名 | aws.local |
| ホストゾーンに関連付けるVPC | app-vpc |
※onprem-vpcは関連付けしない
2.「Route 53」 → 「ホストゾーン」 →「aws.local」 → 「レコードを作成」
以下項目を入力してaws.localにレコードを作成
| 設定項目 | 値 |
|---|---|
| レコード名 | app.aws.local |
| レコードタイプ | A |
| 値 | 10.0.2.xx(app-vpc内のEC2のPrivate IP) |
| TTL | 60 |
| ルーティングポリシー | シンプルルーティング |
※onprem-vpcは関連付けしない
✅ ステップ5:インバウンドエンドポイントとアウトバウンドエンドポイントの作成
app-vpcにインバウンドエンドポイント、onprem-vpcにアウトバウンドエンドポイントを作成します
1.「Route 53」 → 「インバウンドエンドポイント」 → 「インバウンドエンドポイントの作成」
以下項目を入力してインバウンドエンドポイントを作成
| 設定項目 | 値 |
|---|---|
| エンドポイント名 | inbound-ep |
| Endpoint Category | Default |
| VPC | app-vpc |
| セキュリティグループ | インバウンドエンドポイント用SG |
| エンドポイントのタイプ | IPv4 |
| プロトコル | Do53 |
| サブネット | app-subnet-a |
| IPv4アドレス | 自動的に選択されたIPv4アドレスを使用します |
2.「Route 53」 → 「アウトバウンドエンドポイント」 → 「アウトバウンドエンドポイントの作成」
以下項目を入力してアウトバウンドエンドポイントを作成
| 設定項目 | 値 |
|---|---|
| エンドポイント名 | outbound-ep |
| Endpoint Category | Default |
| VPC | app-vpc |
| セキュリティグループ | アウトバウンドエンドポイント用SG |
| エンドポイントのタイプ | IPv4 |
| プロトコル | Do53 |
| サブネット | onprem-subnet-a |
| IPv4アドレス | 自動的に選択されたIPv4アドレスを使用します |
✅ ステップ6:Route 53 Resolcerルールの作成
1.「Route 53」 → 「リゾルバ―」 → 「ルール」 → 「ルールの作成」
以下項目を入力してRoute 53 Resolverルールを作成
| 設定項目 | 値 |
|---|---|
| ルール名 | aws-local-forward-rule |
| ルールタイプ | 転送 |
| ドメイン名 | aws.local |
| ターゲットIPアドレス | app-vpcのインバウンドエンドポイントのIP(2つ) |
| ポート | 53 |
| 伝送プロトコル | Do53 |
✅ ステップ7:EC2間の名前解決試験
-
onprem-vpcのEC2にSystems Managerを用いて接続 -
onprem-vpcのEC2からapp-vpcの名前解決を行います
dig app.aws.local
app.aws.local 10.0.2.xx(app-vpcのEC2のPrivate IP)が返ってきたら成功です
✅ ステップ8:S3の作成
- 「S3」 → 「バケット」 → 「バケットを作成」
以下項目を入力してS3を作成
| 設定項目 | 値 |
|---|---|
| バケットタイプ | 汎用 |
| バケット名 | handson-s3 |
| オブジェクト所有者 | ACL 無効 |
| パブリックアクセスブロック | すべてON |
| バケットのバージョニング | 無効 |
| 暗号化タイプ | Amazon S3 マネージドキーを使用したサーバ側の暗号化(SSE-S3) |
| バケットキー | 無効 |
✅ ステップ9:S3 Gateway エンドポイントの作成
VPC内からインターネットを介さずにS3へ安全かつ無料でアクセスする場合は、ゲートウェイ型のVPCエンドポイントを利用します。
ゲートウェイ型のエンドポイントはS3およびDynamoDB専用の仕組みであり、ルートテーブル経由でプライベートな通信経路を確立します。
※インターフェース型エンドポイント(PrivateLink)は、ENI経由の通信となり従量課金が発生します。
1.「VPC」 → 「エンドポイント」 → 「エンドポイントを作成」
以下項目を入力してエンドポイントを作成
| 設定項目 | 値 |
|---|---|
| サービスカテゴリ | AWSサービス |
| サービス名 | com.amazonaws.ap-northeast-1.s3 |
| タイプ | Gateway |
| VPC | app-vpc |
| ルートテーブル | app-subnet-aとapp-subnet-bに関連付けしたもの |
| ポリシー | フルアクセス |
2.app-vpcのEC2用セキュリティグループを修正し、S3向け通信を許可します
・アウトバウンドルール
| タイプ | プロトコル | ポート | 送信先 |
|---|---|---|---|
| HTTPS | TCP | 443 | S3のプレフィックスリスト |
✅ ステップ10:S3への接続確認
-
app-vpcのEC2にSystems Managerを用いて接続 -
app-vpcのEC2からS3への接続確認を行います
aws s3 ls
自分のD3バケットが一覧表示されれば成功
🧹 片付け(リソース削除)
依存関係があるため、削除する際の順番に注意してください。
□ S3
□ VPCエンドポイント(SSM用、S3用)
□ Route 53(Resolverルール、インバウンドエンドポイント、アウトバウンドエンドポイント、レコード、ホストゾーン)
□ Transit Gateway(ルートテーブル、アタッチメント、Transit Gateway)
□ EC2(2つ)
□ Security Group(EC2用2つ、エンドポイント用2つ、Route 53エンドポイント用)
□ ルートテーブル
□ Subnet(4つ)
□ VPC(2つ)
□ IAMロール
🏁 おつかれさまでした!
この課題では VPCの複数機能を組み合わせて、VPC間の接続や名前解決、S3の接続を行いました。
構成が増えていくにつれてルートテーブルやセキュリティグループ、IAMロールやポリシーなど細かい制御が増えてきて設定が大変になってきますね。
次回は応用編としてAPI Gatewayとの連携に挑戦してみましょう!
