AWS 中最最基礎的網路概念
原文:https://grahamlyons.com/article/everything-you-need-to-know-about-networking-on-aws
如果你有在 AWS 有基礎設施服務或應用程式,那麼下面所有這些概念你都將會碰到。
這些不僅僅是網路設施的一部分,根據我的經驗來看,更是其中最重要的部分之一。
VPC
VPC (Virtual Private Cloud ),虛擬私有云,是你的基礎設施所執行在的一個私有網路空間。你可以自己選擇 VPC 的地址空間(CIDR 範圍),例如10.0.0.0/16 。這將決定 VPC 內有多少可分配 IP 。因為 VPC 內的每一臺伺服器都需要一個 IP 地址,所以 VPC 地址空間的大小,將決定該私有網路可容納的資源上限。 10.0.0.0/16 地址空間的可用地址從10.0.0.0 到10.0.255.255 , 一共 2^16, 65,536 個 IP 地址。
VPC 是 AWS 中最基礎的基礎,每一個新建立的賬戶,在每個AZ (Available Zone,可用區) ,都包含一個帶子網 的預設 VPC 。

Subnet(子網)
subnet(子網)是 VPC 的一部分,有其單獨的 CIDR 範圍和流量轉發規則。其 CIDR 範圍是 VPC 的一個子集。舉個例子,10.0.0.0 的一個子網 10.0.1.0/24,地址範圍從 10.0.10.0 到 10.0.1.255 ,一共 256 個 IP 地址。
根據是否可以從外部(公網)訪問進來,子網也經常被稱為“公有”或“私有”子絡。這種可見度是由網路路由規則控制的,每個子網都有其自己的規則。
子網必須位於某個區域具體的 AZ 中,因此,在每個區域劃分子網是很好的做法。如果你要劃分公有子網和私有子網,那麼,在每個 AZ 都要有一套。

Availability Zones (可用區)
前面我們說到,每個 Availability Zone 必須有子網,可是,這到底是什麼意思呢 ?
在 AWS 中,為了保證每個地區資源的極高的可用性。每個區域(zone)的資源都被劃分為 2 個或更多不同可用區(AZ)。對每個區域(zone)來說,基本上即使其他所有 AZ 都中斷了,也要確保至少有一個 AZ 還能正常執行。

Routing Tables(路由表)
路由表,是一系列規定子網 IP 資料包如何傳輸到其他不同 IP 地址的規則。
每個 VPC 內,都有一個預設的路由表,只允許流量在本地(VPC 內部)轉發。如果某個子網沒有關聯路由表,則使用該預設路由,也就是一個“私有”子網。
如果你想要能從外部訪問子網,那麼你就需要建立一個路由表,顯式地指定該規則。這樣,關聯該路由表的子網就是“公有”子網。
Internet Gateways(網際網路閘道器)
將子網配置為可從外部訪問的路由表,需要藉助網際網路閘道器來控制外部資料包出入 VPC 。
例如,建立一個閘道器,配置規則為所有去往 0.0.0.0/0 的資料包均需透過閘道器 。

NAT Gateways(NAT 閘道器)
如果你有一臺在 AWS 私有子網內,不允許公網訪問的 EC2 例項,那麼該例項的資料也沒辦法傳送到公網。我們需要一種機制,將資料包發出去,並且正確地接收到對端的響應包。這便是 NAT ——網路地址轉換,跟家裡的 wifi 路由器很類似。
NAT 閘道器是位於公有子網的一個裝置,負責接收從私有子網發往公網的資料包,轉發至其目的地址;同時轉發返回的資料包到源地址。
如果你 VPC 中私有子網中的例項不需要公網訪問的話,那麼 NAT 並不是必需的。只有你的例項需要訪問諸如外部 API,SaaS 資料庫等時,你才需要配置 NAT 閘道器。或者是使用 AWS 提供的 NAT 閘道器資源(由 AWS 配置,更易於使用者管理)。

•NAT 閘道器位於公有子網中•從私有子網發出對某個公網地址的請求•根據路由表規則,請求資料包被轉發到 NAT 閘道器•NAT 閘道器將資料包轉發出去
Security Groups(安全組)
VPC 網路安全組標誌 VPC 中的哪些流量可以發往 EC2 例項或從 EC2 發出。安全組指定具體的入向和出向流量規則,並精確到源地址(入向)和目的地址(出向)。這些安全組是與 EC2 例項而非子閘道器聯的。
預設情況下,流量只允許出,不允許入。
入向規則可具體指定源地址——CIDR 段或者另一個安全組亦或是埠範圍。當指定的源地址為另一個安全組時,該安全組必需位於同一個 VPC 。例如,VPC 預設的安全組允許任意來自同一安全組的訪問流量。如果將該安全組應用於 VPC 內建立的所有資源,那麼該 VPC 中的資源之間將可以互通。

•例項 (i-67890) 的安全組 (sg-abcde) 允許來自 443 埠的 TCP 流量•來自 IP 10.0.1.123 22 埠的請求不被允許透過•來自 443 埠的請求被允許透過
所有這些組裝起來
整個虛擬網路完整的架構如下圖所示:公有子網/私有子網跨越 AZ 將整個網路劃分為兩部分。NAT 位於公有子網,用路由表指定資料包的路由規則。 EC2 例項將執行於任意子網,附加安全組。

Reference
•1.Amazon Virtual Private Cloud 使用者指南 https://docs.amazonaws.cn/vpc/latest/userguide/what-is-amazon-vpc.html