・Amazon VPC(Virtual Private Cloud)
AWS上で動作する仮想ネットワーク環境を提供するサービス。VPCでネットワーク空間を作成し、その中にインスタンスなどのAWSリソースを配置。
なお、VPCのサービスで作成したネットワーク空間もVPCという。
VPCは一つのリージョンに複数作成でき、一つのVPCはリージョン内すべてのAZにまたがって存在します。VPCのサービスで作成するネットワーク空間はVPCごとに論理的に切り離されたプライベートネットワークなので、デフォルトの状態では他のVPCやインターネットとは通信できない。
・サブネット
VPCを論理的に分割したネットワーク空間。サブネットは一つのAZに属し、一つのAZ内に複数のサブネットを作成できます。
インターネットから直接通信があるサブネットはパブリックサブネット、インターネットから直接通信がないサブネットはプライベートサブネットという。サブネットの設定にパブリックサブネットやプライベートサブネットという選択はなく、インターネットゲートウェイへのルーティング設定があるサブネットは、パブリックサブネットの役割を持ち、インターネットゲートウェイのルーティングがないサブネットはプライベートサブネットの役割を持つ。
・CIDR(Classless Inter-Domain Routing)ブロック
ネットワークの範囲を指定するIPアドレスの設定方法のこと。CIDRはIPアドレスを「172.16.0.100/24」のように表記します。この「/24」をプレフィックス長と言い、IPアドレスとプレフィックス長によって所属するネットワークが決まります。プレフィックス長が「/24」の場合、IPアドレスを2進数表記にした時に左から24ビット目までの範囲がプレフィックスです。プレフィックスに該当するIPアドレスの部分がネットワークアドレスとなり、このネットワークアドレスの範囲を「CIDRブロック」。
という。
VPCを利用するには最初にVPCを作成し、その後にサブネットを作成。VPCとサブネットの作成時に、それぞれネットワークアドレスの範囲をCIDRブロックで指定。
VPCの中にサブネットが存在するので、サブネットのCIDRブロックはVPCの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
【IPアドレスの種類】
○プライベートIPアドレス
VPC内のリソース間の通信に使用し、インターネットとは通信不可のIPアドレス。プライベートIPアドレスは、パブリックサブネットとプライベートサブネットにあるEC2やRDSなど、すべてのインスタンスに割り当てられます。
プライベートIPアドレスは、AWSリソースを停止・起動しても同一のIPアドレスが使われ、AWSリソースの削除時にIPアドレスが解放される。
○パブリックIPアドレス
インターネットと通信可能なIPアドレス。
Elactic IPアドレスではないパブリックIPアドレスは、AWSリソースが停止する時にIPアドレスが解放され、AWSリソースが起動する時に新規のIPアドレスが割り当てられます。
○Elastic IPアドレス
インターネットと通信可能な固定のパブリックIPアドレス。Elastic IPアドレスを割り当てたAWSリソースが削除されても同一のIPアドレスが保有され、別のAWSリソースに再び割り当てることができます。Elastic IPアドレスを割り当てたAWSリソースはパブリックDNSホスト名も固定になり、Elastic IPアドレスへ名前解決されます。
Elastic IPアドレスは割り当てられているAWSリソースが起動している時は無料で利用できますが、AWSリソースが停止していたり、割り当てられていない時は料金が発生します。
・ルートテーブル
VPC内の通信に対してどこへデータを転送するかを定義する機能です。ルートテーブルに従って、送信先ごとに指定したターゲットへデータを転送することを「ルーティング」といいます。各サブネットは1つのルートテーブルを紐付けることができ、ルートテーブルの紐付けがないサブネットはVPC全体に適用される「メインルートテーブル」に従ってルーティングを行います。
ルートテーブルはVPCからインターネットへ接続する時にも使用します。ターゲットを後述するインターネットゲートウェイに設定すると、サブネット内に発生した送信先がVPC外への通信をインターネットゲートウェイへ転送して、インターネットへ接続できるようになる。
・インターネットゲートウェイ
インターネットとVPC内のAWSリソースを接続する機能。インターネットゲートウェイを利用するには、VPCにインターネットゲートウェイを作成し、インターネットへアクセスさせたいリソースが配置されたサブネットのルートテーブルに、ターゲットがインターネットゲートウェイのルーティングを設定します。
インターネットゲートウェイへのルーティングが設定されたサブネットは、パブリックサブネットになります。パブリックサブネットでは、インターネットとサブネット両方からの接続開始要求を通します。インターネットゲートウェイは一つのVPCに一つしか作成できないので、複数のパブリックサブネットで共有して利用。
・NATゲートウェイ
プライベートサブネットからインターネットへの通信を可能にするIPv4専用の機能。NAT(Network Address Translation)とは、IPアドレスを別のIPアドレスに変換する機能のこと。プライベートサブネット内にあるAWSリソースのプライベートIPアドレスを、NATゲートウェイのパブリックIPアドレス(Elastic IPアドレス)に変換し、インターネットへ接続。
NATゲートウェイを利用するには、Elastic IPアドレスを割り当てたNATゲートウェイをパブリックサブネット内に作成し、プライベートサブネットのルートテーブルにターゲットがNATゲートウェイのルーティングを設定。
NATゲートウェイはプライベートサブネット内リソースからインターネットへの接続開始要求は通しますが、インターネットからプライベートサブネット内リソースへの接続開始要求は通さない。
NATゲートウェイはAWSによってAZ内で冗長化されており、NATゲートウェイの機器障害時やトラフィック増加時でも継続して利用できる。ただし、AZに障害が発生した場合には利用できなくなるため、さらに可用性を高める場合は複数のAZにそれぞれNATゲートウェイを配置する必要がある。
・NATインスタンス
NATゲートウェイと同じく、プライベートサブネットからインターネットへの通信を可能にするIPv4専用の機能。NATゲートウェイはマネージドサービスなのに対し、NATインスタンスはEC2インスタンスから作成するため、ユーザーが障害対応などの運用管理を実施する必要がある。
NATインスタンスを利用するには、パブリックサブネットにパブリックIPアドレスまたはElastic IPアドレスを割り当てたNATインスタンスを作成した後、プライベートサブネットのルートテーブルにターゲットがNATインスタンスのルーティングを設定。
NATインスタンスはNATゲートウェイと同じく、プライベートサブネット内リソースからインターネットへの接続開始要求は通しますが、インターネットからプライベートサブネット内リソースへの接続開始要求は通さない。
NATゲートウェイでは利用できないポート転送機能を設定できたり、VPC外からプライベートサブネット内へ接続する際の踏み台サーバーとして利用できる。
・Egress-Onlyインターネットゲートウェイ
VPCでIPv6 CIDRブロックを割り当てる際には、AWS保有もしくはユーザーが保有するアドレスレンジから割り当てる。IPv6 CIDRブロックを持つパブリックサブネット内のリソースは、無条件にインターネットからアクセス可能。
Egress-Onlyインターネットゲートウェイは、NATゲートウェイとインターネットゲートウェイの特徴を併せ持つ機能です。
Egress-Onlyインターネットゲートウェイは、インターネットからVPCへ(Ingress)の接続開始要求は通さずVPCからインターネットへ(Egress)の接続開始要求は通す、IPv6専用のインターネットゲートウェイ。
・ENI(Elastic Network Interface)
AWSリソースのネットワークインターフェイス。オンプレミス環境におけるNIC(Network Interface Card)と同じ役割を持ち、VPC内のEC2インスタンスやNATゲートウェイなどに割り当てて利用。
・VPCエンドポイント
S3やDynamoDBなどインターネットから直接利用できるVPC外のAWSサービスへアクセスは、VPC内のAWSリソースからインターネットゲートウェイを経由して通信します。VPCエンドポイントは、セキュリティ上の制約でインターネットとの通信が制限されているプライベートサブネット内のAWSリソースから、インターネットゲートウェイを経由せずにVPC外のAWSサービスへアクセス可能にする機能です。
VPCエンドポイントにはゲートウェイ型とAWS PrivateLink(インターフェイス型)の2種類があり、それぞれ利用できるAWSサービスが異なる。
・ゲートウェイ型
Amazon S3とAmazon DynamoDBで利用できます。
S3やDynamoDBへ接続したいリソースが配置されているVPCにVPCエンドポイントを割り当て、ルートテーブルにターゲットがVPCエンドポイントのルーティングを設定します。DynamoDBはゲートウェイ型のみ利用できますが、S3はゲートウェイ型とPrivateLinkの両方で利用できます
・AWS PrivateLink(インターフェイス型)
Amazon CloudWatch LogsやAmazon SNS、AWS CloudFormationなど多数のサービスで利用できます。
サービスへ接続したいリソースが配置されているサブネットにプライベートIPアドレスを持つENIを作成し、ENIとサービスをリンクさせる。
・VPCエンドポイントポリシー
VPCエンドポイントを作成すると、VPC内のリソースはVPCエンドポイントからVPC外のAWSサービスへアクセスできるようになります。VPCエンドポイントからの接続先を制限するには「VPCエンドポイントポリシー」を使用します。VPCエンドポイントポリシーは、VPCエンドポイントのゲートウェイ型とAWS PrivateLink(インターフェイス型)の両方で利用できます。
VPCエンドポイントポリシーを設定するには、許可/拒否する接続先のAmazonリソース名(ARN)を指定。
・VPCピアリング
VPC間のルーティングを可能にする機能。他のAWSアカウントのVPCや異なるリージョンのVPC、同一アカウントの異なるVPCでも、同一のプライベートネットワーク内に存在しているかのように、相互に通信できる。
・AWS Transit Gateway
複数のVPCや複数のオンプレミスネットワークを相互に接続するハブ機能を持つサービス。VPCピアリングはVPCを1対1で接続するサービスなのに対し、Transit Gatewayは複数のVPC同士を1つのハブで相互に接続できるので、ネットワーク経路を簡素化できる。
VPC間の他に、AWS Direct ConnectやAWS VPNで接続されたオンプレミスネットワークとも接続できます。AWS Direct ConnectとAWS VPNはともに、オンプレミスなどAWS外のネットワークとAWS内のネットワークをセキュアに接続するサービス。
【VPCでのセキュリティ】
VPCにはネットワークアクセスを制御する機能が2種類ある。
■セキュリティグループ
VPC上でネットワークアクセスをインスタンスごとに制御するファイアウォールです。設定は許可ルールのみ指定し、拒否ルールは指定できません。デフォルトの設定では、すべてのインバウンド通信(外部から内部への通信)を拒否、すべてのアウトバウンド通信(内部から外部への通信)を許可しているので、インスタンスへのインバウンド通信には許可ルールを設定する必要があります。
セキュリティグループは通信の状態を管理する「ステートフル」なファイアウォールです。インバウンドまたはアウトバウンドで許可されている通信に関連する後続の通信(リクエストに対応するレスポンスなど)は、明示的に許可設定をしなくても通信が許可されます。
セキュリティグループでは送信元や宛先にIPアドレスの範囲を指定する他、別のセキュリティグループも指定できます。指定したセキュリティグループに所属するインスタンスからの通信を一括して許可できるので、送信元や宛先のインスタンス台数が変化する場合に有用です。
■ネットワークACL
VPC上でネットワークアクセスをサブネットごとに制御するファイアウォールです。IPアドレスを元に許可ルールと拒否ルールの両方を設定可能です。ルールはユーザーが付与したルール番号の順番に評価され、ルール間で矛盾がある場合は小さい数字のルールが適用されます。デフォルトの設定ではインバウンド通信(外部から内部への通信)、アウトバウンド通信(内部から外部への通信)ともにすべての通信が許可されています。
ネットワークACLは通信の状態を管理しない「ステートレス」なファイアウォールです。通信の関連を考慮しないので、インバウンド/アウトバウンド両方に許可設定が必要になります。例えば、インバウンドで特定のリクエストの受付を許可していても、アウトバウンドでレスポンスの送信を許可していない場合は、正常に通信できないことになります。
・VPCフローログ
VPC内のENIで通信するネットワークトラフィック情報をキャプチャする機能。キャプチャしたデータはAmazon CloudWatch LogsまたはS3へ保存されます。
VPCフローログには、送信元/送信先IPアドレス、送信元/送信先ポート番号、プロトコル番号、通信の許可/拒否の結果などが記録されます。VPCフローログを利用することでVPC内のリソースが受信した不審な通信や、VPC内のリソースから発信された不要な通信の発見に繋がる。