AWS vpc

AWS Transit Gatewayは、複数のVPCや複数のオンプレミスネットワークを相互に接続するハブ機能を持つサービスです。VPCピアリングはVPCを1対1で接続するサービスなのに対し、Transit Gatewayは複数のVPC同士を1つのハブで相互に接続できるので、ネットワーク経路を簡素化できます。

[VPCピアリングを使用したVPC同士の接続]
[Transit Gatewayを使用したVPC同士の接続]

Transit GatewayはVPC間の他に、AWS Direct ConnectやAWS VPNで接続されたオンプレミスネットワークとも接続できます。AWS Direct ConnectとAWS VPNはともに、オンプレミスなどAWS外のネットワークとAWS内のネットワークをセキュアに接続するサービスです。

VPCのルートテーブルは、VPC内での通信において、どのネットワークへデータを転送するかを定義する機能です。ルートテーブルに従って、送信先ごとに指定したターゲットへデータを転送することを「ルーティング」といいます。送信先「10.0.0.0/16」のターゲットの「local」は、送信元と同一のサブネット内で直接通信することを意味します。送信先「0.0.0.0/0」は「デフォルトルート」といい、他の送信先に当てはまらない場合は、デフォルトルートのターゲットへルーティングします。

Amazon VPC(Virtual Private Cloud)は、AWS上で動作する仮想ネットワーク環境を提供するサービスです。VPCでネットワーク空間を作成し、その中にインスタンスなどのAWSリソースを配置します。
VPCは1つのリージョン内に複数作成できます。そして、1つのVPCはリージョン内にある全てのAZにまたがります。VPCで作成されるネットワーク空間は、各VPCが独立しているプライベートネットワークです。そのため、デフォルトでは他のVPCやインターネットと通信できません。

プライベートサブネット内のAWSリソースからVPC外のAWSサービスへ、プライベートネットワーク経由でアクセスするには「VPCエンドポイント」を利用します。
VPCエンドポイントにはゲートウェイ型とAWS PrivateLink(インターフェイス型)があり、Amazon CloudWatch Logsへの接続は「AWS PrivateLink」を利用します。PrivateLinkは、CloudWatch LogsやS3など多数のサービスで利用できます。
なお、CloudWatch Logsは、AWSサービスやEC2インスタンスのOSやアプリケーションのログを収集し、一元管理するサービスです。

Egress-Onlyインターネットゲートウェイは、NATゲートウェイとインターネットゲートウェイの特徴を併せ持つIPv6専用の機能です。VPCからインターネットへ(Egress)の接続開始要求は通しますが、インターネットからVPCへ(Ingress)の接続開始要求は通しません。

Egress-Onlyインターネットゲートウェイを利用するには、VPCにEgress-Onlyインターネットゲートウェイを作成し、プライベートサブネットのルートテーブルに、送信先が「::/0(デフォルトルート)」、ターゲットが「Egress-OnlyインターネットゲートウェイID」となるルートを追加します。

[Egress-Onlyインターネットゲートウェイ向けルートテーブルの例]

NATゲートウェイは、プライベートサブネットからインターネットへ通信をしたい時に利用するIPv4専用の機能です。AWSによってAZ内で冗長化されており、NATゲートウェイの機器障害時やトラフィック増加時でも継続して利用できます。

ただし、AZに障害が発生した場合には利用できなくなるため、さらに可用性を高める場合は複数のAZにそれぞれNATゲートウェイを配置する必要があります。

VPCにはネットワークアクセスを制御する機能として「セキュリティグループ」と「ネットワークACL」があります。

[セキュリティグループとネットワークACLのイメージ図]

■セキュリティグループ
VPC上でネットワークアクセスをインスタンスごとに制御するファイアウォールです。設定は許可ルールのみ指定し、拒否ルールは指定できません。デフォルトの設定では、すべてのインバウンド通信(外部から内部への通信)を拒否、すべてのアウトバウンド通信(内部から外部への通信)を許可しているので、インスタンスへのインバウンド通信には許可ルールを設定する必要があります。
セキュリティグループは通信の状態を管理する「ステートフル」なファイアウォールです。インバウンドまたはアウトバウンドで許可されている通信に関連する後続の通信(リクエストに対応するレスポンスなど)は、明示的に許可設定をしなくても通信が許可されます。

■ネットワークACL
VPC上でネットワークアクセスをサブネットごとに制御するファイアウォールです。IPアドレスを元に許可ルールと拒否ルールの両方を設定可能です。ルールはユーザーが付与したルール番号の順番に評価され、ルール間で矛盾がある場合はルール番号が小さい数字のルールが適用されます。デフォルトの設定ではインバウンド通信(外部から内部への通信)、アウトバウンド通信(内部から外部への通信)ともにすべての通信が許可されています。
ネットワークACLは通信の状態を管理しない「ステートレス」なファイアウォールです。通信の関連を考慮しないので、インバウンド/アウトバウンド両方に許可設定が必要になります。例えば、インバウンドで特定のリクエストの受付を許可していても、アウトバウンドでレスポンスの送信を許可していない場合は正常に通信できません。

VPCのルートテーブルは、VPC内での通信において、どのネットワークへデータを転送するかを定義する機能です。ルートテーブルに従って、送信先ごとに指定したターゲットへデータを転送することを「ルーティング」といいます。VPC内の各サブネットは、1つのルートテーブルを関連付けることができます。ルートテーブルが関連付けられていないサブネットは、VPC全体に適用される「メインルートテーブル」に従ってルーティングが行われます。

Elastic IPアドレスは、インターネットと通信可能な固定のパブリックIPアドレスです。Elastic IPアドレスは割り当てたAWSリソースが終了しても同一のIPアドレスが保有されるので、利用料金が発生し続けます。また、保有しているElastic IPアドレスを使用して、同一のIPアドレスを別のAWSリソースに再び割り当てられます。

VPCエンドポイントを作成すると、VPC内のリソースはVPCエンドポイントからVPC外のAWSサービスへアクセスできるようになります。VPCエンドポイントからの接続先を制限するには「VPCエンドポイントポリシー」を使用します。VPCエンドポイントポリシーは、VPCエンドポイントのゲートウェイ型とAWS PrivateLink(インターフェイス型)の両方で利用できます。
VPCエンドポイントポリシーを設定するには、許可/拒否する接続先のAmazonリソース名(ARN)を指定します。

[VPCエンドポイントポリシーの設定画面]
下記の設定では、S3バケットの「A-bucket」への通信を許可しています。

VPCのルートテーブルは、VPC内での通信において、どのネットワークへデータを転送するかを定義する機能です。ルートテーブルに従って、送信先ごとに指定したターゲットへデータを転送することを「ルーティング」といいます。VPC内の各サブネットは、1つのルートテーブルを関連付けることができます。ルートテーブルが関連付けられていないサブネットは、VPC全体に適用される「メインルートテーブル」に従ってルーティングが行われます。

例えば、ルートテーブルはVPCからインターネットへ接続する時に使用します。サブネットのルートテーブルにインターネットゲートウェイへのルーティングを設定することで、VPCとインターネット間でインターネットゲートウェイを経由して通信できるようになります。下記の図はパブリックサブネットのルートテーブルの例です。自VPC内への通信(送信先:10.0.0.0/16)であればローカル(自VPC内)、それ以外への通信(0.0.0.0/0)であればインターネットゲートウェイ(igw-0da2a1fa7e6d570fb)へ転送する設定にしています。

ルートテーブルの紐付けがないサブネットは、VPC全体に適用される「メインルートテーブル」に従ってルーティングする。

NATインスタンスは、NATゲートウェイと同じくプライベートサブネットからインターネットへの通信を可能にするIPv4専用の機能です。NATゲートウェイはマネージドサービスなのに対し、NATインスタンスはEC2インスタンスから作成するため、ユーザーが障害対応などの運用管理を実施する必要があります。

NATインスタンスは運用管理が必要ですが、NATゲートウェイでは利用できないポート転送機能の設定や、VPC外からプライベートサブネット内へ接続する際の踏み台サーバーとして利用できます。
踏み台サーバーとは、例えばインターネットからプライベートサブネット内にあるサーバーの保守をしたい場合に、一旦NATインスタンスへSSH接続をした後、NATインスタンスから目的のサーバーへ再度SSH接続をすることで、VPC外からは直接接続できないプライベートサブネット内のサーバーへの接続を可能にするものです。

プライベートサブネット上のEC2インスタンスがインターネットへアクセスする時は、以下の作業が必要です。
(1) VPCにインターネットゲートウェイを作成する
(2) パブリックサブネットのルートテーブルに、インターネットゲートウェイへのルーティングを設定する
(3) パブリックサブネットにNATゲートウェイ(NATインスタンス)を作成する
(4) プライベートサブネットのルートテーブルに、NATゲートウェイ(NATインスタンス)へのルーティングを設定する

プライベートサブネット上のEC2インスタンスがインターネットへアクセスするためには、VPCにインターネットゲートウェイ、パブリックサブネットにNATゲートウェイもしくはNATインスタンスを作成します。

[プライベートサブネットからインターネットへ接続する時のイメージ]

VPCエンドポイントは、VPC内のリソースからVPC外のAWSサービスへプライベートネットワーク経由でアクセス可能にする機能です。

AWS Transit Gatewayは、複数のVPCや複数のオンプレミスネットワークを相互に接続するハブ機能を持つサービスです。

Amazon API GatewayはAPIの作成や管理ができるサービスです。

サブネットとは、VPC内のネットワーク空間を論理的に分割したものです。各サブネットは、1つのAZに属し、1つのAZ内に複数のサブネットを作成できます。サブネットのうち、インターネットゲートウェイへのルーティング設定がある場合は、「パブリックサブネット」といい、ない場合は「プライベートサブネット」といいます。パブリックサブネットには、インターネットから直接アクセスされるAWSリソースを配置します。一方、プライベートサブネットには、インターネットから直接アクセスされないAWSリソースを配置します。

[サブネットのイメージ]

VPC内のAWSリソースから、S3やDynamoDBなどインターネットから直接利用できるVPC外のAWSサービスへアクセスは、通常インターネットゲートウェイを経由して通信します。「VPCエンドポイント」は、セキュリティ上の制約でインターネットとの通信が制限されているプライベートサブネット内のAWSリソースから、インターネットゲートウェイを経由せずにVPC外のAWSサービスへアクセス可能にする機能です。

VPCエンドポイントにはゲートウェイ型とAWS PrivateLink(インターフェイス型)の2種類があり、それぞれ利用できるAWSサービスが異なります。

■ゲートウェイ型
S3とDynamoDBで利用できます。S3やDynamoDBへ接続したいリソースが配置されているVPCにVPCエンドポイントを割り当て、ルートテーブルにターゲットがVPCエンドポイントのルーティングを設定します。

[VPCエンドポイント(ゲートウェイ型)でS3やDynamoDBにアクセスする時のイメージ]

■AWS PrivateLink(インターフェイス型)
CloudWatch LogsやS3など多数のサービスで利用できます。サービスへ接続したいリソースが配置されているサブネットにプライベートIPアドレスを持つENIを作成し、ENIとサービスをリンクさせます。

[PrivateLinkでCloudWatch LogsやS3にアクセスする時のイメージ]

VPCフローログは、VPC内のENI(Elastic Network Interface)に流れるネットワークトラフィック情報を出力する機能です。

VPCフローログには、送信元/送信先IPアドレス、送信元/送信先ポート番号、プロトコル番号、通信の許可/拒否の結果などが記録されます。VPCフローログを利用することでVPC内のリソースが受信した不審な通信や、VPC内のリソースから発信された不要な通信の発見に繋がります。

[VPCフローログの中身]

ENI(Elastic Network Interface)はAWSリソースのネットワークインターフェイスです。オンプレミス環境におけるNIC(Network Interface Card)と同じ役割を持ち、VPC内のEC2インスタンスやNATゲートウェイなどに割り当てて利用します。

CIDR(Classless Inter-Domain Routing)とは、ネットワークの範囲を指定するIPアドレスの設定方法のことです。CIDRはIPアドレスを「172.16.0.100/24」のように表記します。この「/24」をプレフィックス長と言い、IPアドレスとプレフィックス長によって所属するネットワークが決まります。プレフィックス長が「/24」の場合、IPアドレスを2進数表記にした時に左から24ビット目までの範囲がプレフィックスです。プレフィックスに該当するIPアドレスの部分がネットワークアドレスとなり、このネットワークアドレスの範囲を「CIDRブロック」といいます。

[CIDRブロックのイメージ]

VPCを利用するには最初にVPCを作成し、その後にサブネットを作成します。VPCとサブネットの作成時に、それぞれネットワークアドレスの範囲をCIDRブロックで指定します。
VPCの中にサブネットが存在するので、サブネットのCIDRブロックはVPCのCIDRブロックの範囲内で作成する必要があります。(例:VPCが172.16.0.0/18のCIDRブロックで、サブネットが10.0.0.0/22や172.16.0.0/16のCIDRブロックは作成できない。)

[CIDRブロックの設定例]

VPCではCIDRブロックのプレフィックス長を/16から/28の間で指定します。AWSは次のプライベートIPv4アドレス範囲から、CIDRブロックを指定することを推奨しています。
・10.0.0.0 ~ 10.255.255.255
・172.16.0.0 ~ 172.31.255.255
・192.168.0.0 ~ 192.168.255.255

セキュリティグループは、VPC上でネットワークアクセスをインスタンスごとに制御するファイアウォールです。設定は許可ルールのみ指定し、拒否ルールは指定できません。デフォルトの設定では、すべてのインバウンド通信(外部から内部への通信)を拒否、すべてのアウトバウンド通信(内部から外部への通信)を許可しているので、インスタンスへのインバウンド通信には許可ルールを設定する必要があります。
セキュリティグループは通信の状態を管理する「ステートフル」なファイアウォールです。インバウンドまたはアウトバウンドで許可されている通信に関連する後続の通信(リクエストに対応するレスポンスなど)は、明示的に許可設定をしなくても通信が許可されます。

[セキュリティグループとネットワークACLのイメージ図]

[セキュリティグループとネットワークACLの比較表]

ネットワークACLは、VPC上でネットワークアクセスをサブネットごとに制御するファイアウォールです。IPアドレスを元に許可ルールと拒否ルールの両方を設定可能です。ルールはユーザーが付与したルール番号の順番に評価され、ルール間で矛盾がある場合はルール番号が小さい数字のルールが適用されます。デフォルトの設定ではインバウンド通信(外部から内部への通信)、アウトバウンド通信(内部から外部への通信)ともにすべての通信が許可されています。

ネットワークACLは通信の状態を管理しない「ステートレス」なファイアウォールです。通信の関連を考慮しないので、インバウンド/アウトバウンド両方に許可設定が必要になります。例えば、インバウンドで特定のリクエストの受付を許可していても、アウトバウンドでレスポンスの送信を許可していない場合は正常に通信できません。

ELBはAWSが提供する負荷分散(ロードバランシング)のサービスです。ELB配下にWebサーバーがある場合は、ELBをパブリックサブネットに配置しWebサーバーをプライベートサブネットに配置することで、Webサーバーのセキュリティを高めることができます。セキュリティの観点からインターネットから直接アクセスのないWebサーバーは、プライベートサブネットに配置するのが適切です。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。