VPC ネットワークアーキテクチャを説明する - Amazon Virtual Private Cloud

VPC ネットワークアーキテクチャを説明する

Amazon VPC を使用すると、AWS クラウド内に、仮想プライベートクラウド (VPC) と言う、論理的に分離された仮想ネットワークを定義でき、個別の VPC を作成することで、ワークロードまたは組織エンティティごとにインフラストラクチャの分離が可能となります。VPC を設定するには、IP アドレス範囲の選択、ルーティングの設定、ネットワークゲートウェイの追加を行って、VPC を相互接続し、VPC とインターネットまたは独自の企業ネットワークとの接続を行います。VPC では、EC2 インスタンスや RDS インスタンスなどの AWS リソースを起動します。

次の表には、VPC ネットワークの主な特性の説明が記載されています。ネットワーク管理者は、このガイダンスを利用することで VPC ネットワークのアーキテクチャと設定を説明できます。こうした情報があれば、オンプレミスや別のクラウドプロバイダーを使用して同等の機能を持つネットワークを設定することが可能になります。

特性 説明
地理的場所 Amazon VPC は、世界中のすべての AWS リージョンでホストされています。顧客に最も近い場所に AWS リソースを配置するために、VPC ネットワークのリージョンを選択できます。
サブネット VPC に対して定義するサブネットによってネットワーク境界が定義され、AWS リソースの IP アドレスが決定されます。複数のアベイラビリティーゾーンにサブネットを追加して、リソースの可用性を高めることができます。
ネットワーク接続 VPC またはサブネットにアタッチして VPC ネットワークとその他のネットワーク (他の VPC または サブネット、インターネット、またはオンプレミスネットワーク) の間の接続を提供するゲートウェイ。
セキュリティコントロール VPC にセキュリティグループを作成すると、コンピューティングリソース、データベースリソース、ロードバランサーといった関連リソース間のトラフィックを制御できます。また、各サブネットが持つネットワーク ACL によって、サブネットに出入りするトラフィックの制御が可能です。
トラフィック管理 ルーティングルールは、サブネット、VPC、外部拠点の間を流れるトラフィックフローを制御します。Elastic Load Balancing のロードバランサーを使用すると、受信トラフィックを複数のターゲット (EC2 インスタンス、コンテナ、Lambda 関数など) に分散できます。

地理的場所

Amazon VPC は、世界中のどの AWS リージョンでも利用できます。各リージョンは、個別の地理的領域です。ユーザーの大部分が存在する場所に近いリージョンにリソースの VPC を作成することで、ネットワークレイテンシーを低減できます。

Amazon EC2 Global View を使用して、すべてのリージョンの VPC をグラフィカルユーザーインターフェイスで一覧表示できます (同等のプログラムインターフェイスはありません)。Amazon VPC コンソール、AWS API、AWS コマンドラインインターフェイスでは、各リージョンの VPC と VPC リソースを個別に一覧表示する必要があります。

地理的場所が重要である理由

VPC の場所を特定すると、必要に応じて、機能的に同等のネットワークを、同じ場所に設定するか、異なる場所に設定するかを決定できます。

すべてのリージョンの VPC 概要を表示するには
  1. Amazon EC2 Global View コンソール (https://console.aws.amazon.com/ec2globalview/home) を開きます。

  2. [リージョンエクスプローラー] タブの [概要] で、[VPC] のリソース数を確認します。これには、VPC 数とリージョン数が含まれており、これは、AWS によって自動作成されるデフォルト VPC の数と、ユーザーが作成するデフォルト以外の VPC の数をともに示しています。下線付きのテキストをクリックすると、VPC 数がリージョン間でどのように分配されているかを確認できます。リージョンに VPC が 1 つしかない場合、それは、対象リージョンのデフォルト VPC である可能性が高くなります。

  3. [グローバル検索] タブで、クライアントフィルター [リソースタイプ = Vpc] を選択します。リージョンまたはタグを指定すると、結果をさらにフィルタリングできます。

AWS CLI を使用してリージョン内の VPC 情報を取得する

次の describe-vpcs コマンドを使用します。このコマンドは、VPC が存在する各リージョンで実行する必要があります。--query パラメータは、VPC ID のみを出力に含めます。必要に応じて追加のフィールドを含めることができます。

aws ec2 describe-vpcs \ --region us-east-2 \ --query "Vpcs[*].VpcId"

各リージョンにはデフォルトの VPC が表示されます。デフォルトの VPC を使用していない場合は、次のフィルターを追加して、結果からデフォルトの VPC を除外きます。

--filters Name=is-default,Values=false

サブネット

サブネットは、VPC 内にある論理的なネットワーク境界です。サブネットを作成する際、IP アドレスのブロックを割り当てます。サブネットで起動するリソースには、サブネットの IP アドレスのブロックから IP アドレスが割り当てられます。IP アドレスがあると、リソースがローカルネットワークまたはインターネット経由で相互に通信できるようになります。

Amazon VPC コンソールのリソースマップにより、VPC のサブネットが可視化されます。

サブネットが重要である理由

サブネットを使用することでセキュリティ境界を実装し、アプリケーション層の間のトラフィックを制御できます。サブネットの IP アドレスを把握しておくことで、同等の機能を持つネットワーク内のリソースが、VPC ネットワーク内で通信できるものと同じクライアントやアプリケーションと通信可能であることを確実にできます。

リソースマップを使用して VPC のサブネットを表示するには
  1. Amazon VPC コンソールの https://console.aws.amazon.com/vpc/ を開いてください。

  2. ナビゲーションペインで [VPC] を選択します。

  3. VPC のチェックボックスにチェックを入れます。

  4. [リソースマップ] タブを選択します。

  5. VPC ペインで、[詳細を表示] を選択します。[サブネット] ペインには、VPC 内のすべてのサブネット一覧とともに、IP アドレス範囲が表示されます。サブネットにカーソルを合わせると、関連するルートテーブルとネットワーク接続が強調表示されます。詳細を確認するには、リンクをクリックしてサブネットの詳細ページを開きます。

AWS CLI を使用して VPC のサブネットを記述する

次の describe-subnets コマンドを使用します。--filters パラメータは、指定された VPC のサブネットを示す検索の範囲を指定します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

aws ec2 describe-subnets \ --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \ --query Subnets[*].[SubnetId,AvailabilityZoneId,CidrBlock,Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock] \ --output table

以下は出力の例です。各列は、サブネット ID、AZ ID、IPv4 アドレス範囲、最初の IPv6 アドレス範囲 (該当する場合) を示しています。

--------------------------------------------------------------------------------------- | DescribeSubnets | +---------------------------+-----------+----------------+----------------------------+ | subnet-0d2d1b81e0bc9c6d4 | usw2-az1 | 10.0.144.0/20 | 2600:1f14:1e6e:a003::/64 | | subnet-0e01d500780bb7468 | usw2-az1 | 10.0.16.0/20 | 2600:1f14:1e6e:a001::/64 | | subnet-0eb17d85f5dfd33b1 | usw2-az2 | 10.0.128.0/20 | 2600:1f14:1e6e:a002::/64 | | subnet-0e990c67809773b19 | usw2-az2 | 10.0.0.0/20 | 2600:1f14:1e6e:a000::/64 | +---------------------------+-----------+----------------+----------------------------+

ネットワーク接続

Amazon VPC の接続オプションを使用すると、複数のアカウント、リージョン、リモートネットワーク内の VPC にまたがるネットワークを作成できます。

Amazon VPC コンソールのリソースマップでは、VPC でインターネットゲートウェイ、Egress-Only インターネットゲートウェイ、NAT ゲートウェイ、ゲートウェイ VPC エンドポイントが使用されているかどうかを確認できます。Transit Gateway、ピアリング接続、仮想プライベートゲートウェイ、その他のタイプの VPC エンドポイントは、使用されていてもリソースマップには表示されません。VPC のゲートウェイとピアリング接続の完全なリストは、コンソール、API、またはコマンドラインインターフェイスを使用して一度に 1 つを記述することで取得できます。

ネットワーク接続が重要である理由

VPC ネットワークで可能な接続を把握できていれば、同等の機能を持つネットワーク内のリソースと、同様のローカルおよびリモートリソースを通信させることができます。

リソースマップを使用して VPC のネットワーク接続を表示するには
  1. Amazon VPC コンソールの https://console.aws.amazon.com/vpc/ を開いてください。

  2. ナビゲーションペインで [VPC] を選択します。

  3. VPC のチェックボックスにチェックを入れます。

  4. [リソースマップ] タブを選択します。

  5. VPC ペインで、[詳細を表示] を選択します。[ネットワーク接続] ペインには、インターネットゲートウェイ、Egress-Only インターネットゲートウェイ、NAT ゲートウェイ、ゲートウェイ VPC エンドポイントが一覧表示されます。リソースタイプが不明な場合は、ネットワーク接続のリンクアイコンにカーソルを合わせ、その結果の URL を確認します。この URL は、コンソールのリソースへのリンクであり、コンソールには、リソースタイプとリソース ID (例: internetGatewayId=igw-0123456780abcdef ) が表示されています。

AWS CLI を使用して VPC のネットワーク接続情報を取得するには
  1. 次の describe-internet-gateways コマンドを使用して、指定されたリージョンのインターネットゲートウェイ情報を取得します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

    aws ec2 describe-internet-gateways \ --region us-east-2 \ --query InternetGateways[*].[Attachments[0].VpcId,InternetGatewayId] \ --output table

    以下は出力の例です。列はそれぞれ、VPC ID とインターネットゲートウェイ ID を示しています。

    ---------------------------------------------------- | DescribeInternetGateways | +------------------------+-------------------------+ | None | igw-04c61dba10EXAMPLE | | vpc-0bf4c2739bEXAMPLE | igw-09737a4029EXAMPLE | | vpc-060415a18fEXAMPLE | igw-0c562bd22aEXAMPLE | | vpc-0ea9d41094EXAMPLE | igw-0e06f7033dEXAMPLE | | vpc-03b86de356EXAMPLE | igw-0a9ff72d05EXAMPLE | +------------------------+-------------------------+
  2. 次の describe-egress-only-internet-gateways コマンドを使用して、指定されたリージョンの egress-only インターネットゲートウェイ情報を取得します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

    aws ec2 describe-egress-only-internet-gateways \ --region us-east-2 \ --query EgressOnlyInternetGateways[*].[Attachments[0].VpcId,EgressOnlyInternetGatewayId] \ --output table

    以下は出力の例です。列はそれぞれ、VPC ID と Egress-Only インターネットゲートウェイ ID を示しています。

    ----------------------------------------------------- | DescribeEgressOnlyInternetGateways | +------------------------+--------------------------+ | vpc-060415a18fEXAMPLE | eigw-0b8ca558acEXAMPLE | +------------------------+--------------------------+
  3. 次の describe-nat-gateways コマンドを使用して、指定されたリージョンの NAT ゲートウェイ情報を取得します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

    aws ec2 describe-nat-gateways \ --region us-east-2 \ --query NatGateways[*].[VpcId,NatGatewayId,SubnetId] \ --output table

    以下は出力の例です。各列は、VPC ID、NAT ゲートウェイ ID、サブネット ID を示しています。

    --------------------------------------------------------------------------------- | DescribeNatGateways | +------------------------+-------------------------+----------------------------+ | vpc-060415a18fEXAMPLE | nat-026316334aEXAMPLE | subnet-0eb17d85f5EXAMPLE | | vpc-060415a18fEXAMPLE | nat-0f08bc5f52EXAMPLE | subnet-0d2d1b81e0EXAMPLE | +------------------------+-------------------------+----------------------------+
  4. 次の describe-transit-gateway-vpc-attachments コマンドを使用して、指定されたリージョンの Transit Gateway VPC アタッチメント情報を取得します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

    aws ec2 describe-transit-gateway-vpc-attachments \ --region us-east-2 \ --query TransitGatewayVpcAttachments[*].[VpcId,TransitGatewayId,length(SubnetIds[])] \ --output table

    以下は出力の例です。各列は、VPC ID、Transit Gateway ID、サブネット数を示しています。

    --------------------------------------------------------- | DescribeTransitGatewayVpcAttachments | +------------------------+-------------------------+----+ | vpc-0bf4c2739bEXAMPLE | tgw-055dc4e47bEXAMPLE | 4 | | vpc-0ea9d41094EXAMPLE | tgw-055dc4e47bEXAMPLE | 2 | +------------------------+-------------------------+----+
  5. 次の describe-vpc-peering-connections コマンドを使用して、指定されたリージョンにある VPC のピアリング接続情報を取得します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

    aws ec2 describe-vpc-peering-connections \ --region us-east-2 \ --query VpcPeeringConnections[*].[AccepterVpcInfo.VpcId,RequesterVpcInfo.VpcId] \ --output table

    以下は出力の例です。各列は、アクセプタ VPC ID、アクセプタ VPC 所有者、リクエスタ VPC ID、リクエスタ VPC 所有者を示しています。

    ------------------------------------------------------------------------------------ | DescribeVpcPeeringConnections | +------------------------+---------------+------------------------+----------------+ | vpc-0ea9d41094EXAMPLE | 123456789012 | vpc-03b86de356EXAMPLE | 123456789012 | +------------------------+---------------+------------------------+----------------+
  6. 次の describe-vpn-gateways コマンドを使用して、指定されたリージョンの仮想プライベートゲートウェイ情報を取得します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

    aws ec2 describe-vpn-gateways \ --region us-east-2 \ --query VpnGateways[*].[VpcAttachments[0].VpcId,VpnGatewayId] \ --output table

    以下は出力の例です。列はそれぞれ、VPC ID と仮想プライベートゲートウェイ ID を示しています。

    ---------------------------------------------------- | DescribeVpnGateways | +------------------------+-------------------------+ | vpc-0bf4c2739bEXAMPLE | vgw-0cb3226c4aEXAMPLE | +------------------------+-------------------------+
  7. 次の describe-vpc-endpoints コマンドを使用して、指定されたリージョンの VPC エンドポイント情報を取得します。--query パラメータに含まれるのは、出力内の指定されたフィールドのみです。必要に応じて追加のフィールドを含めることができます。

    aws ec2 describe-vpc-endpoints \ --region us-east-2 \ --query 'VpcEndpoints[*].[VpcId,VpcEndpointType,ServiceName||ServiceNetworkArn||ResourceConfigurationArn]' \ --output table

    以下は出力の例です。最初の列は VPC ID を示し、2 番目の列は VPC エンドポイントタイプを示しています。3 番目の列はエンドポイントタイプに応じて異なり、サービス名、リソース設定 ARN、サービスネットワーク ARN のいずれかが表示されます。

    ---------------------------------------------------------------------------------------------------------------------------------------- | DescribeVpcEndpoints | +------------------------+-----------------+-------------------------------------------------------------------------------------------+ | vpc-060415a18fcc9afde | Interface | com.amazonaws.vpce.us-west-2.vpce-svc-007832a03d60fc387 | | vpc-060415a18fcc9afde | Interface | com.amazonaws.vpce.us-west-2.vpce-svc-007832a03d60fc387 | | vpc-0bf4c2739bc05a694 | Gateway | com.amazonaws.us-west-2.s3 | | vpc-0ea9d410947d27b7d | Interface | com.amazonaws.us-west-2.logs | | vpc-0bf4c2739bc05a694 | Resource | arn:aws:vpc-lattice:us-east-2:123456789012:resourceconfiguration/rcfg-07129f3acded87625 | | vpc-0bf4c2739bc05a694 | ServiceNetwork | arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0808d1748faee0c1e | | vpc-0bf4c2739bc05a694 | ServiceNetwork | arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0808d1748faee0c1e | +------------------------+-----------------+-------------------------------------------------------------------------------------------+

セキュリティコントロール

Amazon VPC のセキュリティコントロールを使用することで、VPC と、VPC にデプロイされたリソースへのネットワークアクセスを決定できます。

これが重要な理由

サブネットとリソースに到達可能なインバウンドトラフィックと、サブネットおよびリソースからの送信を許可するトラフィックが決定していれば、機能的に同等のネットワークに必要なファイアウォールルールを計画できます。

セキュリティコントロール

セキュリティグループ

セキュリティグループを使用すると、特定のインバウンドおよびアウトバウンドトラフィックをリソースレベルで許可できます。セキュリティグループは、VPC 内のリソースへのアクセスを制御する主要な仕組みとして使用します。

VPC のセキュリティグループ情報を取得するには

次の describe-security-groups コマンドを使用すると、指定した VPC のセキュリティグループが表示されます。

aws ec2 describe-security-groups \ --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \ --query SecurityGroups[*].GroupId
セキュリティグループのインバウンドルールを取得するには

次の describe-security-group-rules コマンドを使用すると、指定したセキュリティグループのルールが表示されます。IsEgress には false を指定しています。

aws ec2 describe-security-group-rules \ --filters Name=group-id,Values=sg-0abcdef1234567890 \ --query 'SecurityGroupRules[?IsEgress==`false`]'
セキュリティグループのアウトバウンドルールを取得するには

次の describe-security-group-rules コマンドを使用すると、指定したセキュリティグループのルールが表示されます。IsEgress には true を指定しています。

aws ec2 describe-security-group-rules \ --filters Name=group-id,Values=sg-0abcdef1234567890 \ --query 'SecurityGroupRules[?IsEgress==`true`]'

ネットワーク ACL

ネットワークアクセスコントロールリスト (ACL) を使用すると、特定のインバウンドおよびアウトバウンドトラフィックをサブネットレベルで許可または拒否できます。ネットワーク ACL は、適切なセキュリティグループを設定せずにリソースをデプロイしてしまった場合の多層防御として使用できます。

サブネットのネットワーク ACL を取得するには

次の describe-network-acls コマンドを使用すると、VPC のネットワーク ACL とそのサブネットの関連付けが表示されます。

aws ec2 describe-network-acls \ --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \ --query "NetworkAcls[*].{ID:NetworkAclId,Subnets:Associations[].SubnetId}"
ネットワーク ACL のインバウンドルールを取得するには

次の describe-network-acls コマンドを使用すると、指定したネットワーク ACL のルールが表示されます。Egress には false を指定しています。

aws ec2 describe-network-acls \ --network-acl-ids acl-0abcdef1234567890 \ --query 'NetworkAcls[*].Entries[?Egress==`false`]'
ネットワーク ACL のアウトバウンドルールを取得するには

次の describe-network-acls コマンドを使用すると、指定したネットワーク ACL のルールが表示されます。Egress には true を指定しています。

aws ec2 describe-network-acls \ --network-acl-ids acl-0abcdef1234567890 \ --query 'NetworkAcls[*].Entries[?Egress==`true`]'

トラフィック管理

トラフィック管理の効果を高めるには、ルートテーブルによってネットワークレベルでルーティングを決定すると同時に、ロードバランシングによるアプリケーションレベルの分散戦略を実行します。

トラフィック管理が重要である理由

ネットワーク管理者は、セキュリティ境界を維持し、パフォーマンス要件を満たしながらトラフィックフローを最適化するように、サブネット、ルーティング、DNS 解決、負荷分散を設計する必要があります。VPC ネットワーク内のこれらのコンポーネントの設定を把握しておくことで、同等の機能を持つネットワーク内のリソースが、VPC ネットワーク内で通信できるものと同じクライアントやデバイスと通信可能であることを確実にできます。

ルートテーブル

ルートテーブルを使用すると、サブネット、VPC、オンプレミスネットワーク、インターネットといったネットワークの境界を越えるトラフィックフローを制御できます。

Amazon VPC コンソールのリソースマップにより、VPC のルートテーブルが可視化されます。

リソースマップを使用して VPC のルートテーブルを表示するには
  1. Amazon VPC コンソールの https://console.aws.amazon.com/vpc/ を開いてください。

  2. ナビゲーションペインで [VPC] を選択します。

  3. VPC のチェックボックスにチェックを入れます。

  4. [リソースマップ] タブを選択します。

  5. [ルートテーブル] ペインには、VPC のすべてのルートテーブルが一覧表示されます。ルートテーブルにカーソルを合わせると、関連するサブネットとネットワーク接続が強調表示されます。詳細を確認するには、リンクをクリックしてルートテーブルの詳細ページを開きます。

ルートテーブルを記述する

describe-route-tables コマンドを使用すると、指定した VPC のルートテーブルとそのサブネットの関連付けを記述できます。

aws ec2 describe-route-tables \ --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \ --query "RouteTables[*].{ID:RouteTableId,Subnets:Associations[].SubnetId}"
ルートテーブルのルートを取得するには

describe-route-tables コマンドを使用して、指定されたルートテーブルのルートを記述します。

aws ec2 describe-route-tables \ --route-table-ids rtb-02ec01715bEXAMPLE \ --query RouteTables[*].Routes

DHCP オプションセット

VPC には、さまざまなネットワーク設定を行うために使用できる DHCP オプションセットがあります。例えば、EC2 インスタンスが既存の DNS インフラストラクチャを使用して内部ホスト名を解決できるように、カスタム DNS サーバーを設定することができます。詳細については、「DHCP オプションセットの概念」を参照してください。

VPC の DHCP オプションを記述する

describe-dhcp-options コマンドを使用して、指定された DHCP オプションを記述します。この例では、describe-vpcs コマンドを使用することで、指定された VPC の DHCP オプションの ID も取得します。

aws ec2 describe-dhcp-options \ --dhcp-options-id "$(aws ec2 describe-vpcs \ --vpc-id vpc-1234567890abcdef0 \ --query Vpcs[].DhcpOptionsId --output text)"

以下は、デフォルトの DHCP オプションを使用する VPC の出力例です。

{ "DhcpOptions": [ { "OwnerId": "415546850671", "Tags": [], "DhcpOptionsId": "dopt-1234567890abcdef0", "DhcpConfigurations": [ { "Key": "domain-name", "Values": [ { "Value": "us-west-2.compute.internal" } ] }, { "Key": "domain-name-servers", "Values": [ { "Value": "AmazonProvidedDNS" } ] } ] } ] }

ロードバランサー

ロードバランシングを使用すると、クライアントからの受信トラフィックを複数のターゲットに分散できます。ロードバランサーでターゲットの状態をモニタリングして、トラフィックを分散処理しているサーバー群から異常なターゲットを自動的に削除し、正常なターゲットのみが使用されるようにします。このため、アプリケーションの可用性とパフォーマンスが向上し、リソース使用率も最適化されます。詳細については、「Elastic Load Balancing ユーザーガイド」を参照してください。

ロードバランサーを記述する

describe-load-balancers コマンドを使用すると、指定された VPC のロードバランサーが表示されます。

aws elbv2 describe-load-balancers \ --query 'LoadBalancers[?VpcId==`vpc-1234567890abcdef0`].LoadBalancerArn'

VPC ネットワークで使用されている可能性のあるオプションのサービスまたは機能を以下に示します。