目指すはコレ!
同一リージョン内の異なる2つのAmazon VPC間で、プライベートなネットワーク接続を確立すること。インターネットを介さずにVPC-AのEC2インスタンスからVPC-BのEC2インスタンスへセキュアに通信できる環境を構築し、ping
コマンドで接続を確認します。さらに、片方のEC2インスタンスへはAWS Systems Manager (SSM) を介してセキュアに接続し、そこから通信テストを行います。
この構成のメリット
VPCピアリング接続は、複数のVPC間で安全かつ効率的なプライベートネットワーク通信を可能にします。
-
セキュアな通信経路
VPCピアリング接続は、AWSのプライベートネットワーク内でルーティングされるため、インターネットを経由しません。これにより、データが外部に露出するリスクを低減し、高いセキュリティを保ちながらVPC間の通信を実現します。 -
シンプルなネットワーク管理
AWSのマネージドサービスとして提供されるため、簡単に設定・管理でき、運用負荷を軽減します。 -
高いパフォーマンスと低レイテンシー
AWSのバックボーンネットワークを直接利用するため、低レイテンシーで高いネットワークパフォーマンスが期待できます。これにより、VPCを跨いだアプリケーション連携やデータ転送がスムーズに行えます。
アーキテクチャ図
VPCピアリング接続とは???
2つのVPC間を、あたかも同じネットワークに属しているかのように接続するための仕組み。 これにより、異なるVPC内のリソース(EC2インスタンスなど)が、プライベートIPアドレスを使って直接通信できるようになる。 インターネットゲートウェイやVPN接続を介さずに、AWSのプライベートネットワーク内でセキュアかつ効率的な通信を実現する。
VPCピアリング接続は、異なるアカウントのVPC間や、異なるリージョンのVPC間でも利用できますが、今回は同じアカウント、リージョン、AZ内での接続を行います。
手順
VPCの作成とプライベートサブネットの準備
本ハンズオンでは、2つのVPC (VPC-A
とVPC-B
) を作成し、それぞれにインターネットに接続しないプライベートサブネットを準備します。
VPC-Aの作成
【設定情報】
-
名前タグ
VPC-A
-
IPv4 CIDR ブロック
10.1.0.0/16
-
IPv6 CIDR ブロック
なし -
テナンシー
デフォルト
VPC-Bの作成
【設定情報】
-
名前タグ
VPC-B
-
IPv4 CIDR ブロック
10.2.0.0/16
-
IPv6 CIDR ブロック
なし -
テナンシー
デフォルト
VPCを作成すると、自動的にルートテーブルとネットワークACLも作成されますが、これらはデフォルト設定のままでOK。
プライベートサブネットの作成
各VPC内に、インターネットゲートウェイへのルートを持たないプライベートサブネットを作成します。今回は同一AZ内に配置します。
【AZ間通信の利用料金】
ピアリング接続を介していても、送信元と送信先のEC2インスタンスなどが
同じAZに存在する場合のデータ転送は、無料。
異なるAZに存在する場合のデータ転送は、有料。
この料金は、通常「AZ間データ転送アウト(Data Transfer Out of AZ)」として課金され、データがVPCから出ていく側(送信側)のVPCに対して発生します。
【VPC-A内のプライベートサブネット】
-
サブネット名
VPC-A-PrivateSubnet-AZ1a
-
VPC
VPC-A
を指定 -
アベイラビリティーゾーン
任意のAZ (例:ap-northeast-1a
) -
IPv4 サブネット CIDR ブロック
10.1.1.0/24
【VPC-B内のプライベートサブネット】
-
サブネット名
VPC-B-PrivateSubnet-AZ1a
-
VPC
VPC-B
を指定 -
アベイラビリティーゾーン
任意のAZ (例:ap-northeast-1a
) -
IPv4 サブネット CIDR ブロック
10.2.1.0/24
VPCピアリング接続の確立
VPC-AとVPC-B間で通信を可能にするために、VPCピアリング接続を作成します。
【設定情報】
-
ピアリング接続の名前タグ
任意(例:VPC-A-to-B-Peering
) -
VPC (リクエスタ)
-
VPC ID
VPC-A
のVPC IDを選択
-
VPC ID
- VPC (アクセプタ)
ピアリング接続を作成すると、リクエスタ側(VPC-A)からアクセプタ側(VPC-B)へリクエストが送信されます。VPC-Bのオーナーがリクエストを承諾することで、ピアリング接続の状態が 承諾の保留中 から アクティブ に変わります。
【ピアリング接続リクエスト承諾画面】
ルーティング設定の追加
VPCピアリング接続がアクティブになっただけでは通信はできません。
それぞれのVPCのルートテーブルに、相手のVPCへのルーティングルールを追加する必要があります。
VPC-Aのルートテーブル設定
VPC-Aのプライベートサブネットに紐付いているルートテーブルに、VPC-Bへのルートを追加します。
【設定情報】
-
送信先
10.2.0.0/16
(VPC-BのCIDRブロック) -
ターゲット
作成したVPCピアリング接続 (例:pcx-xxxxxxxxxxxxxxxxx
)
VPC-Bのルートテーブル設定
VPC-Bのプライベートサブネットに紐付いているルートテーブルに、VPC-Aへのルートを追加します。
【設定情報】
-
送信先
10.1.0.0/16
(VPC-AのCIDRブロック) -
ターゲット
作成したVPCピアリング接続 (例:pcx-xxxxxxxxxxxxxxxxx
)
EC2インスタンスの準備
VPC-AとVPC-BのそれぞれのプライベートサブネットにEC2インスタンスを作成し、SSMからの接続と、ピアリング接続経由での通信を可能にします。
SSM接続に必要な準備
IFエンドポイント作成、IAMロール作成、セキュリティグループ設定などの準備が必要。
詳細は以下を参照。
EC2インスタンス用セキュリティグループの作成
EC2インスタンスがSSMと通信し、かつピアリング接続されたVPC内のEC2インスタンスと通信できるようにルールを設定します。EC2-AとEC2-Bそれぞれのセキュリティグループが必要になります。
【設定情報】
-
インバウンドルール
タイプ:すべてのICMP - IPv4 (pingを許可するため)
ソース:VPC-AのEC2インスタンス用のセキュリティグループID (VPC-BのEC2インスタンス用SGに設定)
ソース:VPC-BのEC2インスタンス用のセキュリティグループID (VPC-AのEC2インスタンス用SGに設定) -
アウトバウンドルール
タイプ:HTTPS (ポート443)
送信先:SSM接続に必要なVPCエンドポイントのセキュリティグループID (SSM経由でのアクセスを許可するため)
EC2インスタンスの作成
VPC-AとVPC-Bのプライベートサブネットに、それぞれEC2インスタンスを起動します。
【EC2-Aインスタンス】
-
名前
EC2-A
-
AMI
Amazon Linux 2023 AMI
-
インスタンスタイプ
t2.micro
-
VPC
VPC-A
を指定 -
サブネット
VPC-A-PrivateSubnet-AZ1a
を指定 -
パブリックIPの自動割り当て
無効化 -
IAMインスタンスプロフィール
作成したIAMロール(SSM接続用)をアタッチ -
セキュリティグループ
作成したEC2インスタンス用セキュリティグループをアタッチ
【EC2-Bインスタンス】
-
名前
EC2-B
-
AMI
Amazon Linux 2023 AMI
-
インスタンスタイプ
t2.micro
など -
VPC
VPC-B
を指定 -
サブネット
VPC-B-PrivateSubnet-AZ1a
を指定 -
パブリックIPの自動割り当て
無効化 -
IAMインスタンスプロフィール
作成したIAMロール(SSM接続用)をアタッチ -
セキュリティグループ
作成したEC2インスタンス用セキュリティグループをアタッチ
SSMによるEC2インスタンスへの接続と通信確認
VPC-AのEC2インスタンスへSSMを使って接続し、そこからVPC-BのEC2インスタンスへping疎通確認を行います。
SSM接続に必要なVPCエンドポイントの作成、接続
AWS CLIを利用してVPC-AのEC2インスタンスへSSM接続します。
aws ssm start-session --target <インスタンスID>
Ping疎通確認
SSMで接続した EC2-A
インスタンスから、EC2-B
インスタンスのプライベートIPアドレスに対して ping
コマンドを実行し、通信を確認します。
-
EC2-B
インスタンスのプライベートIPアドレスを確認 (例:10.2.1.10
)。 -
EC2-A
インスタンスにSSM接続したプロンプト画面で以下のコマンドを実行。
ping 10.2.1.10
ping が成功すれば、VPCピアリング接続を通じてVPC-AからVPC-Bへのプライベート通信が確立されていることが確認できます。
今回の学び
今回のハンズオンを通じて、特に以下の点で学びを深めることができました。
-
AZ間通信料金
同一AZ間であれば通信料は無料だが、異なるAZ間の場合は通信料がかかる!
各AZが物理的に独立したデータセンターであり、その間を結ぶ専用の高速ネットワークインフラの構築・運用コストが発生するため。
AZを跨ぐ場合のレイテンシーやデータ転送コストについても、今後の設計で考慮すべき点だと考えることができた。
(AZが異なると通信料が発生することは知っていたが、その理由を考えたことがなかった。。。) -
pingコマンドで使用されるプロトコル
ICMP (Internet Control Message Protocol)が使用されている!
(単純に知識不足で知らなかった。。。) -
セキュリティグループ設定
ソース、送信先対象にてセキュリティグループを選択する場合、
プルダウンの候補には、作成されたVPC内にあるSGしか表示されないが
別のVPCで作成されたSGIDを入力するとちゃんと認識してくれる!
(大した気づきではないが、別VPCのSGも候補として表示されると勝手に思っていたので、なにか設定が足りていない?など少し詰まった。。。)