経緯
学習の為やっていたAWSスキルビルダーのAWS QUESTのクラウド島第4ステージで躓いたので、その時の要点をまとめる。
P.S.多分不正確な記述が多いので初学者はこの記事で覚えないで下さい。責任は負いかねます。
参考にしたURL
VPCの構造
インターネットからVPCへの接続関係
インターネットからの接続関係
Internet
└── Internet Gateway
|
(----|---------<VPC>--------------)
( | )
( Public Subnet )
( | )
( Private Subnet <-------- NAT Gateway <-- Internet <-- Remote Host
( )
(---------------------------------)
- AWSでは、原則としてVPCとインターネット間のやりとりはIGW(インターネットゲートウェイ)を介して行われる。
- インターネットに公開しなければいけないもの(Webサーバー)はパブリックサブネット
- インターネットからアクセスできる必要のないものはプライベートサブネット
パブリックサブネットの中身
パブリックサブネット内の構図
Public Subnet
└── Web Server (HTTP) <== Webサーバー用セキュリティグループを適用
-
公開用Webサーバーが配置されている。
- この時、Webサーバーとして運用しているインスタンスはHTTP通信が通ればいい。
- HTTP、HTTPS通信を許可したWebサーバー用セキュリティグループを作成、適用する。
- この時、Webサーバーとして運用しているインスタンスはHTTP通信が通ればいい。
- NATゲートウェイは、プライベートサブネット内のデータベースサーバーをリモート接続で操作しなければいけない場合にアドレス変換をする為に用意してある。
- データベースサーバーとして運用しているインスタンスのルートテーブルにNATゲートウェイのルートが登録されていればOK
プライベートサブネットの中身
プライベートサブネット内の構図
Private Subnet
└── Database Server <==データベースサーバー用セキュリティグループを適用
-
インターネットに公開する必要のないデータベースサーバーが配置されている。
- データベースサーバーインスタンスはWebサーバーからのMySQLリクエストに応答できればいい
- Webサーバーの入っているインスタンスのプライベートアドレスからのMySQLリクエストのみを許可するデータベースサーバー用セキュリティグループを作成、適用する。
- データベースサーバーインスタンスはWebサーバーからのMySQLリクエストに応答できればいい
ざっくりとした要点
インターネットゲートウェイ
- インターネットゲートウェイ(IGW) と聞くと「覚えなきゃ!」という感覚になるが、要は物理ホストにおける デフォルトゲートウェイの事。
- デフォゲという事なので、IGWはパブリックサブネットからインターネットに出る通信の為にある。
- だから、データベースサーバーのリモートアクセス用にはNATゲートウェイを使う。
セキュリティグループ
- セキュリティグループはインスタンスに適用する設定である。
- だから、コンソールでもEC2インスタンスのセキュリティタブに設定リンクがある。分かり易いね。
-
(重要) セキュリティグループは ステートフルである。
- ステートフルというのは、「リクエストが届けば、その内容を理解して必要な返答はしてもいいよ」 という便利な性質のこと。
- つまり、セキュリティグループのインバウンドルールで受信許可を出した通信に関しては、アウトバウンドルールでいちいち適用しなくても返答してくれる。
- アウトバウンドルールは、セキュリティ要件の厳しいプロジェクトや、手順書などに特別指示がない限り設定しなくてもセキュリティグループは機能してくれる。
ACL(アクセスコントロールリスト)
- サブネットに適用する。
- サブネットに対する設定なので、コンソールでもインスタンスのサブネットIDリンクから飛んだVPC subnetウィンドウにネットワークACLタブがある。分かり易いね。
- (重要) ACLはステートレスなので、ちゃんとアウトバウンドルールも設定する事。
- 簡単なACLルールの見方
- ルール番号:数字が小さいものほど優先される。恐らく番号表の最下行にある「*」のルールは、適用できるルールがなにもない場合に適用されるルールで、内容は「全部拒否」になっている筈。
個人的に重要だったポイント
プライベートサブネット内のインスタンスに適用するセキュリティグループのルールで、インバウンドルールに設定する通信のソースは、「[カスタム]:送信元インスタンスのプライベートIPアドレス(プレフィックスあり)」 に設定する!!