AWSのVPCってなんだかわかりにくいですよね?
VPCは、AWSを利用する上でほぼ100%利用するため、避けては通れないサービスです。
そこで今回は、『重要だけどどこか分かりづらいVPC』を、イラストを豊富に使い、なるべく専門的な用語は使わずにわかりやすく解説します!
この記事を最後まで読めば、VPCやNATゲートウェイなどのサービスがイメージできるようになっているはずです!
私も未経験からAWSエンジニアになったときに苦労した経験があるので、つまづきやすいポイントがわかります!
以下の記事では、AWSを無料で勉強する方法をまとめているので、あわせて参考にしてください。
上記の記事でも紹介していますが、侍テラコヤ
また、以下の記事ではAWSを学べるスクールを紹介しています。
本格的にAWSを学んでAWSエンジニアになりたい方は必見です。
なお、本記事では分かりやすさ重視のため、厳密には正確でないような表現もあるかもしれませんが、ご容赦ください。
VPCとは?
最初に辞書的な意味を記載しておくと、VPCとは”Virtual Private Cloud”の略で、直訳すると「仮想的な自分専用クラウド」です。
といってもあまりピンとこない方が多いかと思います。
もう少し噛み砕いて説明すると、「AWS上に、あなた専用の、隔離されたプライベートなネットワーク空間を作ることができますよ」ということです。
例えるなら、「これからあなたが自由に作業するための土地をあたえます」という感じですね。
これから、AWSでさまざまなサービスを利用するときは、この土地の上にサービスを構築していくようなイメージです。
以下ではネットワーク初心者の方のために、IPアドレスやCIDRなどについても解説します。
それらの基礎知識がすでにある方は、「VPCの目的」から読み始めてください。
IPアドレスとCIDR
VPCを構築するときは、CIDRというIPアドレスの範囲を指定する必要があります。
IPアドレスについてあまり詳しくない人のために、簡単にIPアドレスやCIDRについて説明しておきます。
IPアドレスとは
IPアドレスは、ネットワーク上の住所を表す方法です。
PCやスマホのようにネットワークにつながっている端末には、IPアドレスという住所が割り当てられていて、ネットワークの通信はその住所を頼りに届けられます。
つまり、VPCでもらった土地の住所を決める方法がIPアドレスということです。
192.168.0.1のようなIPアドレスの形式を見たことがあるかもしれませんが、あれは人間が読みやすいように、本来のIPアドレスの表記を変換したものです。
IPアドレスの表記法の変換手順を以下で簡単に説明します。
ただし、自分で変換することはまずないので、こんなもんなんだなとイメージしてもらう程度で構いません。
IPアドレスは、以下のように32桁の2進数(0か1の数字)で表します。
11000000101010000000000000000001
これは、IPアドレスはもともとコンピューターが処理するための値だからです。
先ほどの32桁の数字の羅列だと人間にはわかりづらいので、いったん8桁ごとの4つに区切って見通しをよくしましょう。
区切り文字には、ドット(.)を使用します。
11000000.10101000.00000000.00000001
区切ったことで少しは読みやすくなりましたが、これでも分かりづらいですよね。
そこで、区切られた8桁の2進数をそれぞれ、我々が普段使っている10進数に変換してみましょう。
192.168.0.1
これで、最初の32桁の表記よりもだいぶスッキリしたと思います。
ちなみに、8桁の2進数は10進数では0〜255の範囲を表せるので、全IPアドレスは0.0.0.0〜255.255.255.255の間に含まれます。
これが、我々がよく見るIPアドレス、つまりネットワーク空間の住所です。
パブリックIPアドレス、プライベートIPアドレスとは
先ほど説明したIPアドレスには、パブリックIPアドレスとプライベートIPアドレスの2種類あります。
パブリックIPアドレスはグローバルIPアドレスとも呼ばれ、グローバル(世界中)で唯一のアドレスです。
IPアドレスはネットワーク上の住所なので、世界中で同じIPアドレスがあるとどちらに通信を届ければいいのか分からなくなっちゃいますよね。
だから、IPアドレスはグローバルで唯一(誰とも被らない)ようにする必要があるのです。
ただ一方で、限られた空間だけで通用すれば良い場合もあります。
例えば、「1年2組の田中くん」は日本中に何人もいるかもしれませんが、学校内で言えばそれだけで伝わりますよね。(田中くんが2人いるかもしれない可能性はとりあえず目をつむってください…)
これがプライベートIPアドレスで、限られた空間内でのやりとりだけを行うような場面で使われます。
ネットワーク部とホスト部とは
プライベートIPアドレスは限られた空間内で通用するアドレスのことでした。
プライベートIPアドレスは、パブリックIPアドレスとは異なり、「ネットワーク部」と「ホスト部」に分けられます。
ネットワーク部はプライベートIPアドレスの中でも所属するグループを表していて、ホスト部はそのグループの中で1つを特定する部分です。
先ほどの「1年2組の田中くん」の例であれば、「1年2組」と言う部分がネットワーク部にあたりす。
「1年2組」という情報はグループを表していて、そのグループには複数人が属していますよね。
そして「田中くん」と言う部分が、個人を特定するためのホスト部です。
IPアドレスの場合は、アドレスの数字の途中でネットワーク部とホスト部を分けます。
たとえば、2つ目のドットまで(2進数では前半の16桁)をネットワーク部、残り(2進数では後半の16桁)をホスト部とするといった感じです。
この場合、192.168.0.1と、192.168.1.2は、ネットワーク部が同じなので、同じグループに属します。
後半部分(16桁の2 進数)で表せる数字は約65,000個ありますので(理由は割愛)、このネットワーク部には約65,000個のホストが属することができます。
クラスの例だと、1年2組というグループ(ネットワーク)に、40人の学生(ホスト)が属している感じです。
プライベートIPアドレスのネットワーク部とホスト部をどこで分けるかは、ある程度任意に決めることができます。
例えば、最初の24桁をネットワーク部とすることも可能です(この場合、192.168.0.1と192.168.1.2は別のネットワーク部となります)。
CIDRとは
プライベートIPアドレスは、好きなところでネットワーク部とホスト部に区切って、IPアドレスのグループを作ることができると説明しました。
しかし、そうするとIPアドレスだけを見ても、どこまでがネットワーク部でどこからがホスト部かを判別することができません。
192.168.0.1は、192.168までがネットワーク部なのか?それとも192.168.0までがネットワーク部なのか?といった具合です。
そこで、CIDR(サイダー)と呼ばれる表記法を用います。
CIDRは、「192.168.0.0/16」のような書き方で、IPアドレスの後ろにスラッシュで区切って最初の何桁がネットワーク部を表すのかを記載する表記法です。
例えば、192.168.0.0/16であれば最初の16桁がネットワーク部で、192.168.0.0/24であれば最初の24桁がネットワーク部です。
CIDRは、このようにネットワーク部とホスト部の分かれ目を表現する方法ですが、転じてIPアドレスの範囲を表すこともできます。
例えば、192.168.0.0/24だと、このネットワークのプライベートIPアドレスは、192.168.0.0〜192.168.0.255の256個です。
このことから、192.168.0.0/24という表記で「192.168.0.0〜192.168.0.255の範囲」と捉えることにします。
AWSのVPCでは、このようにCIDR表記を用いてVPCやサブネットで使用できるプライベートIPアドレスの範囲を指定します。
VPCの目的
IPアドレスの説明が長くなりましたが、ここからはVPCの説明に戻りましょう。
VPCは、AWSでサーバレスではないサービスを使用するときのサーバー置き場として使います。
最初にVPCは自分専用の土地をイメージすると言いましたが、この土地の上にサーバーを置いていくイメージです。
同じVPC内部のサービス同士は互いに通信することができます。
同じ土地のなかの人とは内線で連絡が取れるような感じですね。
さらに、VPCは複数個作ることができます。
別々のVPCにあるサーバー同士はデフォルトの状態では通信ができません。
VPCピアリングという機能を使うことで、別のVPC同士で通信することが可能になりますが、本記事では詳しい説明は割愛します。
VPCの料金
VPCの利用料はなんと無料です!
VPCはAWSでサービスを構築していくための基盤になる部分なので、無料なのはありがたいですね。
ただし、NATゲートウェイなどのVPCのオプションサービスには有料のものもありますので、お気をつけください。
単純にVPCを作成するだけなら無料です。
デフォルトVPCとは
実は、VPCは自分で作らなくても、AWSアカウントを作成した時点でデフォルトのVPCが作成されています。
デフォルトのVPCはインターネットにも接続可能になっているため、このデフォルトのVPCにEC2というサーバーを作成するとすぐにインターネットとやりとりが可能なサーバーを構築することが可能です。
ネットワークの設定等がよく分からない方でも、とりあえずAWSを利用できるようになっている親切設計ですね。
しかし、インターネットと接続されているということは、同時にセキュリティ面では弱いことになります。
とりあえずAWSのサービスを触って動かしたい分には、デフォルトのVPCを利用しても問題ありません。
ただし、本番環境や仕事で使う場合などのセキュリティ面を考慮する必要がある場合は、構成の変更や新たなVPCの作成などが必要です。
VPCの関連サービス
VPCの目的や料金について説明しましたが、次はVPC関連のサービスを説明していきます。
VPC関連のサービス(VPCのコンソール画面で表示されているサービス)は他にもありますが、代表的な以下をピックアップしました。
- サブネット
- インターネットゲートウェイ
- NATゲートウェイ
- ルートテーブル
サブネットとは
実は、VPCを作るだけではまだサーバーなどを作成することはできません。
VPCの中に、サブネットというさらに小さなネットワークを作成する必要があります。
VPCはリージョンに作成されますが、サブネットはリージョンの中のアベイラビリティゾーンに作成するイメージです。
ちなみに、サブネットが分かれていようと同じVPC内であればサブネット同士で通信することができます。
パブリックサブネット、プライベートサブネットとは
サブネットには、パブリックサブネットとプライベートサブネットがあります。
プライベートサブネット内のサーバーは、同じVPC内でのみ通信が可能ですが、パブリックサブネットは外のネットワーク(インターネット)とも通信が可能です。
インターネットと通信できないプライベートサブネットなんて意味あるの?と思われたかもしれません。
実は、クラウドに限りませんが、サーバーなどの環境を構築する場合は、セキュリティ面への考慮が非常に重要です。
インターネットと通信できるということは、逆に言えば誰からでもアクセスができてしまう危険性があるということです。
世の中にいる悪いことを考えている人たちは、こういった誰とも通信できるようなサーバー等を狙って攻撃をしかけてきます。
その点、外からアクセスできないプライベートサブネットだと、セキュリティ面でも安心です。
では、インターネットにもアクセスしたいけど、プライベートサブネットのようなセキュリティに考慮した環境にしたい場合はどうしたらいいのでしょうか?
そのために、AWSではNAT(ナット)ゲートウェイというサービスがあります。
その前に、AWSでインターネットに接続できる仕組みであるインターネットゲートウェイについて軽く説明したいと思います。
インターネットゲートウェイ
パブリックサブネットはインターネットと通信ができますが、それはインターネットゲートウェイというVPCのサービスのおかげです。
パブリックサブネットの通信は、インターネットゲートウェイという門を通ることで、外の世界と通信ができるようになります。
一方で、プライベートサブネットはこの門を通ることができないため、インターネットと通信ができないのです。
NATゲートウェイ
パブリックサブネットは、インターネットゲートウェイを通してインターネットと通信することができることを説明しました。
一方で、プライベートサブネットがインターネットと通信するためには、NATゲートウェイというサービスを使う必要があります。
サブネットの説明でも書きましたが、サブネットが分かれていても同じVPC内部であればサブネット間での通信は可能です。
そこで、パブリックサブネットに、プライベートサブネットからの通信をインターネットゲートウェイへ中継してくれる機能を追加すれば、間接的ではありますがプライベートサブネットの通信をインターネットに繋げることができるようになります。
この「プライベートサブネットの通信をインターネットゲートウェイに中継する」のがNATゲートウェイです。
このNATゲートウェイの中継によって、プライベートサブネットもインターネットとやりとりが可能になります。
ここで、勘のいい方なら「プライベートサブネットもインターネットとやりとりできるなら、結局パブリックサブネットと同じじゃん!全然セキュリティ関係ないじゃん!」と思われる方もいらっしゃるかもしれません。
ただし、NATゲートウェイには、内部からの通信は外に出すが、外部からの通信は「内部からの通信の返信」しか受け付けないような仕組みがあるんです。
興味がある方は、NATやNAPTといったキーワードで調べてみるといいでしょう(NATゲートウェイの仕組みというより、一般的なANTやNAPTと呼ばれる仕組みの話です)。
これで、めでたくセキュリティ面での課題をクリアしつつ、インターネットと通信が可能なプライベートサブネットを構築することができました。
ちなみに、NATゲートウェイはいいこと尽くしのように見えますが、料金がけっこう高いことろが痛いポイントです。
そのため、実際にはコストとセキュリティ面での兼ね合いでどういう構成にするかを検討する必要があります。
ルートテーブル
ルートテーブルとは、VPC内の通信を振り分けるルールの一覧です。
VPCで発生する通信は、以下のような経路を辿ります。
- VPC内の他のリソース(EC2など)へ送信する
- インターネットゲートウェイへ送信する
- NATゲートウェイへ送信する
このように、「どんな通信を」「どこへ送信するか」を決めたものがルートテーブルです。
ルートテーブルに関しては、別の記事で詳しくまとめたのでぜひご覧ください。
セキュリティグループ
セキュリティグループとは、「誰からの」「どんな」通信なら受け入れるのかを決めたルールです。
EC2などのAWSリソースに対して通信が入ってきたときに、その通信は受け入れてもOK?NGか?を判定する門番をイメージするといいでしょう。
例えば、EC2をインターネットに公開している場合、世界中の誰もがあらゆる方法でそのEC2にアクセスすることができてしまいます。
このままだと、悪意のある誰かが、不正な方法でアクセスすることもできてしまいますよね。
そこで、セキュリティグループを使って、EC2が受け入れることができる通信に条件をつけることで、本来とは違う方法でアクセスされるのを防ぐことができます。
また、逆にEC2から「誰に対して」「どんな」通信が出ていくことがでいるのか?もセキュリティグループで管理されます。
これにより、外部に対して変な通信を送信してしまうことを防ぐことができます。
このように、セキュリティグループを正しく利用することで、AWSで構築したサービスのセキュリティを強化することができます。
セキュリティグループに関しては、以下の記事で詳しく解説しているのでご参照ください。
ネットワークACL
AWSで「どの通信を許可するか?」を定義するルールとして、セキュリティグループの他にネットワークACL(アクセスコントロールリスト)というものがあります。
ネットワークACLも、セキュリティグループと同じようにサブネット内の通信の許可ルールを定義することができます。
セキュリティグループとネットワークACLは似ているため混同してしまいがちですが、異なる点もあります。
セキュリティグループとネットワークACLの共通点と相違点を以下にまとめます。
共通点 | 相違点 |
---|---|
インバウンドルールとアウトバウンドルールがある ルールにプロトコルやポート番号、IPアドレスなどを指定する デフォルトのネットワークACLが作成される 追加料金なし | EC2などのリソースではなく、サブネット全体に適用する ルール番号を指定する 許可ルールに加え、拒否ルールも指定できる ステートレス |
ネットワークACLの概要や、セキュリティグループとの違いや使い分けは以下の記事で解説しているのでご参照ください。
まとめ
今回はVPCとVPCに関連するサービスを、いくつかイラストを使ってわかりやすく説明してみました。
以下、今回紹介したサービスの簡単なまとめです。
サービス | 内容 |
---|---|
VPC | AWSで作業するための自分専用の土地。EC2などのサーバーなどは、VPCを分割したサブネットに設置していく。 |
サブネット | VPCをさらに細かい区画に分離する。インターネットと通信できるパブリックサブネットと、インターネットと通信できないプライベートサブネットがある。 |
インターネットゲートウェイ | サブネットとインターネットを通信するための門(ゲート)。サブネットとインターネット間の通信は、このゲートを通じて行われる。 |
NATゲートウェイ | サブネットからインターネットへの通信のみができるようにするためのゲート。パブリックサブネット側に設置し、プライベートサブネットの通信をインターネットへ中継してくれる。 |
初学者の方に向けて説明のわかりやすさを重視したので、一部説明を省略したり、厳密には正確ではないような部分もあります。
ただし、初心者の方はまずはイメージをつけるところから始めましょう!
VPCのイメージがなんとなくできた!という方は、具体的にAWSの環境を触ってみることにチャレンジしてみてください!
なお、VPCに関しては侍テラコヤ
\侍テラコヤの無料プランは無期限だから今すぐ登録してもOK!/
メールアドレスだけで10秒で登録できちゃいます!
コメント