【学習記録】VPCピアリングについて勉強

VPCピアリングの概要はわかっているものの、今ひとつ具体的にイメージできなかったので実際に手を動かして勉強しました。
以下に作業メモをまとめます。

作業内容はこちらの動画を参考にさせてもらいました。

www.youtube.com

VPCを作成します。
Name: VPC-A
CIDR block: 10.100.0.0/16

f:id:JunpeiNakasone:20210424220722p:plain

インターネットゲートウェイを作成します。
Name: VPC-A-IGW
f:id:JunpeiNakasone:20210424220824p:plain

作成したVPC-A-IGWをVPC-Aにアタッチします。
f:id:JunpeiNakasone:20210424220928p:plain

パブリックサブネットを作成します。
Name: VPC-A-Subnet-Public
VPC: VPC-A
CIDR block: 10.100.0.0/24
f:id:JunpeiNakasone:20210424221234p:plain

ルートテーブルを作成します。
Name: VPC-A-RT-Public
VPC: VPC-A
f:id:JunpeiNakasone:20210424221400p:plain

ルートテーブルにルートを追加します。
Destination: 0.0.0.0/0
Target: VPC-A-IGW
f:id:JunpeiNakasone:20210424221524p:plain

ルートテーブルにサブネットを関連づけます。
Subnet: VPC-A-Subnet-Public
f:id:JunpeiNakasone:20210424221624p:plain

プライベートサブネットを作成します。
Name: VPC-A-Subnet-Private
VPC: VPC-A
CIDR block: 10.100.1.0/24
f:id:JunpeiNakasone:20210424221752p:plain

ルートテーブルを作成します。
Name: VPC-A-RT-Private
VPC: VPC-A
f:id:JunpeiNakasone:20210424221906p:plain

ルートテーブルにプライベートサブネットを関連づけます。
f:id:JunpeiNakasone:20210424222005p:plain

パブリックサブネットにEC2インスタンスを作成します。
VPC: VPC-A
Subnet: VPC-A-Subnet-Public
Auto-assign Public IP: Enable
f:id:JunpeiNakasone:20210424222228p:plain
Name: VPC-A-EC2-Public
f:id:JunpeiNakasone:20210424222320p:plain Security Group name: VPC-A-SG-Public
Type: SSH
Source: 0.0.0.0/0
f:id:JunpeiNakasone:20210424222456p:plain
パブリックサブネットにEC2インスタンスが作成されます。
f:id:JunpeiNakasone:20210424222556p:plain

プライベートサブネットにEC2を作成します。
VPC: VPC-A
Subnet: VPC-A-Subnet-Private
Auto-assign Public IP: Disable
f:id:JunpeiNakasone:20210424222735p:plain Name: VPC-A-EC2-Private
f:id:JunpeiNakasone:20210424222847p:plain Security group name: VPC-A-SG-Private
Type: SSH
Source: 10.100.0.0/24(パブリックサブネットのIPレンジ)
f:id:JunpeiNakasone:20210424223017p:plain

launchをクリックして、EC2インスタンスが二つ作成されていることを確認します。
f:id:JunpeiNakasone:20210424223208p:plain

次に外部から接続させないVPC-Bを作成します。
name: VPC-B
CIDR block: 10.200.0.0/16
f:id:JunpeiNakasone:20210424223337p:plain ※外部から接続させないため、インターネットゲートウェイなどはアタッチしない

VPC-Bにサブネットを作成します。
Name: VPC-B-Subnet-Private
VPC: VPC-B
CIDR block: 10.200.1.0/24
f:id:JunpeiNakasone:20210424223557p:plain

ルートテーブルを作成します。
Name: VPC-B-RT-Private
VPC: VPC-B
f:id:JunpeiNakasone:20210424223729p:plain

ルートテーブルをサブネットに関連づけます。
Subnet: VPC-B-Subnet-Private
f:id:JunpeiNakasone:20210424223951p:plain

VPC-BにEC2インスタンスを作成します。
VPC: VPC-B
Subnet: VPC-B-Subnet-Private
Auto-assign Public IP: Disable f:id:JunpeiNakasone:20210424224159p:plain
Name: VPC-B-EC2-Private
f:id:JunpeiNakasone:20210424224252p:plain Security group name: VPC-B-SG-Private
Type: SSH
Source: 10.100.1.0/24(VPC-AのプライベートサブネットのIPレンジ)
Type: All ICMP
Source: 10.100.1.0/24
f:id:JunpeiNakasone:20210424224633p:plain

lauchをクリックしてEC2インスタンスVPC-Aに二つ、VPC-Bに一つ作成されていることを確認します。
f:id:JunpeiNakasone:20210424224810p:plain

VPC-AのパブリックサブネットのEC2にSSHで接続します。
f:id:JunpeiNakasone:20210424225041p:plain

次にVPC-AのプライベートサブネットのEC2にSSH接続するために、ローカルのSSHキーをcatコマンドなどで表示して、VPC-AのパブリックサブネットのEC2にvimコマンドで同じキー名のSSHキーを作成し、中身を貼り付けます。

SSHキーが準備できたのでプライベートサブネットのEC2にSSH接続しようとすると以下のエラーが出ました。

Permissions 0664 for 'rdsconnect20210104.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "rdsconnect20210104.pem": bad permissions
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

権限設定に問題があるようなので以下のchmodコマンドで権限を400にして他者から読み取られないようにしました。

chmod 400 rdsconnect20210104.pem

権限を変更したあとプライベートサブネットのEC2にSSH接続すると成功しました。
f:id:JunpeiNakasone:20210424225919p:plain

次にVPC-BのEC2インスタンスに接続するために、VPCのマネジメントコンソールからVPC Peeringを選択します。
f:id:JunpeiNakasone:20210424230238p:plain

VPCピアリングを作成します。
Name: VPC-A-VPC-B-Peering
VPC(Requester): VPC-A ※Requesterはリクエストを送る側

Select another VPC to peer with
Account: My accountc
Region: This region
VPC()Accepter): VPC-B
f:id:JunpeiNakasone:20210424230802p:plain

興味本位でAccountをAnother accountにしてみるとIDなどを入力する項目が出てきました。
f:id:JunpeiNakasone:20210424230924p:plain

Create Peering ConnectionをクリックするとVPCピアリングが作成されました。
f:id:JunpeiNakasone:20210424231022p:plain

作成されたVPCピアリングを見ると、statusがPending Acceptanceになっています。
f:id:JunpeiNakasone:20210424231142p:plain

ActionsからAccept Requestをクリックします。
f:id:JunpeiNakasone:20210424231225p:plain ポップアップが表示されるので、Yes Acceptをクリックします。
f:id:JunpeiNakasone:20210424231319p:plain f:id:JunpeiNakasone:20210424231354p:plain VPCピアリングのステータスがActiveになりました。
f:id:JunpeiNakasone:20210424231436p:plain

VPCピアリングができたのでVPC-AのプライベートEC2からPingVPC-BのEC2に通るか試すと、レスポンスが返ってきませんでした。
f:id:JunpeiNakasone:20210424231902p:plain

これはルートテーブルにVPCピアリングが設定されていないからのようです。

VPC-A-RT-Privateにルートを追加する画面に行くと、VPCピアリングが選択できるようになっています。
VPC-BのEC2向きの通信はVPCピアリングに行くようにします。
f:id:JunpeiNakasone:20210424232414p:plain

VPC-AのプアイベートサブネットからVPC-Bへのルートができました。
f:id:JunpeiNakasone:20210424232529p:plain

この時点ではまだPingは通っていないので、VPC-BからVPC-Aのプライベートサブネット行きのルートも設定します。
f:id:JunpeiNakasone:20210424232727p:plain

VPC-BからVPC-Aのプライベートサブネットへの通信はVPCピアリングに行くルートが設定されています。
f:id:JunpeiNakasone:20210424232925p:plain

改めてPingを送ると無事通信が成功することが確認できました。
f:id:JunpeiNakasone:20210424233003p:plain

雑感

AWS SAAの試験勉強をするまではVPCピアリングなどは特に勉強したことなかったので、最初はイメージしにくい部分もありましたらひとつずつ手を動かすと頭が整理されていって良いですね。