VPC初心者がハマりやすいポイントをまとめてみた

記事タイトルとURLをコピーする

皆さんこんにちは。テクニカルグループの山田です。

今回、社内の研修で初めてVPCに触れたのですが、VPCを構築する際にハマった部分が何箇所かあったので他にもいるであろう、迷える子羊のためにハマリやすいポイントを初心者の目線から解説していきます。
そんな事も知らないのかと思われる方もいらっしゃると思いますが、どうか温かい目で見てくだされば嬉しく思います!

なお、VPCの基本的な構築手順については、ググればたくさん出てくると思うのでそちらをご覧下さい。

VPCの構築で気になった・ハマったポイント

  • VPCのサイズは変更不可!

VPCを作成する際に、CIDR形式でVPCのサイズを決めると思うのですがこれは一度決めたらもう変えられません!
アドレス範囲を変えたい場合は、もう一度作りなおすしか方法はありません。
どうせ後で変えられるんでしょ?と、たかをくくって適当に指定すると後で泣きを見ることになるのでここは慎重に決めておきましょう。 ( 僕は泣きました )

f:id:cmpokuma:20200507210917p:plain

  • プライベートサブネット!?パブリックサブネットって何!?

VPCを調べていて、よく出てくる単語で「プライベートサブネット」「パブリックサブネット」というものがあります。

実は元々こういう設定がVPCに備わっているのではなく、そのサブネットのRoute tables の設定によってこれが決まってきます。
Route tables で 0.0.0.0/0 (デフォルトゲートウェイへの通信) がインターネットゲートウェイに流れるような設定になっているのが「パブリックサブネット」 そうではないのが「プライベートサブネット」です。

僕はそういう設定があるのかと思って、小一時間探し続けていました・・・

f:id:cmpokuma:20200507211217p:plain

0.0.0.0/0 が igw-xxxxxxx (インターネットゲートウェイ) に流れるようになっているので、このルートテーブルが設定されているサブネットはパブリックサブネットです。

f:id:cmpokuma:20200507211259p:plain

こちらのルートテーブルは0.0.0.0/0 が eni-xxxxxx/i-xxxxxxx(NATなどのインスタンス) に流れるようになっているので、このルートテーブルが設定されているサブネットはプライベートサブネットになります。

とまあ、簡単にまとめると外部と通信できるサブネットが「パブリックサブネット」VPC内部としか通信しないサブネットが「プライベートサブネット」です!

VPC内部及び、VPNやDirectConnectを通じて接続したオンプレ環境等とプライベートな通信をするサブネットが「プライベートサブネット」です!

  • サブネットで指定したIPアドレスの範囲のうち、最初の4つと最後の1つは使えない!

各サブネットの最初の4つと最後の1つのIPアドレスは Amazon が予約していて使えないようになっています!
例として、サブネットが 10.1.0.0/24 のサブネットで 先頭から2番目のアドレス 10.1.0.1を指定すると以下の様なエラーが出てしまいます。

f:id:cmpokuma:20200507211405p:plain

10.1.0.0/24 のサブネットを例にして言うと、予約されているアドレスは10.1.0.0、10.1.0.1、10.1.0.2、10.1.0.3、10.1.0.255 の5つで、自由に使えるのはそれ以外の 251個 のアドレスになります。

※参考 Amazon Virtual Private Cloud FAQ ( http://aws.amazon.com/jp/vpc/faqs/#I8 )

  • EC2で使っていたSecurityGroupは使えない!

EC2のSecurityGroupとVPC内で使うSecurityGroupは別物です。
EC2のSecurityGroupはInboundだけ設定出来たのですが、VPCのSecurityGroupは
Outboundまで制御することができます。

f:id:cmpokuma:20200507211906p:plain

  • SecurityGroupは知ってるけど、NetworkACL (以下、NACL)って何?

EC2ではセキュリティグループだけを設定すれば良かったのですが、VPCにはネットワークのI/Oを制御するための設定がもう一つNACLというものがあります。
どちらも仮想のファイアウォールのようなものとして機能するのですが、SecurityGroupはインスタンス単位、NACLはサブネット単位に設定します。

  • SecurityGroupを付けたり外したりが自由!

EC2のインスタンスを立ち上げる際にSecurityGroupを指定すると思うのですが、みなさんご存知の通りEC2の場合は一度紐付けたSecurityGroupは変更する事ができません。
ですが、VPC内のEC2インスタンスは自由にSecurityGroupを付け替えられるんです!

f:id:cmpokuma:20200507212035p:plain

         ↓

f:id:cmpokuma:20200507212115p:plain

このように、AWS マネジメントコンソールからでも手軽に変更する事ができます。

まとめ

今回、初心者が気になった・ハマりやすいポイントをまとめるという形でブログを書かせていただきました。
VPCという概念を理解するまでは時間がかかりましたが、慣れてしまえばマネジメントコンソールで簡単に作れてしまいます。次はコマンドラインツールで挑戦してみたいです。

また、これから研修を進めていく上で今回のようなハマってしまう場面はたくさん出てくると思うのでここで文章化して共有して皆さんと一緒に成長していければなと思います。

追記 : AWS ソリューションアーキテクトの荒木様よりご指摘をいただいたので追記します。

f:id:cmpokuma:20200507212215p:plain

誤:VPC内部としか通信しないサブネット

正:VPC内部及び、VPNやDirectConnectを通じて接続した
  オンプレ環境等とプライベートな通信をするサブネット

荒木様ご指摘ありがとうございました。勉強になりました。