ネットワークのお勉強~AWS VPCを添えて
皆さんこんばんは。寒い日が続くと思ったら、もう年の瀬ですね。
今年もいろいろと激動な日々でしたが、そんな変化の激しい現代社会を根底から支えるクラウドサービス、それがAWSですよね。
今回は、AWS SAAの勉強をしていて、VPCについて学んだ(それを通してネットワーク全体についても学んだ)ので、それをここに書いていこうと思います。
ただ、世の中に同じようなブログはゴマンとあるため、細かい説明はググるとして、一連の流れを後でも追えるように記事を書きたいと思います。
一連の流れとは何か?というと、
(1)インターネットを通って、プライベートサブネット内のEC2にアクセスする流れ
(2)プライベートサブネット内のEC2からインターネット上のどこかにアクセスする流れ
の2つです。
(1)インターネットを通って、プライベートサブネット内のEC2にアクセスする流れ
図と文字で説明します。こちらは比較的素直。
- Teratermなどで、PublicのEC2のIP20.30.40.50を指定する。
- Internet GWで、パブリックとプライベートのIPを変換する。つまり、20.30.40.50→10.0.1.1に変換する。
- パブリックのEC2到着!
- そこから、さらにIP10.0.2.1に対してssh通信する。
- 同じVPC内なので、そのままプライベートのEC2到着!
この流れの中で、私がちょっと気になった部分をピックアップ。
・インターネットGWはIPの変換をしている。
StaticNATを行います(静的なIPの変換)。NATテーブル(変換するIPのテーブル)には、通信前から変換ルールが定義されているため、インターネットから始まる通信/EC2から始まる通信、どちらにも対応可能です。
・ネットワーク疎通確認しようとしてもpingは通らない。
pingは、sshではなくICMPプロトコルでの通信であるため、デフォではセキュリティグループで許可されていません。
セキュリティグループとネットワークACLは、VPC内の通信制御の機能です。どちらもプロトコル、ポート、IPで通信の許可/拒否を定義できます。
セキュリティグループ:インスタンス単位で制御。ステートフル(来る通信が許可されていたら、返りも無条件で許可)
ネットワークACL:サブネット単位で制御。ステートレス(来る通信が許可されていても、返りも「許可」が定義されていないと通らない)
・InternetGWのNATテーブルは使用者は意識しない。
内部の仕組みでは、InternetGWのNATテーブルでプライベートとパブリックのIPを変換しているみたいですが、利用者はこんなテーブル気にしないでOKです。その代わり、EC2の設定画面で設定します。
ちなみに、EC2の設定画面で設定するとランダムなIPが割り振られますが、ElasticIPというサービスを使うと固定IPを払い出せて、それをEC2に紐づけることも可能です。
(2)プライベートサブネット内のEC2からインターネット上のどこかにアクセスする流れ
こちらも図と文字で説明します。こっちはちょっと複雑。(と言っても、AWS上での設定は楽)
- プライベートのEC2から、インターネット上のどこかにアクセスするコマンド実行する。
- Private Subnetのルーティングテーブルをチェック。10.0.0.0/16以外のIPにアクセスする場合はNAT GWに行くようになっているため、NAT GWにアクセスする。
- NAT GWで送信元のプライベートとパブリックのIPをポートを含めて変換する。つまり、10.0.2.1:52000→90.80.70.60:30001に変換する。
- Public Subnetのルーティングテーブルをチェック。10.0.0.0/16以外のIPにアクセスする場合はInternet GWに行くようになっているため、Internet GWにアクセスする。
- Internet GWではNATはしないでインターネットへのルーティングのみ実施する。
- インターネット上の目的地に到着!(実際はレスポンスもある)
・NAT GWはポートを含めて変換している。
Dynamic NAPTを行います(動的なIP+ポートの変換)。通信が来たらそのタイミングでNAPTテーブルを定義するため、プライベートからインターネットに出たときのレスポンスは返ってきます(NAPTテーブルに変換するIP+ポートが記載されているため)。しかし、インターネットからの通信はされません(パブリックサブネットのルートテーブル内に、インターネットGWからNATゲートウェイにルーティングするルールは書いていないため)
また、ポートを含めていることによって、NATGWは1:多の変換を可能にしています。そのおかげで、プライベート内のEC2が複数あっても、NATGWは1つでOKです。
・NAT GWで変換するIPは事前にElasticIPで払い出してNAT GWに紐づけておく。
NAPTテーブルに記載された、パブリックIPですが、これは事前に払い出しておきます。こちらは、動的に作成するわけにはいかないため、ElasticIPで固定IPを払い出しておきます。
ちなみに、ElasticIPは固定IPを払いだして、何も紐づけていないと課金されます。EC2とか、今回のようにNAT GWに紐づけていれば無料です。
また、NAT GWの料金は結構お高いみたいです。実際に設計するときは、ここら辺のコストも気にする必要がありますね。
私が学習中に躓いたポイントを踏まえて、2つの流れを追ってみました。
ちなみに、このサイトをかなり参考にしました。
【図解/AWS】インターネットGWとNAT-GWの違い〜各メリット、パブリックサブネットとは〜 | SEの道標
なんとなく、ネットワークについて激浅な知識がついた気がします。
ちょっと知ると、こういう本読みたくなってきますよね。とりあえず年末用に買って、お守りとして持っておこうかと思いました。それではみなさん、よいお年を。