AWSのネットワークとセキュリティまわりについてお勉強したことのメモです。間違っていることもあるかも知れませんが、その際にはコメント等でご指摘していただけるとありがたいです。
AWSにおけるネットワーク
リージョンとAZ
全世界にリージョンは19個(2019/12/07現在)存在する。(一部のリージョンでは、アカウントの制限などがあるため、全て自由に選択できるわけではない)
リージョン
- 複数のデータセンタをまとめた地域の単位
- 異なるリージョン間の通信はインターネットを経由が必要
AZ(Availability Zone)
-
(物理)データセンター。リージョンの中にいくつか存在する。
-
アジア・パシフィック(東京)では、ap-northeast-1a,1c,1d が選択できる。(1bは現在では新規に作ることができないとか。)
-
異なるAZでは、地理的に異なる場所に設置されている。
-
VPCはAZを超えて作成される。
-
AZ同士は高速なネットワークにより接続されている。
-
災害に対する障害対策のために、異なるAZにDBを配置したりする。
リージョンとVPC、サブネット
VPC(Virtual Private Cloud)
- AWS内で使用する仮想ネットワーク。
- VPCは複数のAZにまたがる仮想的なネットワーク。
- 詳しくは公式サイトを見るとわかりやすい。
サブネット
- VPC内部に作られるネットワークの単位。
- AZをまたぐ事ができない。
- インターネットゲートウェイが接続(ルーティング)されていると、パブリックサブネットと呼ばれ、インターネットに接続することができる
ネットワークのセキュリティ
AWSでは、それぞれのサービス(EC2とか)をインターネットと接続する際に、2種類のセキュリティを通過することになる。
AWSのサービスがインターネットに接続するまでの構成
ネットワークACL
EC2が属するサブネットに対して割り当てる
- ステートレス(接続を追跡しない)
- 1つのサブネットに対して1つしか指定できない。
- アクセスできるIPを指定したり
セキュリティグループ
- EC2などのそれぞれのインスタンスに設定するセキュリティ。
- 正確にはEC2に割り当てているENIに対して設定する。
- 1つのENIに対して5つまで設定できる。
- 同じセキュリティグループを設定したインスタンス同士は無制限に通信できる
- EC2とRDSで同じ設定->RDSは外部から直接接続できないようにするとか。
- ステートフル(あるインバウンドに対する設定に対して、そのレスポンスは無条件に通すことができる)
- 結構細かい設定をアプリケーションごとに設定できる。
セキュリティの使い分け
- ネットワークACLはアクセス元IPを設定するとか
- 例: 社内からの通信は通すけど、それ以外は弾く。
- セキュリティグループは細かな設定。
- 許可するものを追加
- 例: このポート(http/https)は通す。それ意外は通さない。 をすると、後々管理がしやすくてよいのではないか?
まとめ
AWS関連のネットワークについて最近学んだことをまとめてみた。特にAZとVPC、サブネットの関係をきちんと理解して開発していかないと、後々面倒なことになりそう。 また、ネットワークACLとセキュリティグループは用途に応じてステートフル/ステートレスを意識しながら構成する必要があると思う。自分はYAMAHAルータを用いて自宅ネットワークを構築しているが、dynamicとstaticのfilterの使い分けがこれにかなり近いと思う。また、YAMAHAルータと異なり、セキュリティグループという形でルールをまとめて複数のENIに設定できるというのは、きちんと使えれば非常に便利で良いと思う。また、同じセキュリティグループを適応したENI同士は自由に通信できることなどは、きちんと使えれば非常に使いやすい機能だと思う。
その他
- このブログでの図はdraw.ioを利用して作成しました。また、AWS関連の図については、利用規約を守れば結構自由に使用することができるので非常に便利でオススメです。参考: AWS アーキテクチャアイコン