描述 VPC 網路架構 - Amazon Virtual Private Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

描述 VPC 網路架構

Amazon VPC 可讓您在 AWS 雲端中定義邏輯隔離的虛擬網路,稱為虛擬私有雲端 (VPC)。建立單獨的 VPC,依工作負載或組織實體來隔離基礎結構。您可以選取 IP 位址範圍、設定路由以及新增網路閘道 (VPC 互連的網路閘道、VPC 與網際網路連線的網路閘道、VPC 與您自己的企業網路連線的網路閘道),來設定 VPC。您可以在 VPCs 中啟動 AWS 資源,例如 EC2 執行個體或 RDS 執行個體。

下表描述了 VPC 網路的關鍵特性。網路管理員可依據此指引來描述 VPC 網路的架構與組態。掌握這些資訊,管理員便能在內部部署環境或透過其他雲端服務供應商,建立功能等效的網路。

特性 Description
地理位置 Amazon VPC 託管於全球所有 AWS 區域。您可以為您的 VPC 網路選取最接近您客戶的 AWS 資源區域。
子網路 您為 VPCs 定義的子網路會定義網路邊界,並判斷 AWS 資源的 IP 地址。您可以在多個可用區域中新增子網路,提高資源的可用性。
網路連線 您連接至 VPC 或子網路的閘道,可提供 VPC 網路與其他網路 (例如其他 VPC 或子網路、網際網路或內部部署網路) 之間的連線能力。
安全控制項 您為 VPC 建立的安全群組會控管進出相關聯資源 (例如運算資源、資料庫資源與負載平衡器) 的流量。每個子網路皆具備網路 ACL,可控管進出子網路的流量。
流量管理 路由規則可控管子網路、VPC 與外部位置之間的流量傳輸。Elastic Load Balancing 提供的負載平衡器會將傳入流量分配至多個目標,例如 EC2 執行個體、容器與 Lambda 函式。

地理位置

Amazon VPC 適用於全球每個 AWS 區域。各個 區域為獨立的地理區域。當您在接近大多數使用者的區域中為資源建立 VPC 時,可降低網路延遲。

您可以使用 Amazon EC2 全域檢視功能,透過圖形化使用者介面列出所有區域中的 VPC (目前沒有等效的程式設計介面)。使用 Amazon VPC 主控台、 AWS API 和 AWS 命令列界面,您必須個別列出每個區域的 VPCs 和 VPC 資源。

為什麼這很重要

確認 VPC 的部署位置後,您可根據需求決定是否在相同或不同位置設定功能等效的網路環境。

跨所有區域取得 VPC 的摘要資訊
  1. 前往 https://console.aws.amazon.com/ec2globalview/home 開啟 Amazon EC2 全域檢視主控台。

  2. 區域總管索引標籤的摘要下,查看 VPC 的資源數量,其中包括 VPC 數量與區域數量。這包括代表您 AWS 建立的預設 VPCs,以及您建立的非預設 VPCs。點選帶有底線文字,即可查看 VPC 數量在各區域的分佈情況。如果某個區域只有一個 VPC,該 VPC 很可能是該區域的預設 VPC。

  3. 全域搜尋索引標籤上,選取用戶端篩選條件資源類型 = Vpc。您可以透過指定區域或標籤進一步篩選結果。

使用 取得區域中VPCs AWS CLI

使用如下 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. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中,選擇 VPCs (VPC)。

  3. 選取 VPC 的核取方塊。

  4. 選擇資源地圖索引標籤。

  5. 在 VPC 窗格中,選擇顯示詳細資訊子網路窗格會列出 VPC 中的所有子網路,也會顯示各子網路的 IP 位址範圍。將滑鼠游標暫留在子網路上,可反白顯示其相關聯的路由表與網路連線。如需詳細資訊,請按一下連結以開啟子網路詳細資訊頁面。

使用 描述 VPC 的子網路 AWS CLI

使用如下 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、可用區域 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 是否使用網際網路閘道、僅限輸出網際網路閘道、NAT 閘道或閘道 VPC 端點。資源地圖不會顯示任何正在使用的傳輸閘道、對等互連、虛擬私有閘道或其他類型 VPC 端點。若要取得某個 VPC 的所有閘道與對等互連的完整清單,您可以使用主控台、API 或命令列介面逐一描述。

重要性說明

了解 VPC 網路提供的連線能力後,您可確保功能等效網路中的資源,能與相同的本機及遠端資源維持通訊。

透過資源地圖檢視 VPC 的網路連線
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中,選擇 VPCs (VPC)。

  3. 選取 VPC 的核取方塊。

  4. 選擇資源地圖索引標籤。

  5. 在 VPC 窗格中,選擇顯示詳細資訊網路連線窗格會列出所有網際網路閘道、僅限輸出網際網路閘道、NAT 閘道與閘道 VPC 端點。如果資源類型不明確,將滑鼠游標暫留在網路連線的連結圖示上,即可檢視對應的 URL。此 URL 是該資源在主控台中的連結,包含資源類型與資源 ID (例如 internetGatewayId=igw-0123456780abcdef)。

使用 取得 VPCs的網路連線 AWS CLI
  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 命令,取得指定區域的僅限輸出網際網路閘道。--query 參數僅包含輸出中的指定欄位。您可以視需要包含其他欄位。

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

    以下為範例輸出。這些欄顯示 VPC ID 與僅限輸出網際網路閘道 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 命令,取得指定區域的傳輸閘道 VPC 連接項目。--query 參數僅包含輸出中的指定欄位。您可以視需要包含其他欄位。

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

    以下為範例輸出。這些欄位顯示 VPC ID、傳輸閘道 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,第二個欄位顯示 VPC 端點類型。第三個欄位取決於端點類型,顯示的內容可能是服務名稱、資源組態 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 中部署的資源。

重要性說明

確定允許抵達子網路與資源的傳入流量,以及允許離開子網路與資源的傳出流量後,即可規劃功能等效網路所需的防火牆規則。

Security groups (安全群組)

安全群組允許在資源層級控管特定的傳入與傳出流量。安全群組是控制存取 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 命令,顯示指定安全群組的規則,其中 IsEgressfalse

aws ec2 describe-security-group-rules \ --filters Name=group-id,Values=sg-0abcdef1234567890 \ --query 'SecurityGroupRules[?IsEgress==`false`]'
取得安全群組的傳出規則

使用如下 describe-security-group-rules 命令,顯示指定安全群組的規則,其中 IsEgresstrue

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 的規則,其中 Egressfalse

aws ec2 describe-network-acls \ --network-acl-ids acl-0abcdef1234567890 \ --query 'NetworkAcls[*].Entries[?Egress==`false`]'
取得網路 ACL 的傳出規則

使用如下 describe-network-acls 命令,顯示指定網路 ACL 的規則,其中 Egresstrue

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

流量管理

有效的流量管理需結合路由表提供的網路層級路由決策,以及負載平衡機制提供的應用程序層級分配策略。

重要性說明

網路管理員必須設計子網路、路由、DNS 解析與負載平衡機制,在維持安全邊界與效能需求的同時,實現流量傳輸最佳化。記錄 VPC 網路中這些元件的組態有助確保功能等效網路中的資源,能與 VPC 網路中相同外部用戶端或裝置維持通訊。

路由表

路由表會決定網路流量如何跨子網路、VPC、內部部署網路與網際網路等網路邊界傳輸。

Amazon VPC 主控台中的資源地圖提供 VPC 路由表的視覺化呈現。

透過資源地圖檢視 VPC 的路由表
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中,選擇 VPCs (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 選項集,可用於設定各種網路。例如,您可以設定自訂 DNS 伺服器,讓 EC2 執行個體可以透過現有的 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 網路中可能正在使用的選用服務或功能: