+86 13541016684Mon. - Fri. 10:00-22:00

AWS VPC

AWS VPC

AWS VPC

VPC

Virtual Private Cloud,你可以完全自訂這個網路裡面的subnet、ip range、routing table、gateway、security…等,當然也可以加EC2的instance進去。

VPC及相關resource的對應關係

  • 一個Region可以有多個VPCs
  • 一個VPC可跨多個AZs
  • 一個AZ可以有多個subnets
  • 一個subnet可以有多個instances

Subnet

是一段IP位址的範圍,aws的resource都可以擺在subnet裡面。一般會分為兩種:

  • Public Subnet:可以連上Internet的叫做Public Subnet
  • Private Subnet:沒辦法連上Internet的叫做Private Subnet

default VPC

如果你的region只有EC2-VPC而沒有EC2-Classic的話,在新增instance的時候就會有一個預設的VPC可以使用,並且有以下特性:

  • 每一個instance都有一個public IP
  • 網段預設為172.31.0.0/16,在新建instance的時候會自己切兩個subnet,分別為172.31.0.0/20及172.31.16.0/20。

nondefault VPC

如果想要自建私有雲,或是想客製化網路環境的話,可以自建VPC實作。 因為自建VPC並不提供Public IP,所以必須搭配EIP及NAT…等技術才能與Internet連線 。基本上有以下四種情境,其他的變型情境都可以用這四種來衍生。

  1. Public Subnet – 用來提供公眾型的應用服務幾乎都應該適用,可大大增加安全性,也能自定內部IP位置
  2. Public + Private Subnet – 有些用戶會想把DB Server等重要服務移至不能直接存取的區域,便可選此模式
  3. VPN + Public + Private Subnet – 就是上一個模式中加上一個Hardware VPN設備來與企業的VPN設備串接
  4. VPN + Private Subnet – 把AWS完全用來當做私有雲,一樣用Hardware VPN設備來與企業的VPN設備串接

常見使用情境

由於第三及第四種使用情境比較不符我們的使用方式,所以在此不深入研究,這邊只介紹第一及第二種情境。

Public Subnet

Public Subnet

基礎元件

  • VPC底層使用10.0.0.0/16的網段,可以提供65536個private IP
  • 一個subnet,並且設定為10.0.0.0/24,這可以提供256個private IP。
  • 一個Internet Gateway,這可以讓VPC連到Internet以及其他的AWS服務上面(例如S3)。
  • 一個EC2 instance,這個instance必須要加到這個VPC裡面才能跟其他instance連線,並且啟用EIP,這樣子instance才有Public IP可以讓Internet連線。
  • 一個route table,控制VPC裡面的所有resource要如何連線。

路由規則

Destination Target Description
10.0.0.0/16 local 表示所有連線到10.0.0.0/16網段的request,都要走local內網
0.0.0.0/0 igw-xxxxxxxx 表示所有連線到0.0.0.0/0網段的request,都要走到internet gateway,這樣才能連線到Internet

安全規則

流入
Source Protocol Port Range Comments
0.0.0.0/0 TCP 80 允許Internet可以讓所有HTTP連線連進來
0.0.0.0/0 TCP 443 允許Internet可以讓所有HTTPS連線連進來
x.x.x.x TCP 22 允許特定IP可以使用SSH連進來
流出
Destination Protocol Port Range Comments
0.0.0.0/0 TCP 80 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用
0.0.0.0/0 TCP 443 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用

Public + Private Subnet

 

基礎元件

  • VPC底層使用10.0.0.0/16的網段,可以提供65536個private IP
  • 一個public subnet,並且設定為10.0.0.0/24,這可以提供256個private IP。
  • 一個private subnet,並且設定為10.0.1.0/24,這可以提供256個private IP。
  • 一個Internet Gateway,這可以讓VPC連到Internet以及其他的AWS服務上面(例如S3)。
  • 將要對外的instance放在public subnet,例如web server;將不對外的instance放在private subnet,例如ap server和db server。
  • 一個NAT的instance,讓private subnet的instance利用這個instance可以與internet連線,主要功能是拿來做系統更新用。使用VPC Wizard建立VPC時,AWS會自己新增一個m1.small的instance,並且使用的是amazon linux,而且也會自己新增一個EIP並綁在NAT instance上面。
  • 兩個route table,分別控制VPC裡面public及private subnet的所有resource要如何連線。

路由規則

Public subnet
Destination Target Description
10.0.0.0/16 local 表示所有連線到10.0.0.0/16網段的request,都要走local內網
0.0.0.0/0 igw-xxxxxxxx 表示所有連線到0.0.0.0/0網段的request,都要走到internet gateway,這樣才能連線到Internet
Private subnet
Destination Target Description
10.0.0.0/16 local 表示所有連線到10.0.0.0/16網段的request,都要走local內網
0.0.0.0/0 eni-xxxxxxxx / i-xxxxxxxx 表示所有連線到0.0.0.0/0網段的request,都要走到特定的網路介面(eni-xxxxxxxx)或NAT instance(i-xxxxxxxx),這樣才能透過Public subnet的NAT instance連線到Internet

安全規則

WebServerSG

給Public subnet裡面的web server使用

流入
Source Protocol Port Range Comments
0.0.0.0/0 TCP 80 允許Internet可以讓所有HTTP連線連進來
0.0.0.0/0 TCP 443 允許Internet可以讓所有HTTPS連線連進來
x.x.x.x TCP 22 允許特定IP可以使用SSH連進來
流出
Destination Protocol Port Range Comments
0.0.0.0/0 TCP 80 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用
0.0.0.0/0 TCP 443 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用
DBServerSG-id TCP 3306 允許套用這個rule的instance,可以直接連線到DB server(此處以MySQL為例)
NATSG

給Public subnet裡面的NAT instance使用。

流入
Source Protocol Port Range Comments
10.0.1.0/24 TCP 80 允許讓private subnet的HTTP連線連進來
10.0.1.0/24 TCP 443 允許讓private subnet的HTTPS連線連進來
x.x.x.x TCP 22 允許特定IP可以使用SSH連進來
流出
Destination Protocol Port Range Comments
0.0.0.0/0 TCP 80 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用
0.0.0.0/0 TCP 443 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用
DBServerSG

給Private subnet裡面的DB instance使用。

流入
Source Protocol Port Range Comments
WebServerSG-id TCP 3306 允許public subnet可以用DB connection(此處以MySQL為例)連進來
流出
Destination Protocol Port Range Comments
0.0.0.0/0 TCP 80 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用
0.0.0.0/0 TCP 443 允許套用這個rule的instance,可以直接連線到Internet,一般是拿來做系統更新用

實務上應用

  1. 因為DB server需要用SSH連進去維護,所以DBServerSG的inbound必須要增加SSH (10.0.0.0/24)。
  2. 因為public subnet預設沒辦法用SSH連到private subnet,所以WebServerSG及NATSG的outbound必須要增加SSH (10.0.1.0/24)。
  3. 因為預設的SSH連線方式都為ssh -i xxx.pem uuu@a.b.c.d。 用這方式會造成因為憑證在local端,沒辦法在public subnet用憑證登入private subnet的instance。所以解決方式之一為先調整private subnet的routing table,將0.0.0.0/0的routing暫時從NAT instance改為Internet Gateway,然後綁一個EIP在private subnet的instance上面。再用憑證+SSH登入後,修改sshd_config,改為用密碼登入。最後再移除EIP、還原routing table,這樣就可以在public subnet用密碼+SSH登入private subnet了。

Security

 

Security groups (SG)

安全群組,屬於instance level的安全管理機制,必須與EC2 instance綁在一起。在launch一個instance如果沒選擇sg時,AWS會自動將instance指定到一個預設的sg。

  • 只支援ALLOW規則
  • 無論規則如何,response connection為永遠ALLOW

Network access control lists (ACLs)

網路存取控制清單,屬於subnet level的安全管理機制,必須與subnet綁在一起。

  • 支援ALLOW及DENY規則
  • response connection會依照規則做控制
  • 規則會依照rule number的順序做套用