📘

AWS VPCの概要を理解

2022/10/30に公開

本日行ったのはこちらのハンズオンです。

Network編#1 AWS上にセキュアなプライベートネットワーク空間を作成する

このハンズオンは最終的にはこのような構成図のネットワークを構築しました。

Amazon VPC(Virtual Private Cloud)とは

プライベートネットワーク空間を作れるサービス。
さらにvpcのなかに「subnet」と呼ばれるより詳細なネットワーク区分を作れる。

このハンズオンでは大きく3パートに分かれている。

  1. ブラウザからパブリックサブネット内のec2にアクセスするまで
  2. プライベートサブネット内のec2からインターネットにアクセスするまで
  3. インターネットゲートウェイを経由せずにvpc外のサービスに接続するまで

ブラウザからパブリックサブネット内のec2にアクセスするまで

構築手順は以下になる
1. vpcを作成
2. subnetを4つ作成
3. internet gateway(igw)を作成
4. route tableを作成
5. IAM Roleを作成
6. ec2(web)を作成

vpcを作成

Tokyoリージョンにプライベートip addressは10.0.0.0/16で作成する

subnetを4つ作成

Tokyoリージョン内にAZ(アベイラビリティーゾーン)は3種類ある。今回は1aと1cを使う。
1つ目: 10.0.1.0/24 (1a)
2つ目: 10.0.2.0/24 (1c)
3つ目: 10.0.11.0/24 (1a)
4つ目: 10.0.12.0/24 (1c)

internet gatewayを作成

internet gatewayはインターネットからvpc内の(その逆も)サービスへのアクセスの受け口にあたる。そのため作成したらvpcにアタッチする。
※以下internet gatewayはigwとする

参考にさせていただいたブログ
【図解/AWS】インターネットGWとNAT-GWの違い〜各メリット、パブリックサブネットとは〜

route tableを作成

実はvpcを作成したときに自動でルートテーブルが一つ作成されている。
また、VPCの各subnetは必ず一つのルートテーブルが関連づけされている
自動で作成されたルートテーブルとは別にインターネットに接続させる用のルートテーブルを新規で作成する。
ルートテーブルを作成した状態だと以下のようなルート情報となっている。

行き先 ターゲット
10.0.0.0/16 local

この状態ではインターネットにアクセスすることができない。
ルートテーブルのルート情報にinternet gatewayをエントリさせる必要がある。

行き先 ターゲット
10.0.0.0/16 local
0.0.0.0/0 igw

igwがデフォルトゲートウェイ(0.0.0.0/0)を向くようになった。このルートテーブルを10.0.1.0/24と10.0.2.0/24のサブネットにアタッチする。この結果サブネットは以下のような状態になる。

subnet route table
10.0.1.0/24(1a) new
10.0.2.0/24(1c) new
10.0.11.0/24(1a) default
10.0.12.0/24(1c) default

IAM Roleを作成

このハンズオンではec2からSSM(Systems Manager)というサービスを使います。
IAM Roleを新規作成します。対象サービスはec2でAmazonSSMFullAccessというポリシーをRoleに紐付けます。

ec2(web)を作成

デフォルトの設定からの変更点は以下の点です。

  • パブリックIPを有効化します。
  • サブネットは10.0.1.0/24(パブリックサブネット1a)に作ります。
  • セキュリティグループはインバウンドルールにhttpを追加します。
  • 先ほど作成したIAM Roleをec2にアタッチします。
  • セッションマネージャーで接続するためkey pairは不要
  • ec2インスタンス起動時のスクリプトに以下を添付します。
#!/bin/bash

yum -y update
yum -y install httpd
systemctl enable httpd.service
systemctl start httpd.service

この状態でec2を作成します。
ec2が立ち上がったらセッションマネージャーを使ってec2に接続します。

確認1

ブラウザベースのシェルが立ち上がったらコマンドが反応するか見ましょう。

確認2

ブラウザにec2のパブリックIPを打ち込みApacheのwelcomeページが開くか確認しましょう。

これでec2からインターネットにアクセスすることができました。動作検証が出来ましたら前半のハンズオンは終了です。

プライベートサブネット内のec2からインターネットにアクセスするまで

現状のままプライベートサブネット内にec2を作ってもec2からインターネットにアクセスすることもされることもできません。この状態ですとyumコマンドが通りません。
このセクションではプライベートサブネット内のec2インスタンスで以下の状態を作ります。

ec2→インターネット: ○
インターネット→ec2: ×

構築手順は以下になる

  1. nat gatewayを作成
  2. ec2(internal)を作成

nat gatewayを作成

NAT(プライベート IPアドレスをグローバルIPアドレスに変換する)機能を有するサービスです。
nat gatewayは10.0.2.0/24のパブリックサブネット内に作成し、プライベートサブネット内のec2のプライベートIPをパブリックIPアドレスに変換することで一方的にインターネットにアクセスします。
作成したらプライベートサブネットのルートテーブルにルート情報を追加します。

行き先 ターゲット
10.0.0.0/16 local
0.0.0.0/0 nat gateway

ec2(internal)を作成

デフォルトの設定からの変更点は以下の点です。

  • サブネットは10.0.12.0/24(プライベートサブネット1c)に作ります。
  • 先ほど作成したIAM Roleをec2にアタッチします。
  • セッションマネージャーで接続するためkey pairは不要

この状態でec2を作成します。
ec2が立ち上がったらセッションマネージャーを使ってec2に接続します。

確認1

ブラウザベースのシェルが立ち上がったらコマンドが反応するか見ましょう。

インターネットゲートウェイを経由せずにvpc外のサービスに接続するまで

これまでのハンズオンではVPC内のサービスからインターネットにアクセスするには必ずigwを経由する必要がありました。
しかし世の中にはセキュリティの厳重な基幹系や金融系システムがあります。そこではインターネットとvpc間の接点にigwではなくお客様独自のデータセンターを経由するケースがあり、igwを作成できない要件が多くあります。
このような状況でs3等のawsサービスとやり取りするにはどうすれば良いでしょうか。

VPC Endpoints

VPC Endpointsを使うとvpc内のサービスとvpcの外のサービスを直接通信が可能になります。
その手段としてInterface型とgateway型の2つあります。

Interface型はs3やcloudwatch, ssmなど多くのサービスと接続ができます。

(gateway型)[https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpce-gateway.html]は現時点(2022/10/30)でS3やdynamodbサービスに限られています。追加料金は発生しません。

interface型を使い、ec2とssmを接続する大まかな流れ

  1. プライベートサブネットのルートテーブルのルート情報からnat gatewayを削除する
  2. vpcのdns名を有効化する
  3. セキュリティーグループを作る
  4. interface型のvpc endpointsを3つ作る

3のsecurity groupは
インバウンドルールにhttpsを追加し、ソースをカスタムの10.0.0.0/16に設定する

4のvpc endpointsは以下の通り

サービス subnet security group
ssm 10.0.2.0/24(public subnet 1c) 3のsecurity gorup
ssmmessages 10.0.2.0/24(public subnet 1c) 3のsecurity gorup
ec2messages 10.0.2.0/24(public subnet 1c) 3のsecurity gorup

この状態でinternalのec2でセッションマネージャーを使って接続します。

確認1

ブラウザベースのシェルが立ち上がったらコマンドが反応するか見ましょう。

gateway型を使い、ec2からs3のバケット一覧を表示する大まかな流れ

  1. s3バケットを作成する
  2. IAM Roleにs3readonlyaccessポリシーをアタッチする
  3. gateway型のvpc endpointsを1つ作る

3のvpc endpointsは以下の通り

サービス タイプ route table
s3 gateway型 両方

パブリック, プライベートの両ルートテーブルのルート情報にs3の行が追加されました。

行き先 ターゲット
10.0.0.0/16 local
s3 vpce-xxxx

この状態でinternalのec2でセッションマネージャーを使って接続します。

確認1

ブラウザベースのシェルが立ち上がったらaws s3 ls --region ap-northeast-1コマンドを打ちます。

s3のバケット一覧が表示されたらこのハンズオン終了です。

料金

  • nat gateway(Elastic IP Addressも)
  • internet型のvpcエンドポイント

この二つのサービスは無料利用枠アカウントでも課金対象なのでハンズオンが終わったら早めに削除しておくことをお勧めします。

Discussion