AWSネットワーク入門 という本を読んだので自分的ポイントをメモ。

  • 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の方はステートレスであり、明示的にポート番号を許可しておかないとパケットが弾かれる。