Goalist Developers Blog

VPCピアリングして別AWSアカウントのセキュリティグループを使う

こんにちは
Webの開発者だけどインフラも知りたいお年頃のイイオです

やりたいこと

  • とあるEC2たちを別AWSアカウントに移し、そっち側からssh接続したい
  • このEC2たちは生まれては消えるさだめなので、セキュリティグループのソースにIPアドレスとかいちいち設定できない
  • というわけでセキュリティグループのソースに別AWSアカウントのセキュリティグループ指定したい

f:id:y-iio:20180614181210p:plain

手順

いいからVPCピアリングだ!

docs.aws.amazon.com

0. 前提

アカウントA

  • VPC CIDR 10.0.0.0/16
  • サブネット 10.0.10.0/24, 10.0.20.0/24

アカウントB

  • VPC CIDR 172.30.0.0/16
  • サブネット 172.30.10.0/24, 172.30.20.0/2

VPCのCIDRが被っているとピアリングできないよ
最初てきとうにVPC切ってしまってたいへん後悔したよ
このあたりをちゃんとべんきょうしてからやるべきだったよ

dev.classmethod.jp

リージョンも同じじゃないといろんな制限をくらうよ

1. アカウントAでVPCピアリングの申請

VPC > ピアリング接続 > ピアリング接続の作成

f:id:y-iio:20180614182341p:plain

AWSのアカウントIDはアカウント設定画面からみれる

2. アカウントBでVPCピアリングの許可

VPC > ピアリング接続

f:id:y-iio:20180614182806p:plain

f:id:y-iio:20180614182910p:plain

f:id:y-iio:20180614182932p:plain

3. アカウントBでルートテーブルを指定

VPC > ルートテーブル

送信先は相手のVPC全体にもできるし、もっと小さくサブネットとかIP単位にも絞れる、ゴイス〜

f:id:y-iio:20180614183259p:plain

4. アカウントAでルートテーブルを指定

VPC > ルートテーブル

こちらでもルートを追加、これ忘れてて詰まってたことは内緒

f:id:y-iio:20180614183316p:plain

5. アカウントAのセキュリティグループの設定

EC2 > セキュリティグループ

向こうのアカウントのセキュリティグループを入力できるようになっている!

f:id:y-iio:20180614184215p:plain

アカウントBのサーバーから接続確認だ〜〜〜

ssh ec2-user@ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com(パブリックDNS)

沈黙

ssh ec2-user@54.xxx.xxx.xxx(パブリックIP)

繋がらないよ〜〜〜〜

はい

qiita.com

www.skyarch.net

セキュリティグループでセキュリティグループを許可する(セキュリティグループのソースにセキュリティグループ指定する)方法は、プライベートネットワーク内でのみ有効…!!!

VPC Aの中でディグる

dig ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.55.amzn1 <<>> ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37867
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com. 20 IN A 10.0.10.123

VPC Aの外でディグる

dig ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com

; <<>> DiG 9.10.6 <<>> ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8580
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com. 589434 IN A 54.xxx.xxx.xxx

ピアリングしたVPC Bの中でディグる

dig ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.57.amzn1 <<>> ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34546
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-54-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com. 60 IN A 54.xxx.xxx.xxx

今まで完全に同じVPC内でしか使ったことなかったから
接続先にパブリックDNSやパブリックIP指定しても、プライペートIPとして解決されていてたけど
VPCピアリングだとその解決できないから、プライペートIPを直指定しないとダメだったんだね、ハム太郎!へけ!

というわけで
アカウントBのサーバーから再度接続確認だ〜〜〜

ssh ec2-user@10.0.10.123

これでよろし〜〜〜なんだか全てにおいて己の知識不足って感じだ!へけ!