AWS再入門2022 Amazon VPC編
こんにちは、コカコーラが大好きなカジです。
当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2022』の 1日目のエントリです。
このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2022年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
では、さっそくいってみましょう。1日目のテーマはVPCです。
色々な機能がありますので、おさらいしていきます。オンプレミスの経験者目線でわかりやすく書いたつもりです。1つでも知らない機能があり、学びにつながれば幸いです。 構築方法は弊社の他のブログなどで紹介されておりますので参考リンクからご参照ください。
Amazon VPCとは?
基本機能
クラウドに仮想ネットワークを構築
Amazon VPC(Virtual Private Cloud)は、その名の通りユーザー専用のプライベートなクラウド環境を提供するサービスです。
VPCは、1つのTCP/IPネットワーク全体をサービス名と同じVPCという単位で管理します。VPCはAWSリージョンごとに作成し、VPC間は他のサービスを利用しない限り独立しておりVPC同士の通信はできません。VPC内のホストは既定で制限なく通信することができ、後述するゲートウェイを経由しインターネットなどの外部ネットワークやAWSサービス通信できます。
VPCに対応するAWSサービスはプライベートネットワーク内にノードが配置できるため外部ネットワークとのセキュリティ設計がしやすい一方、アドレス設計時にノードが使用するアドレス数のカウント・確保をしておく必要がありますので注意しましょう。
VPC構築に必要なネットワーク設計
データセンターやオンプレミス、オフィス拠点のネットワークアドレスと重複しないIPアドレスで構築します。理由は以下となります。
- VPCのCIDR(IPアドレス)は後から変更不可。
- 変更にはVPC上に構築されたものを削除し再構築が必要
- 接続要件が無くても、数年後の要件変更に備える
プライベートネットワークアドレスはRFC1918から選定し、個人的な推奨は1つのVPCに、/16を割り当てます。
- 10.0.0.0-10.255.255.255 (10/8 prefix)
- 172.16.0.0-172.31.255.255 (172.16/12 prefix)
- 192.168.0.0-192.168.255.255 (192.168/16 prefix)
重複する場合は、RFC 6598(100.64.0.0/10)のShared Addresの使用も検討しましょう。
Amazon VPC IPアドレス設計やネットワークの設計については以下のブログを参照ください。二つ目のブログにスライドにVPCの構築方法も記載しております。
また、IPv4/IPv6のデュアルスタックでネットワークを構築可能です。IPv6は自動適用ではなく任意です。一部非対応のものあるので気をつけて設計しましょう。
IPv4 | IPv6 | |
---|---|---|
VPCでの利用 | デフォルト利用 | 自動適用ではなく任意 |
CIDRブロックサイズ | 16-28bitで選択 | 56bit固定 |
サブネットブロックサイズ | 16-28bitで選択 | 64bit固定 |
パブリックIP/プライベートIP | それぞれ存在(プライベートIPはNATを介してパブリックIPを利用し通信) | パブリックのみ(プライベートにするにはEgress-only Internet Gateway利用) |
インスタンスタイプ | すべてのインスタンスタイプが利用可能 | 現行世代と一部の旧世代(C3/R3/I2)でサポート |
利用可能なVPCリソース | CGW/VGW/NAT/VPC Endpointが利用可能 | CGW/VGW/NAT/VPC Endpointが利用不可 |
参考元 VPC の IP アドレス指定 - Amazon Virtual Private Cloud
VPC Subnet(サブネット)
VPC内を分割する単位としてサブネットを設定し、EC2の仮想マシン(EC2インスタンス)やRDSのDBインスタンスをサブネットに接続して利用します。 VPCのアドレス帯域内を自由に分割できますが、AWSのデータセンター群にあたるAZ(アベイラビリティゾーン)に紐づけなければならず、AZを複数またぐサブネットは作成できません。リージョン内の複数のAZを利用するVPCを構築するためには、AZごとに最低1つのサブネットを作成する必要があります。
サブネットに接続するインスタンスには、DHCPによってサブネットのアドレス帯域内からプライベートIPが割り当てられます。サブネット内はTCP/IPネットワークの同一セグメントとなり、インスタンス同士はプライベートIPを利用してレイヤー2で通信します。サブネットの2番目のIPアドレス(192.168.1.0/24であれば192.168.1.1)には、暗黙の”仮想ルーター”と呼ばれる装置が自動で接続され、DHCPによって各インスタンスのデフォルトゲートウェイに設定されます。暗黙の”仮想ルーター”は、既定でVPC内の他のサブネットへの経路情報を持ち、サブネット間はL3レベルで暗黙の”仮想ルーター”経由で通信します。
オンプレミスでIP固定で利用してきた人にとってはDHCPは管理しにくいと思うかもしれませんが、VPCでは別サービスでプライベートDNSが簡単に利用できるのでDHCPでの利用がオススメです。
ルートテーブル
ルートテーブルは、前述の暗黙の”仮想ルーター”の経路情報(ルーティング)設定として、サブネットごとに設定します。複数のサブネットを1つのルートテーブルで設定も可能です。暗黙の”仮想ルーター”同士のVPC内経路情報は”Local”というエントリーとして設定済みで、変更することはできません。インターネットなど外部ネットワークと通信する場合に、インターネットゲートウェイ(IGW)をネクストホップとして経路情報に追加します。
外部ネットワークとの通信に利用するゲートウェイは、インターネットと接続するためのインターネットゲートウェイ(IGW)とオンプレミスのネットワークと接続するための仮想プライベートゲートウェイ(VGW)を作成、構成します。IGWを経由するEC2インスタンスとインターネット間の通信のために、VPCではインスタンスごとにパブリックIPを付与します。パブリックIPはEC2インスタンスのNIC(VPCではENI=Elastic Network Interfaceと呼びます)に直接設定するのではなく、IGWでStatic NATを構成し、インターネットからのトラフィック受信時に宛先IPアドレスであるパブリックIPをインスタンスのプライベートIPに変換することで動作します。
その他の代表的なVPCの構成リソース
上記のものも含めた一覧となります。他にもありますが、よく利用するものを抜粋します。
要素 | 概要 |
---|---|
インターネットゲートウェイ(IGW) | VPCに設置されたインターネットとの出入口 |
バーチャルプライベートゲートウェイ(VGW) | VPCに設置され、VPNまたは専用線などを経由してオンプレミス環境や社内ネットワークと通信するための出入口 |
ルートテーブル | 上記で詳細説明したVPC内の各サブネットに対して、経路情報を設定するための機能 |
サブネット | 上記で説明した、サブネットはVPCにおいてIPアドレスの範囲で分離されたネットワーク空間であり、ここにEC2などのAWSリソースを配置。 VPCは複数AZをまたいで作成することができますが、サブネットは単一AZ内に作成。 |
NAT Gateway/NAT インスタンス | プライベートサブネットに配置したサーバ群が、インターネットとの通信を安全に行うためのアドレス変換とポートアドレス変換を行う。マネージドサービスであるNATゲートウェイの方が可用性と帯域幅が優れている。 |
Elastic IP | AWSアカウントごとに割り当てられる固定のグローバルIPアドレス。EC2インスタンスに利用 |
VPCエンドポイント | インターフェイスとゲートウェイの2タイプがあり、インターフェイス(AWS PrivateLinkを使用)は、プライベートIPアドレスを持つElastic Network Interfaceで、サポートされるAWSサービスなどの宛先となる。ゲートウェイは、ルートテーブルで指定することで、AWSサービスの宛先とするトラフィックのターゲットとなるゲートウェイ |
便利なプレフィックスリスト
プレフィックスリストを作成し、複数のIP CIDRをまとめてグループのように管理可能です。作成したプレフィックスリストは、上記ルートテーブルの宛先指定や、以下で説明するセキュリティグループの宛先指定で利用可能になります。
セキュリティ
トラフィック制御(Security Group/Network ACL)
Security Group、Network ACLはネットワークの通信制御機能ですが、違いがあります。詳細は下の表を見て下さい。同じ意味を持つフィルタリングルールをSecurity GroupとNetwork ACLに重複して登録すると、Network ACLに不具合があった場合にもSecurity Groupで防御できるという2層構造が作れますが、管理が煩雑になり運用に負荷がかかるのでオススメしていません。 そのためSecurity GroupとNetwork ACLの特徴を理解し、それぞれをポリシーを持って使い分けることが重要です。サーバ単位あるいはサービス単位といった単位のフィルタはSecurity Groupで、「特定のIPアドレスからは一切通信をドロップする」といったネットワーク単位での大きなフィルタはNetwork ACLで行うことがオススメです。
iptablesやWindowsファイアウォールといったOSの機能によるフィルタリングも可能ですが、上記と同様に同一フィルタリングルールを多層的に設定すると運用管理が煩雑となるため、基本的なフィルタリングはAWS側の機能で管理する方が複数インスタンスに同時に適用できるためオススメです。
名称 | ネットワークACL | セキュリティグループ |
---|---|---|
利用頻度 | ほとんど利用しない | 基本的に利用 |
適用場所 | サブネット | インスタンス毎 |
特性 | ブラックリスト型(Deny/AllowをIn/Outで指定可能)、ステートレスで行きも戻りも許可必要 | ホワイトリスト型(AllowのみをIn/Outで指定可能)、ステートフルなので戻りパケットは考慮不要 |
評価順 | リスト順に適用 | すべてのルールを適用 |
その他 | 特定IPアドレスからの不正攻撃を遮断するのに 便利。 | 送信元の指定でセキュリティーグループIDを指定可能。同一VPCに検証環境と本番環境が存在するときに便利。 |
Amazon Route 53 Resolver DNS Firewall
VPCのアウトバウンドDNSクエリをDNS Firewallのルールグループを使用してDNSクエリをフィルタリングできます。ルールグループはカスタムすることも出来るし、AWSマネージドなリストを使うことも可能です。 EC2でSquidを利用したプロキシサーバを構築する方法もありますが、特定の宛先だけしか通信させたく無いようなVPCを作成したい時に非常に効果的と思います。有料のサービスとなります。
AWS Network Firewall
上記、Route 53 Resolver DNS FirewallはアウトバウンドのDNS通信制御のみですが、こちらはもっと多機能となります。 VPC向けのステートフルなマネージドネットワークファイアウォールのサービスです。インターネットゲートウェイ、NAT ゲートウェイ、VPC、DirectConnect など VPC の境界でトラフィックをフィルタリングすることができます。 Security Group/Network ACLは無料で利用できますが、有料のサービスとなります。
- スケーラブルでマネージド
- ステートレスなパケットフィルタリング (プロトコル、送信元IP/ポート、送信先IP/ポート)=行きも戻りも許可が必要
- ステートフルなパケットフィルタリング (プロトコル、送信元IP/ポート、送信先IP/ポート)
- ドメインリストを基にしたHTTP/HTTPSのアクセス制御
- オープンソースの IPS 「Suricata」 互換のルールでの制御
引用元:Multi zone architecture with an internet gateway
分析/調査
フローログ(Amazon VPC Flow Log)
VPC内のトラフィックログを取得する機能です。トラフィックのヘッダデータのダンプなので、あとから検索・解析する用途で活用できます。Amazon CloudWatch Logs または Amazon S3 に出力できます。VPC Flow logは費用がかかりませんが、出力先のサービスの料金がかかります。
フローログで一部取得できない通信がありますので、理解しておきましょう。
- インスタンスからAmazon DNSに対して生成されるトラフィック(独自DNSサーバーを使用する場合は記録される)
- WindowsインスタンスからWindowsアクティベートの為に生成されるトラフィック
- インスタンスメタデータ(169.254.169.254)へのトラフィック
- Amazon Time Sync Service の 169.254.169.123 との間でやり取りされるトラフィック
- DHCPトラフィック
- ミラートラフィック
- エンドポイントのネットワークインターフェイスと Network Load Balancer のネットワークインターフェイスの間のトラフィック。
トラフィックミラーリング(Amazon VPC Traffic Mirroring)
VPCフローログだと、パケット内容は取得できません。パケットの中身を取得したい場合にAmazon VPC traffic mirroringを利用します。実際のパケットを分析して、高度なネットワーク攻撃やパフォーマンスの問題に関する根本原因分析に利用できます。有料となります。
- EC2インスタンスのENIを通過するトラフィックをENIもしくはNLBにミラーリング
- パケットはVirtual eXtensible Local Area Network(VXLAN)でカプセル化
- ミラーするトラフィックは簡単なフィルタ可能
Reachability Analyzer
VPCで通信不可のときに調査すべきポイントは以下があります。
- セキュリティグループ
- ネットワークACL
- ルートテーブル
上記のVPC内の接続性テストとトラブルシューティングを簡単にできるものです。有料となりますがカナリ安いと思います。別な登壇で解説していますので以下のスライドとなります。
Network Access Analyzer
サポートされているAWSリソース間のネットワーク接続性を分析し意図しないアクセスを発見・識別するサービスです。セキュリティ・コンプライアンスの遵守、潜在的なアクセスルートの発見、設定ミスの防止などに活用できます。有料となりますがリソース数が少なければ、安く調査可能です。
Reachability AnalyzerはAWSリソースのEnd-to-Endのアクセス分析となり、Network Access Analyzerは VPC全体的なチェックから細かくカスタマイズ可能です。
EC2 Global View
EC2 Global View は単一の画面で全リージョンの以下リソースを表示することが可能です。
- インスタンス
- VPC
- サブネット
- セキュリティグループ
- ボリューム
別なネットワークとの接続
オンプレミスからAWS VPCの間は、一般的にインターネット経由の通信となりますが、内容を見られては困る内容の通信を行う場合に、通信の暗号化が必要となります。守るべき情報がある場合に暗号化して通信を行うためにVPNを利用します。
VPN
接続パターンは3つあります。
引用元 202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
サイト間VPN接続(Site to Site VPN Connections)
VPCと既存データセンターやホームネットワークなどをIPSec VPNにて接続するためのサービスとなります。有料となります。数年前まで、ハードウェアVPNと言われていたものです。1接続で自動フェイルオーバーのための2つのVPNトンネルで接続できます。VPC側の接続先として、古くからある仮想プライベートゲートウェイ(Virtual Private Gateway/VGW)への接続と、トランジットゲートウェイ(Transit Gateway)への接続があります。
VPN構築で出てくるリソース | 概要 |
---|---|
仮想プライベートゲートウェイ(Virtual Private Gateway/VGW) | VPN接続においてのAmazon VPC側に配置するゲートウェイ。複数のカスタマーゲートウェイからのVPN接続を受け付けることが可能。 |
トランジットゲートウェイ(Transit Gateway/TGW) | VPN接続においての複数のVPCと接続可能にするためのゲートウェイ。別途TGWは有料 |
カスタマーゲートウェイ(Customer Gateway/CGW) | VPN接続においてのオンプレミスに設置するルータやFirewallなどのVPN機器 |
クライアントVPN(Client VPN)
AWS Client VPN は、VPC上のAWS リソース、およびVPCを経由した対向の環境への安全なアクセスを提供するマネージドなクライアントベースのSSL VPNサービスです。 このサービスができるまでは、ネットワーク機器ベンダーの仮想アプライアンスを利用することが多かったですが、規模によってはこちらのサービスに置き換えることも可能と思います。
既に入門ブログがあるので、こちらを以下を参照ください。
VPCピアリング(VPC Peering)
VPCピアリングによって異なるVPCを接続することができます。VPC間で直接接続する為、ローカルIPアドレス同士で通信可能となります。 また、IPv6アドレスでも利用することが可能です。 異なるAWSアカウントのVPCを接続可能ですし、異なるリージョン間でVPCピアリングを利用することができます。
VPC Peering数によりルーティングテーブルや、Security Groupの管理も必要です。 個人的な感覚としてVPC Peeringでのフルメッシュ接続は5VPC程度までで、それ以上の場合は運用が困難と思っています。(VPCプレフィックスリストで少し楽になりますが…) VPC Peeringは直接接続のVPC間のみ通信可能なため、以下の式でVPC Peering数を算出できます。
フルメッシュVPC Peering数=n(n-1)/2 (n=VPCの数) VPC6個:6(6-1)/2 =15個 VPC10個:10(10-1)/2 =45個
そんな時に使うのが以下のトランジットゲートウェイです。
トランジットゲートウェイ(Transit Gateway/TGW)
複数のVPC間のトラフィックをルーティング可能で、6VPC以上のフルメッシュなら構成がシンプルになります。
AZを跨ぐ通信は注意しましょう。
VPC Peeringからの切り替えで理解しやすいブログです。
Amazon Cloud WAN
Amazon Cloud WANは勉強不足で概要のみとなります。すみません。
クラウド環境とオンプレミス環境のリソース間で実行されるトラフィックを管理する、グローバルネットワークの構築、管理、監視を支援するWAN(Wide Area Networking)サービスです。現在はPrivate Preview中です。 AWS Cloud WANではセントラルダッシュボードとネットワークポリシーを使って、複数拠点と世界規模のネットワーク構築することが可能です。
まとめ
基本機能、セキュリティ、調査/分析、別なネットワーク接続と4つの項目でクローズアップしてまとめてみました。私も今回の資料を作り勉強したものが数個ありましたので、どなたかのお役に立てれば光栄です。 全体的に、長くなったので、数個か省略しております。気づいた方はマニアです。
あわせて読みたい
20201021 AWS Black Belt Online Seminar Amazon VPC
Dual-stack IPv6 architectures for AWS and hybrid networks | Networking & Content Delivery
202106 AWS Black Belt Online Seminar AWS Network Firewall 入門
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
最後に
以上、『AWS 再入門ブログリレー 2022』の1日目のエントリ『Amazon VPC』編でした。 明日 (2/2) はサンウォンの「AWS CloudFormation 」の予定です。お楽しみに!!