Amazon VPC 基礎知識介紹

AWS 會在世界許多區域建立基礎設施,每一個 Region 就可以代表一個區域(例如,東京),在 Region 中,通常會有多個 AZ (Ability Zone),一個 AZ 是一個邏輯資料中心,這裡面會有多個實體資料中心。

Amazon 的 VPC (Virtual Private Cloud ) 是一個虛擬的網路區域,他是私有的會與其他帳號隔離的虛擬網路,可以將 AWS 的服務資源在 Virtual networks 中運行(也可以說,每一個實例資源創建時,就必須指定 VPC 及 subnets ),這些服務之間可以透過 VPC 網路來溝通,在雲端與本地環境無縫接軌,或者在雲端建立起一套私有的網路環境架構。

在接下來會透過幾個部分來階段是的說明 VPC 概念:

Public , Private 及 Elastic IP 地址

在AWS ,我們要先選擇 Region,接著在這 Region 選擇 VPC。

所以,VPC 主要存在單一個 Region 裡面,我們可以在 VPC 中設定是開放或私有的網路,並且可以彈性的設定 IP 地址範圍、子網路(subnets),路由表及 Gateway;在 VPC 可以同時使用 IPV4, IPV6 。

在創建 VPC 時,必須指定 IPV4(or 6), CIDR (Classless Inter-Domain Routing) 主要從 /16~/28

例如: 10.0.0.0/16 , 10.0.0.0/28

Public 與 Private Subnets

前面提到,VPC 是一個 CIDR 模組,有了 VPC 就會有虛擬網路,就可以在這個虛擬網路啟動 AWS 資源。

在一個 Region 要具體的使用 VPC ,就要再將 VPC 切分成一個或多個 subnets,一個 subnets 定義了一個實際的 IP 地址,每一個 subnet 可以指向一個或多個 AZ。

在 subnets 也可以指定 IPV4(or 6) 的 CIDR,但限制是 CIDR 必須在 VPC 範圍內。

Subnets 可以分為 Public 與 Private,public 可以在公開網路進行訪問,private 則不可在公開網路訪問。

通常在 AWS Infra 中,會強調 HA (high availability, 高可用性),避免單點 AZ 故障導致服務中斷,維持系統高度無中斷持續執行的能力。 因此會希望我們系統在部署時,一個 subnet 可以指向不同的 AZ。

例如,我們透過 AMI (操作系統應用程式及配置) 創建了一個實例,這些實例創建時會需要指定要放在哪一個 Region 的 VPC ,以及 VPC 中的 Subnets 是在哪一個 AZ。

Internet Gateways

一個 VPC 如果要讓外部的服務可以訪問,可以透過 VPC dashboard 裡面的 Internet Gateway 設定。

所以 Internet Gateways 主要符合 SNAT

internet gateway 的網關名稱前綴都會是:igw-*

Internet gateway 具有可橫向拓展及支持高度可用,可以確保 VPC 與 instance 高可用性,不會受到頻寬及網路流量的限制。

Route Tables

在 VPC route tables 可以設定路由規則,並且每一個 subnets 都要明確的在 route tables 建立關聯。

透過這些規則來判斷網路流量是來自 subnets, gatewats ,並且透過 route table 將 Internet Gateway 與 subnets 之間建立關聯。

每一個 route table 設定都要指定目的地與目標要連結到那裡,例如,下方設定一個 0.0.0.0/0 所有 IPv4 要連結到目標 internet gateway

目的地 目標
0.0.0.0/0 igw-11daf932

IPv4與 IPv6 不可同時設定,如果要設定 IPv6 則要透過目的地 ::/0 以及設定他的目標。

VPC 的 route tables (路由表) 到 internet 的"可路由流量" 提供 SNAT (Source NAT) 將私有IP地址轉換為公有IP;同時提供 DNAT (Destination NAT) 把公網的IP地址轉換為私網IP位置。

也就是說,當內部Service 需要對外公開時,都會通過 igw 將流量公開出去,這時 igw 工作會是 SNAT,並且 igw 上面會有公開的IP地址可以放外部訪問;如果是外部服務訪問這個公開地址,公開地址會落在 igw上,這時 igw 的工作就會是 DNAT。

在企業中,多數資源通常都會需要私有子網,不能被公開訪問;因此,可以這樣定義:

當一個 subnets 在 route table 沒有通向 internet gateway 的路由設定,那麼他就會是 private。

NAT Gateway

在企業的資源多數都需要設定私有子網,但實際應用時,我們在管理過程還是需要讓資源可以訪問外部網路,例如我們需要透過外部網路來安裝一些套件。

私有子網如何訪問外部網路?在 AWS 提供兩種設備 (1) NET instance (2) NAT Gateway

NET instance 是一個 EC2 instance ,透過 AMI (Amazon Machine Images) 創建實例,在透過 route table 指向這個 instance

NAT Gateway 提供更好的可用性,通常會建議使用 NAT Gateway。

NAT Gateway 名稱前綴是: nat-gateway-*

使用時,以下幾點需要留意:

  • subnet 指定 NAT Gateway 之後,就不能再變更,若要修改則需要先刪除再重新建立;

  • NAT Gateway 是單向。

混合雲與 VPN

混合雲,就是把自己的私有雲跟公共雲打通,其中連結的方式就可以透過 VPN。

採用 VPN 的連結方式就是把私有雲的數據中心連結到 AWS VPC 中。

在這連接的兩專中, AWS 這端稱為虛擬專用網關(Virtual Private Gateway)在 local 則稱為客戶網關(Customers Gatway),可能是物理設備或VPN軟體。

Virtual Private Gateway 在創建時,可以選用 AWS ASN 或自定義 ASN,創建的名稱前綴通常是 vgw-*

AWS 使用的是標準的 VPN 協定,對於客戶網關不會有太多要求,並且會提供許多客戶 (Cisco, Dell, Juniper…)網關的配置案例。

Network ACLs

Network ACLs(network access control list) - NACL 存取控制清單在 VPC 架構中可以當作防火牆,來控制 subnets 流量進出。

也就是說,每個 subnet 都必須建立 ACL 關聯,並且一個 subnet 只能與一個網路 ACL 相關聯,如果沒有指定則會使用預設的 ACL。

在設定 NACL 時,在

下方是官方提供的 ACLs 範例,可以了解一個 ACLs 可以配置的項目

Inbound
Rule # Type Protocol Port range Source Allow/Deny
100 All IPv4 traffic All All 0.0.0.0/0 ALLOW
* All IPv4 traffic All All 0.0.0.0/0 DENY
Outbound
Rule # Type Protocol Port range Destination Allow/Deny
100 All IPv4 traffic All All 0.0.0.0/0 ALLOW
* All IPv4 traffic All All 0.0.0.0/0 DENY

Security Groups

在資訊安全領域中,有一句話:多一層保護,多一分安全。

在AWS 則透過以下分層來多重進行安全管控:

最外層次是 internet gateway > route table, > NACL (無狀態防火牆) > security group (有狀態防火牆) > security key

大致可以方為以下層次:

VPC > subnets > NACL > Security Groups > Instance (EC2)

Security group 是一個防火牆的解決方案,可以針對傳入即傳出流量,port, ip, 協議 來進行安全限制。

在使用 AWS 時,會建議使用 Security Group 減少我們自行在 instance 裡面設定防火牆的開銷。

最典型的網路系統安全應用,通常都是分成: Web 層 (Https/Http),App 層(8080, 80..),DB 層(3306, ….)

就可以通過 Security group 將這些規則設定為白名單,其他規則則一律阻擋。

所以我們可以看到,NACL 主要可指定 subnets 驗證規則,SG 則是提供給 Instance 的驗證規則。

SG 是一個 stable 的驗證,會記得我們曾經允許過的請求,當請求經過 SG 後,離開時就不會再驗證。而 NACL 則在每次經過時,都會需要再驗證。