不懂裝懂AWS — VPC

是祺壬不是棋王
i 發客
Published in
8 min readJan 5, 2020

--

筆者有兩年防火牆開發經驗,所以就試著把 AWS VPC 直接對比到現實防火牆。

VPC ( Vitrual Private Cloud )

每個 Region 的網路互相獨立,同一個 Region 也可以同時建立多個 VPC ,VPC 間彼此獨立不干擾。

用現實生活中的例子來說,公司對外網路會有一台防火牆保護,在防火牆內就像是一個 VPC

Subnet

在 VPC 內,可以再細切成多個子網路,不同子網路間規劃不同的用途。

在公司內部的網路稱為 LAN ( Local Area Network ) 區域網路,通常會配一些保留網段的 IP 。
Class A 網路有 10.0.0.0
Class B 網路有 172.16.0.0〜172.31.0.0
Class C 網路有 192.168.0.0〜192.168.255.0
參考資料:
網路位址與等級

後來又發展了 VLAN ( Virtual Local Area Network ) 虛擬區域網路,可以把 LAN 切割成多個 VLAN ,VLAN 的封包只會在相同 VLAN 間傳遞,不會干擾到其他 VLAN ,每一個 VLAN 就像是一個 Subnet

Route Table

控制 VPC 內,各網段封包該往哪一個網路節點流動。

在防火牆內,也有一樣的路由表,將特定 IP 網段,對應到實體的網路孔。

當防火牆從網路孔收到封包時,會先檢查封包的收件者 IP ,並檢查路由表上,該收件者 IP 的網段是否有紀錄,如果有紀錄,就會將封包往該網路孔送出;如果沒有紀錄,則會依照預設的網路孔送出。

路由表是有順序性的,越早配對成功就不會繼續往下比對。

Internet Gateway

可以讓 VPC 與外部的網際網路溝通。

在防火牆來說,就是 ISP 業者提供的網路設備 IP,就像我們如果是用中華電信提供的固定 IP,會需要設定一個 Gateway Address,只要前述的 Route Table 將封包往 Gateway 送,就可以對外溝通。

Security Group

允許哪些來源 IP ,可以存取 Subnet 的資源

就像防火牆上的管制條例,指定特定的來源 IP ,針對 Subnet 特定的 Port ,才擁有存取的權限,沒有設定的規則,預設就是禁止存取。

NAT Gateway

Network Address Translation Gateway
如果有些資源,如 EC2 instance,只允許內對外的連線,但不允許外對內的連線。
此時需要在 Public subnet 建立一個 NAT Gateway ,賦予一個 Elastic IP ,當 Private subnet 將封包發送到 NAT Gateway 時,會將封包的來源 IP 以 NAT Gateway 的 Elastic IP 置換,對外轉發。

官方文件介紹NAT Gateways

AWS 的 NAT Gateway 與防火牆上的觀念有些不同,找不到適合的例子對應

Elastic IP

固定 IP
EC2 instance 預設會自動分配對外 IP,如果沒有申請固定 IP,只要 EC2 instance 重開機後,就會自動重新分配 IP,維護上會有點麻煩。
Elastic IP 在每個 Region 初始只會給 5 個額度,用完需要再跟客服申請,有使用到才會計費。

Endpoint

在 Private subnet 內,對 AWS 某些服務有需求時,如: S3。
可以使用 NAT Gateway 的方法,允許內對外訪問 S3 ,為了建置 NAT Gateway ,還需要額外配置一個 Elastic IP 。除此之外,還能透過建置 Endpoint ,作為路由表規則之一。

TODO
官方文件:VPC Endpoints

Network ACL

TODO

範例一:Default VPC

來源 [https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html]
  1. 預設的 VPC 會自動配 172.31.0.0/16
  2. 會自動替每一個 AZ 配一個 Subnet ,即 172.31.0.0/20 、 172.31.16.0/20
  3. 在兩個 Subnet 內各有一台 EC2 instance,即 172.31.0.5 、 172.31.16.5
  4. EC2 instance 自動分配外部 IP ,即 203.0.113.17 、 203.0.113.23,只要重新開機,會自動重新分配。
  5. 在對外的網際網路前,有 Internet Gateway:igw-id
  6. 兩個 Subnet 都會遵循 Main route table ,只要收件者 IP 是 172.31.0.0/16 網段,封包就會往內網送;剩下的封包(0.0.0.0/0 表示預設),就往 Internet Gateway:igw-id 送。

範例二:自訂 VPC

來源 [https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html]
  1. 自訂一個 VPC ,並設定網段在 10.0.0.0/16
  2. 在兩個 AZ 各自建一個 Subnet ,即 10.0.0.0/24 、 10.0.1.0/24
  3. 在兩個 Subnet 內各有三台 EC2 instance,即 10.0.0.5 ~ 10.0.0.7 、 10.0.1.5 ~ 10.0.1.7
  4. 沒有 Internet Gateway,所以不能對外,因此EC2 instance 都沒有對外 IP。
  5. 兩個 Subnet 都會遵循 Main route table ,只要收件者 IP 是 10.0.0.0/16 網段,封包就會往內網送。

範例三:部份 Subnet 可以對外連線

來源 [https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html]
  1. 自訂一個 VPC ,並設定網段在 10.0.0.0/16
  2. 在兩個 AZ 各自建一個 Subnet ,即 10.0.0.0/24 、 10.0.1.0/24
  3. 在兩個 Subnet 內各有三台 EC2 instance,即 10.0.0.5 ~ 10.0.0.7 、 10.0.1.5 ~ 10.0.1.7
  4. 其中 Subnet 1 的三台 EC2 instance ,另外分配 Elastic IP ,即 198.51.100.1 ~ 198.51.100.3 ,就算重新開機,IP也不會變。
  5. 在對外的網際網路前,有 Internet Gateway:igw-id
  6. 兩個 Subnet 有各自的 route table :
    在 Subnet 1 ,只要收件者 IP 是 10.0.0.0/16 網段,封包就會往內網送;剩下的封包(0.0.0.0/0 表示預設),就往 Internet Gateway:igw-id 送。
    在 Subnet 2,只要收件者 IP 是 10.0.0.0/16 網段,封包就會往內網送,沒有預設路由,也沒有指定 Internet Gateway:igw-id,所以無法對外。

範例四:部份 Subnet 只可內對外,但外對內被禁止

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html
  1. 自訂一個 VPC ,並設定網段在 10.0.0.0/16
  2. 在兩個 AZ 各自建一個 Subnet ,即 10.0.0.0/24 、 10.0.1.0/24
  3. 在兩個 Subnet 內各有三台 EC2 instance,即 10.0.0.5 ~ 10.0.0.7 、 10.0.1.5 ~ 10.0.1.7
  4. 其中 Public subnet 的三台 EC2 instance ,另外分配 Elastic IP ,即 198.51.100.1 ~ 198.51.100.3 ,就算重新開機,IP也不會變。
  5. 在 Public subnet 多了一個 NAT Gateway ,並分配 Elastic IP ,即 198.51.100.4,負責接收 Private subnet 的封包,內對外轉發。
  6. 其中 Private subnet 的三台 EC2 instance ,是資料庫,所以不允許直接的外對內訪問,但資料庫有可能需要更新軟體,所以需要透過 NAT Gateway 內對外訪問,將來源 IP 換成 NAT Gateway 的 Public IP 。
  7. 在對外的網際網路前,有 Internet Gateway:igw-id
  8. 兩個 Subnet 有各自的 route table :
    在 Public subnet ,只要收件者 IP 是 10.0.0.0/16 網段,封包就會往內網送;剩下的封包(0.0.0.0/0 表示預設),就往 Internet Gateway:igw-id 送。
    在 Private subnet ,只要收件者 IP 是 10.0.0.0/16 網段,封包就會往內網送,剩下的封包(0.0.0.0/0 表示預設),就往 NAT Gateway:nat-gateway-id 送。

參考資料:

What Is Amazon VPC?

設定AWS Lambda開發環境且在VPC內能連到外部網路 — SoarLin ‘s Blog

--

--

是祺壬不是棋王
i 發客

白天在公司是 Full-Stack Engineer ,晚上在家是 Housekeeper ,假日在工房是 Woodworker