AWSネットワーク入門の覚書
aws networkAWSネットワーク入門 という本を読んだので自分的ポイントをメモ。
- VPC: 一つの閉じたネットワーク。regionの中に閉じている。AZはまたぐ。regionの中に複数のVPCを作れる
- サブネット: VPCの中のサブネットワーク。AXに閉じている
- VPCやサブネットはCIDRでアドレス範囲を指定して定義する
- デフォルtVPC: アカウントを作ると、勝手にAWSが用意してくれているやつ
- EC2のインスタンスなどは、サブネットの中に作る
- VPCを作ると、暗黙的にrouterが1つ勝手に作られる。サブネットは、このrouterにつながっている
- VPCをインターネットにつなぐには、インターネットゲートウェイが必要。VPC or サブネットにルートテーブルを定義して、VPC or サブネット外の宛先の通信がゲートウェイに向かう用に設定する
- EC2のインスタンスをインターネットにつなぐには、パブリックIPを設定する必要がある
- セキュリティグループは、ネットワークとインスタンスの間のファイアウォール
- 1つのインスタンスに、複数のセキュリティグループを適用できる
- セキュリティグループは、特定の条件を「許可する」設定しかない(「拒否する」という設定ができない)
- セキュリティグループの送信元/先にはCIDRやIPアドレスの他に、セキュリティグループやプレフィックスリストを指定できる
- セキュリティグループを指定した場合は、「そのセキュリティグループが適用されているEC2インスタンスとだけ通信する」というルールになる
- プレフィックスリストとは、CIDRブロックのことである。S3などのマネージド・サービスが利用しているIP範囲を表現するプレフィックスリストがAWSによって管理・提供されている。ユーザーが作ることもできる
- ネットワークACLは、サブネットの入口のファイアウォール
- 1つのサブネットには1つのACLしか設定できない
- ACLのルールでは、「許可」「拒否」どちらもある
- セキュリティグループはステートフル/ACLはステートレス
ステートレスとステートフル
TCP/IPでは、通信の両端は、IPアドレス:ポート番号で識別される。サブネットの内側にあるサーバーと外側にあるクライアントが通信する場合、サーバー -> クライアント(outbound)、クライアント -> サーバー(inbound)の両方向でパケットが通信される。サーバー側は、提供しているサービスに応じて特定のポートで待ち受けているが、クライアント側のポート番号は通信のたびにランダムに設定される。したがって、ファイアウォールで、サーバー -> クライアント(outbound)方向には任意のポートを許すようにしないとパケットがクライアントに届かない。
一般論としては上記のとおりだが、AWSのセキュリティグループでは、サーバーからの応答として送信されたパケットについては、明示的に許可の設定がなくとも通すように動作する。この挙動をステートレスであると呼ぶ。
ACLの方はステートレスであり、明示的にポート番号を許可しておかないとパケットが弾かれる。