【AWS】パブリックサブネットとプライベートサブネットを持つVPCの構築

設定はなんとなくできるんだけど、VPCってなんだか難しい

AWSはネットワークの知識がなくても簡単に設定ができますが、理解して使うのと、理解しないのでは全く違うので、実際に自分でVPCを作って理解してみましょう。

AWSを利用するにあたって、VPCは避けられないサービスの1つだと思う。しかし、私の場合は独学で勉強した程度のインフラ・ネットワーク知識しかないので、頭で考えるとすぐに混乱する。そこで、自分の理解を整理するために、パブリックとプライベートのサブネットを持つVPCを実際に構築しながらVPCの理解を深めたいと思う。

AWS VPCを作成

AWS VPCとは

VPCってそもそも何なんでしょうか?

AWS VPC(Amazon Web Service Virtual Private Cloud)とは、ユーザー専用のプライベートなクラウド環境を提供するサービスになります。

AWS VPCは論理的に分割されたネットワークをもとにユーザー専用のプライベートクラウド環境を提供するサービスのことです。VPCでは主に以下のような設定ができます。

  • サブネットの設定
  • IP アドレス範囲の選択
  • ルートテーブルの設定
  • ネットワークゲートウェイの設定

AWS VPCを作成する

まず。VPCを作りたいと思います。この手順で作る構成イメージは以下のようなイメージになります。今回はすべて東京リージョンで構築しますので、リージョンの記載は省略させていただきます。

VPCを作成した構成図
VPC

VPCの画面から『VPCの作成』ボタンをクリックしてVPC作成画面にうつります。

VPCの作成

『名前タグ』、『IPv4 CIDR ブロック』、『IPv6 CIDR ブロック』、『テナンシー』を入力して『作成』ボタンをクリックします。『IPv4 CIDR ブロック』は以下の範囲で割当が可能で、/16〜/28のネットマスクCIDRブロックを入力します

  • 10.0.0.0 – 10.255.255.255 (10/8 プレフィックス)
  • 172.16.0.0 – 172.31.255.255 (172.16/12 プレフィックス)
  • 192.168.0.0 – 192.168.255.255 (192.168/16 プレフィックス)

『名前タグ』

区別しやすいVPCの名称を設定します。例えば、構築するシステム名などです。

『IPv4 CIDR ブロック』

割当可能なIPアドレスの範囲で/16〜/28のネットマスクCIDRブロックを設定します。CIDRブロックを設定する際に注意する点としては、既に使っているアドレスや、これから使う予定のあるアドレスは避けるほうがよいです。理由は、実際のシステムの場合は他システムとの間でプライベートIPで通信するなどの要件が出てくる可能性があるためです。また一度作成したアドレスブロックは変更ができない点も注意が必要です。

『IPv6 CIDR ブロック』

IPv6のIPv4よりもより大きい範囲のアドレスが必要な場合に設定することになるかと思いますが、よほど大きなシステム出ない限りにおいては、利用する機会はかなり低いかと思います。基本的にはIPv4 CIDR ブロックを利用するで大丈夫です。

『テナンシー』

ハードウェアを専有するかどうかを設定します。クラウドとはいえ、必ずどこかに物理ハードウェアが存在します。その物理ハードウェア上で様々なサービスが提供されるのですが、共有ハードウェアの場合は同一の場所に他のユーザーの資産も保存されることになります。専有するを選択するとそのシステム専用に物理ハードウェアが確保されます。ただしその分の料金が必要になります。コンプライアンスの問題など会社内の問題がない限りにおいては共有で問題ありません。

VPCの作成完了

上記の画面が表示されれば、VPCが作成されたことになります。

サブネットの作成

VPCができたので次はEC2でしょうか?

VPC上にそのままEC2を作成することはできません。次はサブネットを作りましょう。

サブネットは必ずいずれかのアベイラビリティゾーン(AZ)に属する必要があります。今回は以下の図の通り、1つのパブリックサブネットと1つのプライベートサブネットをそれぞれ別のAZに属する形で設定をしていと思います。

※このサブネット作成手順ではパブリック・プライベートの差は特にありません。そのため、同じ手順を2度繰り返して2つサブネットを作成してください。

サブネット作成の構成図

サブネットを作成する

サブネットの一覧

VPC ダッシュボードの画面で『サブネットの作成』をクリックします。

サブネットの作成

サブネット作成画面で、『名前タグ』、『VPC』、『アベイラビリティゾーン』、『IPv4 CIDR ブロック』を設定します。

『名前タグ』

区別しやすいサブネットの名称を設定することおすすめします。今回であれば、publicとprivateという記載があればわかりやすいかと思います。

『VPC』

サブネットを作成するVPCをリストから選択します。

『アベイラビリティゾーン』

AZは1つ以上のデータセンターで構成されています。リージョン内には複数のAZが存在ます。またAZは地理的・電源・ネットワーク的に離れています。またリージョン内のAZは高速の専用線でつながっているため、低レイテンシーを実現できます。今回、パブリックとプライベートのサブネットは別のAZを選択します。

『IPv4 CIDR ブロック』

VPCで決定したIPv4の範囲内でサブネット内の利用可能はIPの範囲を決定します。

サブネットの作成完了

上記の画面が表示されたら作成完了です。

インターネットゲートウェイの作成

次はインターネットの出入り口となるインターネットゲートウェイをVPCにアタッチしましょう

いよいよ外からつながるようにするんですね!

サブネットを作っただけでは、まだそのサブネット上のサービスは外部との接続ができません。そのため、インターネットの出入り口となるインターネットゲートウェイをVPCに設置したいと思います。完成図は以下のとおりです。

インターネットゲートウェイ作成の構成図
インターネットゲートウェイ

『インターネットゲートウェイの作成』ボタンをクリックしてインターネットゲートウェイを作成を開始します

インターネットゲートウェイの作成

『名前タグ』を入力し、『インターネットゲートウェイの作成』をクリックします

インターネットゲートウェイ(VPCにアタッチ)

作成したインターネットゲートウェイを選択し、『アクション』リストから『VPCにアタッチ』をクリックします

VPCにアタッチ

アタッチするVPCを選択し、『インターネットゲートウェイのアタッチ』をクリックし、VPCにインターネットゲートウェイをアタッチします

ルートテーブルの作成

VPCにアタッチしたのに、まだパブリックサブネットからインターネットに接続ができないようです。

そのとおりです。門ができただけで、パブリックサブネットからインターネットゲートウェイを通る道を用意していません。次はルートテーブルを作成してパブリックサブネットからインターネットに接続できるようにしましょう

インターネットゲートウェイを用意しただけでは入り口ができただけで、どのIPアドレス宛の通信をインターネットゲートウェイに向ければよいかがわからない状態です。そのためルートテーブルを設定して、パブリックサブネットからの通信においてはインターネットゲートウェイを通して外部と通信できるように設定をします。構成は下の図のようになります。

ルートテーブル作成の構成図
ルートテーブルの一覧

VPC ダッシュボードから『ルートテーブル』をクリックし、『ルートテーブルの作成』ボタンをクリックします

ルートテーブルの作成

『名前タグ』と『VPC』を設定し、『作成』をクリックします

ルートテーブルの作成完了

指定したVPCで使えるルートテーブルが作成されます(まだ、作っただけで、設定はしていない状態です)

ルートテーブル自体はVPCを作ったときにデフォルトで作成もされます。サブネット作成時はこのルートテーブルが自動で割り当てられます。ただし、今回のように複数のサブネットがあり、それぞれ通信ルートが異なる場合は、デフォルトのルートテーブルを使うのではなく、要件に応じたルートテーブルを作成し、適切なサブネットに割り当てるようにしましょう。

ルートテーブル作成時はVPC内の通信ルートしか登録されていません。次の手順では、ルートテーブルにインターネットゲートウェイへの通信設定をし、パブリックサブネットに適用したいと思います。

ルートテーブルの一覧(編集)

作成したルートテーブルを選択し、画面下部にある『ルート』タブを選択し、『ルートの編集』ボタンをクリックします

ルート編集

ルート編集画面で『ルートの追加』をクリックし、『送信先』、『ターゲット』を設定し、『ルートの保存』をクリックします

送信先

送信先には0.0.0.0/0のデフォルトルートを設定しておくと適用したサブネット内の全ての通信がインターネットゲートウェイに向くようになります。

ターゲット

AWS上の通信に関わるサービスのリストが表示されます。今回は『Internet Gateway』を選択すると自動的に利用可能なインターネットゲーウェイの一覧が表示されます。表示された一覧から作成したインターネットゲートウェイを選択して、向き先を決定します。

ルート編集完了

上記画面でルートテーブルのルートの編集は完了です。

これでルートテーブルの作成とルールの作成ができました。次は作ったルートテーブルをサブネットと関連付けて利用できるようにしたいと思います。

ルートテーブル(サブネット)

作成したルートテーブルを選択し、画面下部にある『サブネットの関連付け』タブを選択し、『サブネットの関連付けの編集』ボタンをクリックします

サブネットの関連付けの編集

サブネットの関連付けの編集画面でルートテーブルを適用したいサブネットを選択し、『保存』ボタンをクリックします。
※今回はパブリックサブネットの方を選択してください

EC2を作成する前に

いよいよ、EC2を作るんですがその前にパブリックIPを自動で割り当てられるようしておきましょう。

自作したサブネットの初期設定では、パブリックIPは自動割当は有効になっていません。そのため、そのままサブネット配下にEC2を作成しても自動的にパブリックIPは割り当てられません。事前に自動割当IP設定を有効化しておきます

EC2の一覧

パブリックサブネット側を選択し、画面下部の『説明』タブにある『パブリックIPv4アドレスの自動割り当て』が『いいえ』になっていることを確認します

EC2の一覧(自動IP割り当て)

『アクション』をクリックし、『自動割り当てIP設定の変更』をクリックします

自動割り当てIPの設定

『IPv4の自動割り当て』欄にチェックし、『保存』ボタンをクリックします

サブネットにEC2を作成

いよいよ、EC2インスタンスを、パブリックサブネット、プライベートサブネットに作成していきます

続いてパブリックサブネット、プライベートサブネットにEC2インスタンスを作成していきたいと思います。EC2の作成方法は概ね同じ手順になるため、違いは説明の中で解説したいと思います。構成イメージは以下のとおりです。

EC2の作成の構成図
EC2一覧

『インスタンス』をクリックし、『インスタンスの追加』ボタンをクリックします

AMI

起動するマシンイメージを選択します。今回は無料枠のAmazon Linuxを選択します

インスタンスタイプの設定

次にインスタンスタイプを選択します。今回はここでも無料枠のインスタンスタイプを選択して『次のステップ』をクリックします。

インスタンスの詳細設定

!パブリックサブネットとプライベートサブネットで違いあり!
インスタンスの詳細画面の設定画面の設定をします。設定内容はデフォルトのままで良いですが、ネットワークとサブネットは、作成したパブリックサブネット、もしくはプライベートサブネットを設定します

ストレージの追加

ストレージの追加画面でストレージを設定します。EBSボリュームの選択については、以下の記事を参照してください。

タグの追加

作成するインスタンスにタグを設定します。『タグの追加』をクリックし、『キー』と『値』を設定し、『次のステップ:セキュリティグループの設定』をクリックします。

セキュリティグループの追加

!パブリックサブネットとプライベートサブネットで違いあり!
セキュリティグループの設定を行います。後ほどセキュリティグループの設定をします。今回はパブリックとプライベートそれぞれのセキュリティグループ新しく作っておきます

『新しいセキュリティグループを作成する』を選択肢、セキュリティグループ名を入力し、『確認と作成』ボタンをクリックします。

インスタンス作成の確認

インスタンス作成の画面で設定内容を確認し、『起動』をクリックし、インスタンスを作成します

SSHでパブリックサブネットのEC2に接続確認

やっとEC2作成まできました。

一旦、今の時点で接続できるかを確認しておきましょう

以下のコマンドを使ってSSHへの接続確認をします

ssh -i 保存した秘密鍵の場所 ec2-user@作成したEC2のパブリックIP

パブリックサブネット配下のEC2に接続ができたことが確認できればOKです。そして、プライベートサブネットに接続できなければ、OKです。次はパブリックサブネットのEC2からプライベートサブネットのEC2へ接続できるようにしたいと思います。

Macを使っている人の場合は以下のワーニングが表示され接続できないかもしれません。その場合は、秘密鍵の権限を以下のコマンドで変更してください。

chmod 400 保存した秘密鍵の場所

WARNING:UNPROTECTED PRIVATE KEY FILE!

セキュリティグループの編集

プライベートサブネットはインターネット(外部)とつながっていないから、ローカルPCから接続できないんですね!

そのとおり。じゃあ、次はプライベートサブネットへの接続ができるように設定していきましょう。

セキュリティグループとはファイヤーウォールのようなものです。ここではプライベートサブネット上のEC2に対して許可する要求(インバウンド)を設定します。構成イメージは以下のようなになります。

セキュリティグループ修正後の構成図
セキュリティグループの一覧

セキュリティグループ画面を表示し、プライベートサブネット用のセキュリティグループを選択します。画面下部の『インバウンドルール』タブをクリックし、『インバウンドルールを編集』ボタンをクリックします

インバウンドルールの編集

インバウンドルールの編集画面からルール設定を行います。今回はパブリックサブネット上のネットワークからのSSH接続とpingが通るようにしたいと思います。『タイプ』は『SSH』と『すべてのICMP-IPV4』を選択します。『ソース』のところでIPを『パブリックサブネット』のIPを設定し、『ルールの保存』をクリックして完了です。

パブリックサブネットEC2にプライベートサブネットEC2の秘密鍵を配置する

セキュリティグループでパブリックサブネットからのSSHを許可したので、あとは接続をするための準備です

プライベートサブネットにEC2インスタンスを作成した際にキーペアをダウンロードしていると思いますので、そちらを使います。

まずはパブリックサブネット上のEC2に以下のコマンドで接続します。


ssh -i 保存した秘密鍵の場所 ec2-user@作成したEC2のパブリックIP

パブリックインスタンスにSSH接続

続いて以下のコマンドで秘密鍵を作成します。(viコマンドの説明は割愛します。)

vi 秘密鍵の名前.pem

プライベートサブネット配下のEC2を作成した際にダウンロードした秘密鍵をローカルPCのエディタで開きその内容をコピーし、パブリックサブネットEC2上に先程作成した、秘密鍵に貼り付け保存します。

秘密鍵の作成

最後に秘密鍵にに対して以下のコマンドを実行して権限変更を行います。400といのは所有者に読み込み権限のみを与えるものです。

chmod 400 秘密鍵.pem

秘密鍵の権限編集

プライベートサブネットのEC2接続する

最後に接続確認をします

以下のコマンドをパブリックサブネット上のEC2で実行し、プライベートサブネット上のEC2への接続を試みます。

ssh -i 保存した秘密鍵の場所 ec2-user@作成したEC2のプライベトートIP

プライベートEC2にSSH接続

上記のように接続ができれば、完了です。

まとめ

今回はVPCを作り、その配下にパブリックサブネットとプライベートサブネットを作成しました。構成イメージを書きながら手順を進めていくことで、環境がどういう状態なのかを視覚的にわかりやすくしたつもりです。EC2やセキュリティグループ周りについては省略している部分も多いので今後の記事の中でもう少しEC2やセキュリティグループといったところも記事にしていきたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です