Skip to main content

Command Palette

Search for a command to run...

Aws 網路架構- 單一 Vpc

AWS Network Architecture - Single VPC

Published

簡述

此篇將介紹單一 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 建置模組化且可擴展的虛擬網路架構

More from this blog

如何開始入門軟體工程領域 - 名詞解釋(長期更新)

現在應該開始有很多人想要踏入軟體工程的領域,但在進入這個領域之前,覺得先了解一些名詞,可以在入門時更有方向也更知道要用什麼關鍵字去找尋有用的資訊。這篇文章就是想要幫助想要入門的人理解一些軟體工程裡的專有名詞。 作業系統 這一區塊主要解釋跟作業系統層面相關的名詞 英文中文解釋 Operation system 簡稱 OS | 作業系統 | 就是電腦的作業系統,是三大作業系統分別是:Linux、Windows、macOS | | Linux | | 自由和開放原始碼的 UNI...

May 10, 2023

我的 MacBook Pro (Apple Silicon) 設定

現在開始因為 ChatGPT 的出現,各種 AI 助手的功能都跑出來了。想想自己用了許久的環境設定也應該要來重新審視和建立新的開發環境了,僅此紀錄我個人的環境配置步驟和設定。 環境前置步驟 還原 MacBook Pro 至全新環境 macOS(全部資料刪除) 設定好初始設定後,登入 Apple ID 進入 App Store 確定 macOS 版本和預設 APP 都更新到最新 macOS 版本 到系統設定調整所有設定至個人習慣的設定 三指拖移 觸控板手勢開啟 防火牆開啟 輸入法設定...

Apr 25, 2023

ChatGPT 下的發展預想

從 ChatGPT 問世到現在,有許許多多的文章和討論出來。先從最早的 Google 要完蛋了,到後來的工作要被取代了,工程師失業了。 我就比較沒有想要馬上出來評論一下,我喜歡讓子彈飛一會兒。跟討論一下我自己比較在意的討論點。 Google 為什麼慢了? 結論:因為他需要更小心 很多人說 Google 怎麼被微軟搶先了一步。剛開始 Bing 說要加上 AI 的時候大家都在說 Google 怎麼慢了。我就馬上跑去看 OpenAI 的網站,靠北呀啊就 Azure 贊助的。那當然在正式上線 ChatG...

Mar 23, 2023

不工程的攻城獅

223 posts

I am not a programmer because I am not good at programming. But I do programming. Love to learn new things. An animal lover and a dancer. My oshi is 潤羽るしあ.