AWSでマルチアカウント戦略を採用する企業が増えており、それに伴い異なるアカウント間でのリソース接続が必要になるケースが増えています。特に、EC2インスタンスがあるアカウントから別のアカウントにあるRDS(リレーショナルデータベースサービス)インスタンスにプライベートにアクセスするシナリオはよく見られます。
今回には、AWS VPC Peeringを利用して、異なるAWSアカウント間でのEC2からRDSへのプライベート接続を設定する手順を詳しく説明します。
VPC ピアリング接続は、プライベート IPv4 アドレスまたは IPv6 アドレスを使用して 2 つの VPC 間でトラフィックをルーティングすることを可能にするネットワーク接続です。どちらの VPC のインスタンスも、同じネットワーク内に存在しているかのように、相互に通信できます。VPC ピアリング接続は、お客様の VPC 間や、他の AWS アカウントの VPC との間に作成できます。VPC は複数の異なるリージョンに存在できます (これはリージョン間 VPC ピアリング接続とも呼ばれます)。
前提条件
以下のものが必要です(例:アカウントAからアカウントBのリソースをへリクエスト)
- 異なる2つのAWSアカウント(アカウントAとアカウントBとします)。
- アカウントAには、EC2インスタンスが存在するVPCがあること。
- アカウントBには、RDSインスタンスが存在するVPCがあること。
- 両方のVPCが互いに異なるCIDRブロックを持つこと。
- 必要なAWS CLIまたはAWSマネジメントコンソールへのアクセス権。
VPC Peeringの設定
VPC Peeringリクエストの作成 (アカウントAからアカウントBへ):
- AWSマネジメントコンソールで、アカウントAのVPCダッシュボードに移動します。
- 「Peering Connections」を選択し、「Create Peering Connection」をクリックします。
リクエストの送信元をアカウントAのVPCに設定し、リクエストの送信先をアカウントBのVPCに設定します。 - 必要な情報(VPC ID、アカウントIDなど)を入力し、「Create Peering Connection」をクリックします。
例:
AのCIDR:10.10.0.0/16
VPC Peeringリクエストの承認 (アカウントBで):
- アカウントBのAWSマネジメントコンソールにログインし、VPCダッシュボードに移動します。
- 「Peering Connections」を選択し、受信したリクエストを選択します。
- リクエストを承認し、「Accept」をクリックします。
例:
BのCIDR:10.20.0.0/16
ルートテーブルの設定
アカウントAのVPCのルートテーブルにエントリを追加:
- 「Route Tables」を選択し、EC2インスタンスがあるサブネットに関連付けられたルートテーブルを編集します。
- RDSインスタンスが存在するアカウントBのVPC CIDRブロックへのルートを、作成したVPC Peering接続をターゲットとして追加します。
アカウントBのVPCのルートテーブルにエントリを追加:
- 同様に、「Route Tables」を選択し、RDSインスタンスがあるサブネットに関連付けられたルートテーブルを編集します。
- EC2インスタンスが存在するアカウントAのVPC CIDRブロックへのルートを、VPC Peering接続をターゲットとして追加します。
セキュリティグループの設定
- アカウントBのRDSインスタンスのセキュリティグループに、アカウントAのEC2インスタンスのプライベートIP(10.10.0.0/16 3306)からのインバウンドトラフィックを許可するルールを追加します。
- 同様に、EC2インスタンスのセキュリティグループで、RDSインスタンスへのアウトバウンドトラフィックを許可するルールを設定します。
テストと検証
EC2インスタンスからRDSインスタンスに接続できるかテストします。正常に接続できれば、設定が正しく行われています。
mysql -h{rds host} -u{rds username} -p
正しく設定することで、安全かつ効率的なアーキテクチャを構築できます。