記録帳

クラウド、データ分析、ウイスキーなど。

ネットワークのお勉強~AWS VPCを添えて

皆さんこんばんは。寒い日が続くと思ったら、もう年の瀬ですね。

今年もいろいろと激動な日々でしたが、そんな変化の激しい現代社会を根底から支えるクラウドサービス、それがAWSですよね。

今回は、AWS SAAの勉強をしていて、VPCについて学んだ(それを通してネットワーク全体についても学んだ)ので、それをここに書いていこうと思います。

ただ、世の中に同じようなブログはゴマンとあるため、細かい説明はググるとして、一連の流れを後でも追えるように記事を書きたいと思います。

一連の流れとは何か?というと、

(1)インターネットを通って、プライベートサブネット内のEC2にアクセスする流れ
(2)プライベートサブネット内のEC2からインターネット上のどこかにアクセスする流れ

の2つです。

(1)インターネットを通って、プライベートサブネット内のEC2にアクセスする流れ

図と文字で説明します。こちらは比較的素直。

f:id:supa25:20211221003203p:plain
vpc_1
  1. Teratermなどで、PublicのEC2のIP20.30.40.50を指定する。
  2. Internet GWで、パブリックとプライベートのIPを変換する。つまり、20.30.40.50→10.0.1.1に変換する。
  3. パブリックのEC2到着!
  4. そこから、さらにIP10.0.2.1に対してssh通信する。
  5. 同じ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上での設定は楽)

f:id:supa25:20211221003907p:plain
vpc_2
  1. プライベートのEC2から、インターネット上のどこかにアクセスするコマンド実行する。
  2. Private Subnetのルーティングテーブルをチェック。10.0.0.0/16以外のIPにアクセスする場合はNAT GWに行くようになっているため、NAT GWにアクセスする。
  3. NAT GWで送信元のプライベートとパブリックのIPをポートを含めて変換する。つまり、10.0.2.1:52000→90.80.70.60:30001に変換する。
  4. Public Subnetのルーティングテーブルをチェック。10.0.0.0/16以外のIPにアクセスする場合はInternet GWに行くようになっているため、Internet GWにアクセスする。
  5. Internet GWではNATはしないでインターネットへのルーティングのみ実施する。
  6. インターネット上の目的地に到着!(実際はレスポンスもある)
・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の道標


なんとなく、ネットワークについて激浅な知識がついた気がします。

ちょっと知ると、こういう本読みたくなってきますよね。とりあえず年末用に買って、お守りとして持っておこうかと思いました。それではみなさん、よいお年を。