攻城獅
Not a programmer 不工程的攻城獅

Not a programmer 不工程的攻城獅

Aws 網路架構- 單一 Vpc

AWS Network Architecture - Single VPC

攻城獅's photo
攻城獅
·Aug 16, 2022·

Subscribe to my newsletter and never miss my upcoming articles

Play this article

簡述

此篇將介紹單一 VPC 情況下,AWS 的解決方案有哪些,也提供了哪些服務和整個網路流量的流程。

AWS Network Architecture

從上圖可以先列出有的服務

  • VPC
  • Subnet
  • Network ACL
  • Security Group
  • Internet Gateway
    • Elastic IP
    • egress-only Internet Gateway
  • NAT Gateway / NAT Instance

VPC

一個 VPC 是邏輯層上的網路隔離,可以想像其中有獨立的網域 IP 和網路環境。VPC 在一個 Region,跨 AZ 的網路環境(無法 Cross Region)。一個 Region 中可以有多個 VPC。

在建立 VPC 的時候,需要指定 IPv4 的 CIDR 範圍(必須的),此外也能設定 IPv6 的範圍。

  • IPv4 (CIDR 接受 16 ~ 28)
    • CIDR 手動設定
    • IPAM 管理
  • IPv6
    • IPAM 管理
    • Amazon 提供(固定長度為 /56
    • 自有的 IPv6 CIDR

需要注意建立時的 CIDR 範圍不能與現有的其他 VPC 重疊,可以參考限制。預設 一個 Region 最多有 5 個 VPC,可以申請擴充最多到 100 個。

最後可以設定 Tenancy,這是表示說當選擇為 Dedicated 時,代表在這 VPC 中使用的 EC2 都會是 dedicated tenancy instances,不管其 tenancy 設定為何。

IPAM 是一個 IP 管理服務,後續會再詳細介紹。這邊先知道如果選擇由 IPAM 管理的話,則 VPC 的 CIDR 大小會由 IPAM 的規則來規範。

IPv6 如果選擇使用 Amazon 提供的話,會像 Amazon 的 IPv6 位址池申請,會固定其長度在 /56,無法做修改。

IPv4 最多可以跟 5 個 CIDR 範圍關聯也可以取消關聯,但是只能全部取消,不能選擇 CIDR 中的一部分取消。

如果要刪除 VPC 的話,需要先中止或刪除 VPC 內的 ENI。

DNS resolution 是由 Route53 resolver 處理,如果沒有開啟此設定就會需要自己建立 DNS Server。

dns-res.png

DNS hostnames 則是每個有 Public IP 的 Instance 都會有一個對應的 Public hostname

dns-host.png

如果 Route53 有設定 Private host zone 就必須開啟以上兩個 DNS 設定。

預設 VPC

一開始使用 VPC 時,AWS 會在每個 Region 建立預設的 VPC。預設會附帶以下服務。

  • VPC

    • 預設 CIDR 172.31.0.0/16
  • Public subnet

    • 預設每個 AZ 有 CIDR /20 長度
  • Internet gateway
  • Network ACL
  • Route table:將 0.0.0.0/0 指向 Internet gateway
  • DNS options set

default VPC

Subnet

VPC 下可以再區分不同的 Subnet,在實際場景上我們通常可能會區分三層式網路架構:Access layer、Application layer、Core layer。但是如果再簡化一點,我們可以就是分兩層:Public layer 和 Private layer。後續的服務也會先依照兩層的方式做說明。

在 VPC 有說到是單一 Region 的,Subnet 則是單一 AZ 的,而且 CIDR 的範圍是要在 VPC CIDR 的範圍內,所以在建立時需要指定 AZ 和 CIDR。根據 VPC 的設定 subnet 也可以決定是只要有 IPv4 還是 IPv6 還是兩者皆有。

要注意 Amazon 會預留 5 個 IP 位置,無法使用每個 Subnet CIDR 中的前四個 IP 地址和最後一個 IP 地址,並且無法將這些 IP 地址指派給資源,如 EC2 執行個體。IPv4 和 IPv6 都會。

Subnet

而大多數的網路服務都會是依靠在 Subnet 之下,通常如果有連接 Internet gateway 的 subnet 為視為是 Public subnet,反之就是 Private subnet。Private subnet 無法連向外網也無法被外網連接,只能透過 Public subnet 做連線。

Route Table

Route Table 包含一組規則(稱為 route),用來決定 Subnet 或 Gateway 的網路流量被導向到哪裡。每個 VPC 中會有一個預設的 Main route table 會控制所有並未與任何其他 Route Table 建立關聯之 Subnet 的流量。Route Table 一但跟 Subnet 做關聯就無法被刪除。實作上建議保留預設 Route Table,建立其他 Route Table 做規則上的疊加。Route Table 跟 Subnet 之間的關係是多對一,一個 Subnet 只能關聯一個 Route Table,但一個 Route Table 可以給多個 Subnet 使用。

預設下 VPC 中 Subnet 之間的流量會依靠 Local route 達到互通,而 Local route 是預設且無法修改的,只要是沒有跟其他 Route Table 做關聯的流量就會自動被其管理。IPv4 和 IPv6 的 route 是需要分別設定的。當不同的 Subnet 之間要溝通的時候,實際上會先透過 local route 做中繼站。

Route talbe

  • Destination:您希望 IP 地址範圍(目標 CIDR)的流量要被導向
  • Target:流量要被導向的目標

Gateway Route Table

如果 Route Table 有關聯到 Internet Gateway 或是 Virtual Private Gateway 的話,可以被稱為 Gateway Route Table,用來控制進入到 VPC 的流量。

其他再額外延伸的還有跟 Transit Gateways 關聯的 Transit gateway route table 和跟 AWS Outposts 關聯的 Local gateway route table。

Network ACL

Network ACL 可以看作是 Subnet 層級的防火牆服務,用來允許或拒絕 Subnet inbound 和 outbound 的流量。系統一樣會有預設的 Network ACL,設定為允許所有流量流進和流出其相關聯的 subnet。

Network ACL 跟 Subnet 的關聯跟 Route Table 一樣,多對一的關係。沒有關聯的就會使用預設的 Network ACL。

Network ACL 是屬於 Stateless 服務,所以 inbound 和 outbound 要分別設定,可以看作是處理黑名單的管理,Rule 值越小權限越高,相同值時則以 DENY 為優先。

Network ACL

要注意規則上的設定,不然可能會造成一些 AWS 服務不能正常運作。例如可能把 ELB status check 不能正常運作。

Security Group

Instance 層級的防火牆設定,屬於 stateful 服務因為其狀態會保存,當 Inbound 中允許的規則會自動開放對應的 outbound。即使移除 allow outbound traffic 的規則依舊還是可以連通。是唯一可以用來管控 Subnet 之間的流量方式。只能設定 allow rules,管控白名單,所以跟 Network ACL 不同沒有 Deny。其底層是使用了 Elastic Network Interface 類似虛擬網卡的方式做處理。預設阻擋所有 inbound,但允許所有 outbound。要注意 Name 在 VPC 中要是唯一的。


前面的服務都在介紹的是流量在 VPC 內的控制,接下來的部分則是往外連線出去的服務

Connectivity overview

Internet gateway

Internet Gateway 是一個水平擴展具有備援且高可用的 VPC 元件,可以讓 Subnet 中的服務連線到外部網路,或是讓外部網路做連線,也因此跟 Internet Gateway 做關聯的 Subnet 會被稱作 Public Subnet。主要的兩個功能:可以在 VPC Route Table 中作為外網流量的目標,以及針對已獲 Public IPv4 Instance 執行 NAT。

Elastic IP

如果要對外存取的話,該 Instance 需要具有 Public IP 或是有跟 Elastic IP 做關聯。而 Elastic IP 是一個靜態的 Public IP,可以跟任意的 Instance 或 Network Interface 做關聯。有點像是你就固定好一個 IP 位址,然後可以決定要指派到哪個 Instances。不管換到哪個 Instance,其對外的 IP 都是固定的。

Egress-only Internet Gateway

算是一個分支的服務,主要是提供 Private Subnet 中 IPv6 對外網存取的管道(但不包含讓外網存取)。IPv4 的話則是會使用 NAT。

NAT gateway / NAT instance

如果今天在 Private Subnet 中的服務需要存取外網或是其他 VPC 的服務,就需要使用 NAT。可以選擇使用 AWS 管理的 NAT Gateway 或是在 EC2 上建立自己的 NAT instance。

NAT Gateway

  • 是獨立 AZ 的,可以多個 AZ 共用一個,或是每個 AZ 有各自的 NAT Gateway
  • 支援以下通訊協定:TCP、UDP 和 ICMP
  • 支援 5 Gbps 的頻寬,並可自動擴展至 100 Gbps。
  • 每秒可以處理 100 萬個封包,並自動擴展至每秒 1000 萬個封包。若超過會丟棄封包
  • 可支援最多 55,000 個連至每個唯一目標的同時連線

NAT Device

需要建立自己的 NAT AMI,因為 AWS 自 2020/12/31 已正式停止支援,會建議直接使用 NAT Gateway 更快。需要建立在 Public Subnet 中,需要關閉 Source & Destination Check,才能 Proxy 其他 Instance 的封包,需要額外設定 Security Group,Private Subnet 也需要設定 Route 導向 NAT Instance。其乘載量取決於 Instance 的規格,還需要另外自我處理 HA 的問題。

Reference

-使用 Amazon VPC 建置模組化且可擴展的虛擬網路架構

Did you find this article valuable?

Support 攻城獅 by becoming a sponsor. Any amount is appreciated!

Learn more about Hashnode Sponsors
 
Share this

Impressum

As smiple as possible