AWS VPCの概要を理解
本日行ったのはこちらのハンズオンです。
Network編#1 AWS上にセキュアなプライベートネットワーク空間を作成する
このハンズオンは最終的にはこのような構成図のネットワークを構築しました。
Amazon VPC(Virtual Private Cloud)とは
プライベートネットワーク空間を作れるサービス。
さらにvpcのなかに「subnet」と呼ばれるより詳細なネットワーク区分を作れる。
このハンズオンでは大きく3パートに分かれている。
- ブラウザからパブリックサブネット内のec2にアクセスするまで
- プライベートサブネット内のec2からインターネットにアクセスするまで
- インターネットゲートウェイを経由せずに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: ×
構築手順は以下になる
- nat gatewayを作成
- 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を接続する大まかな流れ
- プライベートサブネットのルートテーブルのルート情報からnat gatewayを削除する
- vpcのdns名を有効化する
- セキュリティーグループを作る
- 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のバケット一覧を表示する大まかな流れ
- s3バケットを作成する
- IAM Roleにs3readonlyaccessポリシーをアタッチする
- 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