【AWS入門③】VPCの構築~基礎知識を詰め込もう~
はじめに
Webサービスに関するインフラの知識不足の解消&クラウドサービスの世界シェア1位であるAWSの学習のため、YouTubeでAWSの学習動画やエンジニアに関する情報を提供している「くろかわこうへい」さんが開催する AWS CloudTech に参加しました。
学習を進める上で習得した技術情報を記載します。
気になる方は以下を参照してください。
-
YouTubeチャンネル
くろかわこうへい【渋谷で働いてたクラウドエンジニアTV】 -
AWS学習サイト
AWS CloudTech -
AWS学習サイト紹介動画
- Twitter
くろかわこうへい@渋谷で働いてたクラウドエンジニア
注意点
基本的にAWSに関する内容を記載していきます。
ネットワークの基礎的な用語や少し専門的な用語は説明することもあるかもしれませんが、自分が必要と思った際にのみ記載します。
※気になったら調べてみましょう!
VPCの操作
VPCとは
VPC(Virtual Private Cloud)
AWSアカウントに紐づけて作成・管理することができる仮想ネットワークのことです。
※EC2などのAWS オブジェクトによって使用される AWS クラウドの領域のこと
また、その仮想ネットワークのセキュリティルールの設定などもサービスに含まれます。
以下の図のようにAWSアカウントが保有する領域にVPCという空間を作るイメージ
※AWSアカウントを作成すると、デフォルトVPCという領域が作られています。
この領域はリージョン(地域)ごとに作られます。
例えばVPCを作成する際に「東京」を選択していれば「東京」のリージョン用VPCが作成されます。
↑この画像内の 「東京 2」 と数値が記載されているのがリージョン内に作成されているVPCの数です。 |
※デフォルトVPCを含みます |
右上の「東京」を「ソウル」に変更してみましょう。
↑ 「東京 2」 が 「ソウル 1」 に変わりました。 |
これは「ソウル」リージョン内にVPCが1つ作成されていることを意味します。 |
VPCはリージョン毎に作成、管理することになるので注意してください。
※ちなみにリージョンはデータセンターが設置されている地域になるので、
どのリージョンを選択するかは距離とAZ(アヴェイラビリティゾーン)の数の話になります。
日本のユーザーがメインで使用するWebサービスを構築するのであれば、
「東京」リージョンを選択するのが無難ですね。
このVPCに対して
- Subnet(サブネット)
- Route table(ルートテーブル)
- NAT gateway(ナットゲートウェイ)
- etc ..
などを作成し、環境を整えていきます。
以下は一例
Subnet(サブネット) に関しては以下で解説します。
※他のサービスに関しても後々解説していきます。
様々なVPCの形態
複数のサービスを保有する際にシステムの種類や用途によってVPCを分けます。
どの方法が良いなど一概には言えませんが、会社やプロジェクトによって運用方法は様々になります。
マルチVPC
1つのアカウントで複数のVPCを管理する方法です。
環境でVPCを分ける
システムでVPCを分ける
環境&システムでVPCを分ける
マルチアカウントVPC
AWSのサービスAWS Organizations でルートユーザーの配下に子アカウントを作成し、それぞれのアカウントにVPCを作成します。
子アカウントに分けることで権限の管理がしやすくなるメリットがあります。
会社内でチームが明確に分かれている場合は、この管理方法が適していることが多いです。
Subnet(サブネット)とは
VPCという大きな1つのネットワークを2つ以上のネットワークに分割したものを
Subnet(サブネット) と言います。
セキュリティレベルを向上させたり、パフォーマンスの向上を目的としています。
IPアドレスの分割
まずVPCで大きくIPアドレスの範囲を設定します。
VPC
- IPアドレス:10.0.0.0
- サブネットマスク:22
- IPアドレス:「10.0.0.1」~「10.0.3.254」
この設定ではVPC内で1024個のIPアドレスが使えます。
※ホストアドレスとしては1022個
サブネットマスクの計算はこちらを参照
この1024個のIPアドレスを256個のIPアドレスを使える4つのサブネットに分けます。
プライベートサブネット1
- IPアドレス:10.0.0.0
- サブネットマスク:24
- IPアドレス:「10.0.0.1」~「10.0.0.254」
プライベートサブネット2
- IPアドレス:10.0.1.0
- サブネットマスク:24
- IPアドレス:「10.0.1.1」~「10.0.1.254」
パブリックサブネット1
- IPアドレス:10.0.2.0
- サブネットマスク:24
- IPアドレス:「10.0.2.1」~「10.0.2.254」
パブリックサブネット2
- IPアドレス:10.0.3.0
- サブネットマスク:24
- IPアドレス:「10.0.3.1」~「10.0.3.254」
このような形でVPCをサブネットに分割し、各サブネットへの通信を制御したりすることでセキュリティを担保することができます。
AWS内には複数のサブネットを作成しなければ使えないサービスもあります。
プライベートサブネットとパブリックサブネット
プライベートサブネットとパブリックサブネットの違いはインターネット接続ができるかどうかです。
アヴェイラビリティゾーン(AZ)の選択
VPCはリージョン毎に作成、管理されると記載しましたが、
サブネットはリージョン内のアヴェイラビリティゾーン(AZ)に作成されます。
東京だとこのようになります。
「東京」リージョンにVPCを作成した場合、東京に属するAZを使用してサブネットを作成します。
アヴェイラビリティゾーン(AZ)を選択した例としてはこのようになります。
1aと1c内にそれぞれプライベートサブネットとパブリックを配置しています。
Route table(ルートテーブル)とは
サブネットの外へ出る通信をどこに向けて発信するかルール・定義を行うことができます。
ルートテーブルはVPC内に作成され、サブネットに関連付けることで使用することができます。
これをルートと呼びます。
ルートテーブルに定義された内容は明確なルールから優先的に提供されます。
明確なルールとは以下で示す①のようにIPアドレスの範囲になります。
-
Public subnet 1からのlocalへの通信
localはVPC内の全てのリソースを指します。例えばIPアドレス「10.0.1.5」へ通信を行うとした場合、このルールの適用範囲内なのでVPC内へ通信を行います。 -
Public subnet 1からのInternetへの通信
VPC以外への通信はすべてインターネットへ通信を行うことを指します。例えばIPアドレス「11.1.2.5」へ通信を行うとした場合、VPC内でなくインターネットへ接続を行います。
※Internet Gatewayに関しては後程記述します。 -
Private subnet 1からのlocalへの通信
Public subnet 1と同じようにVPC内の全てのリソースを指します。 -
Private subnet 1からのNAT Gatewayへの通信
Public subnet 1と同じようにVPC以外への通信はすべてインターネットへ通信を行うよう制御を行います。ただし、Private subnetなのでこのサブネットはインターネットに接続ではいけません。そのため、NAT Gatewayを経由してインターネット接続を可能とします。
※NAT Gatewayに関しては後程記述します。
上記を構成図にすると以下のようになります。
Internet Gateway
VPCにアタッチすることでVPC内のAWSリソースとインターネットを接続してくれます。
サブネットのルートテーブルにてInternet Gatewayを指定することで、そのサブネットとインターネットを繋いでくれます。
図のように作成するだけでなく、VPCにアタッチして初めて使用できます。
NAT Gateway
VPC内のパブリックサブネットに設置し、プライベートサブネットがそのNAT Gatewayを経由することでインターネットへの接続を可能とします。
ただし、Internet Gatewayとの違いはアウトバウンドは許可するがインバウンドは許可しない点です。
アウトバウンド
中から外に向けて通信(送信)のことです。プライベートサブネットからインターネットへ何か通信を行うことを指します。
インバウンド
外から中に向けて通信(受信)のことです。インターネットからプライベートサブネットへ何か通信を行うことを指します。
イメージとしてはこのようなことですね。
ENI(Elastic Network Interface)
AWS上のネットワークインターフェースのことです。
物理的なPCを分解したことのある人、またはパーツから組み立てたことのある人は見たことがあるかもしれませんが以下のようなLANに接続するためのカード型の拡張装置のAWS版と考えた方がイメージしやすいかもしれません。
ENIはVPC内の仮想ネットワークインターフェースであり、VPC内に作成したEC2インスタンスにアタッチされIPアドレスが付与されます。
物理的なサーバにNICを複数挿すことと同じように、インスタンスに複数のENIをアタッチすることで以下が可能となりました。
- IPアドレスを複数持たせたる
- 異なるセグメント間で1台のサーバーを動作させる
EC2インスタンスを作成すると「詳細」タブに以下のような情報が表示されます。
-
パブリックIPアドレス
インターネットと接続するためのIPアドレス。AWSが管理するIPアドレスプール(一時的な利用のためのIPアドレスの集合・範囲)からEC2インスタンスへ割り当てられます。
一時的なIPアドレスのため、インスタンスを停止→起動させるたびに変わってしまいます。 -
Elastic IPアドレス
インターネットと接続するためのIPアドレスだが、パブリックIPアドレスと違って固定のIPアドレスとなります。インスタンスを停止→起動させても同じIPアドレスとなります。
このIPアドレスはインスタンスにアタッチすることで使用できます。アタッチしない状態だと課金の対象になるので注意してください。
また、他のインスタンスへアタッチし直すことも可能になります。 -
プライベートIPアドレス
インスタンスを作成した際に、VPCかつサブネットで指定したIPアドレス範囲内のIPアドレスが設定されます。この場合、10.0.0.0/24で指定された「10.0.0.1」~「10.0.0.254」のどれかが振られます。
Security group(セキュリティグループ)
EC2インスタンスへのIPやポートでのアクセスを制御することができるAWSの仮想ファイヤーウォール機能のことです。
インバウンドとアウトバウンドの許可ルールをそれぞれ指定できます。
- インバウンドルール
- アウトバウンドルール
参考書やネット上の解説ではEC2インスタンス単位でセキュリティグループを設定していることが多いですが、本来はEC2にアタッチされたENI単位で設定されます。
Network ACL
Security groupと違い、サブネット単位で設定する仮想ファイヤーウォール機能のことです。サブネットは1つのみNetwork ACLの設定ができます。
セキュリティグループと同様にインバウンドとアウトバウンドの許可ルールをそれぞれ指定できます。
- インバウンドルール
- アウトバウンドルール
サブネットを作成した際にデフォルトで付与されるNetwork ACLは全ての許可がAllow(許可)の状態になっています。
しかし、新規で作成したNetwork ACLはすべての通信がDeny(拒否)の状態になっていますのでご注意ください。
Security groupとNetwork ACLの違い
大きな違いとしてはステートフル・インスペクション型(Security group) とステートレス・インスペクション型(Network ACL) であることです。
イメージとしては以下の構成図を参照
ステートレス・インスペクション型
-
内部から発信されるトラフィック
アウトバウンドルールにて許可された場合、ポートが開放されます。 -
内部から発信されるトラフィックの戻り
インバウンドルールにて許可された場合、ポートが開放されます。ステートフル・インスペクションとの大きく違い、アウトバウンドルールでの許可のみではポートが開放されないことになります。 -
外部から受信するトラフィック
インバウンドルールにて許可された場合、ポートが開放されます。
ステートフル・インスペクション型
-
内部から発信されるトラフィック
アウトバウンドルールにて許可された場合、ポートが開放されます。 -
内部から発信されるトラフィックの戻り
②でアウトバウンドルールにて許可されていれば、戻りのトラフィックは管理の対象になりません。 -
外部から受信するトラフィック
インバウンドルールにて許可された場合、ポートが開放されます。
まとめ
結構な量の文字数になってしまいました。
VPCの基礎とは一言で言っても知っておかなければいけない内容は多くあります。
※まだまだ知らなければいけない事は多いはず…
ネットワークの基礎的な知識がなければイメージのしにくい内容だったと思います。私も記事を書くことで改めてネットワークに関する知見を深められ、AWSの新しい知識を吸収出来て良かったと思います。
何かしらアプリケーションをクラウドで動かすのがAWSを使用する目的かと思いますが、ネットワークの基礎としてVPCから学ぶことはとてもおすすめです。
次回以降はEC2を使っての実際に仮想サーバを構築する方法に関して記載します。
前回の記事
【AWS入門②】IAMユーザーと仮想 MFA デバイスの設定
次回の記事
[【AWS入門④】EC2の構築における基礎の基礎]
(https://zenn.dev/rsk_for_dev/articles/21755bf37e501f)
Discussion