VPC
定義
Virtual Private Cloud是AWS提供的一種從邏輯上分離且獨立的網絡單元(物理上不一定). 創建VPC的時候可以通過CIDR來指定VPC的大小(VPC內IP地址的數量 最大65535最小16). VPC還可以進一步劃分成更小的邏輯單元 - Subnet. Subnet可以進一步分割VPC內的IP范圍(Subnet的IP范圍必須在VPC的IP范圍之內).
可用組件
Subnet
Route Table
Security Group
ACL
NAT Gateway/Instance
IGW
CGW & VPG
Peering Connection
Endpoint
Elastic IP
Elastic Network Interface
Subnet
子網是VPC的基本組成部分,EC2實例實際上是運行在Subnet里而非直接運行在VPC上。
分類:
Public subnet - 所關聯的route table中流量導向VPC的IGW
Private subnet - 所關聯的route table中的流量沒有導向到VPC的IGW
VPN only subnet - 所關聯的route table中的流量導向到VGW
注意
一個Subnet必定所屬一個AZ,且創建之后不能更換所屬的AZ
一個Subnet必定至少關聯到一個路由表,如果有沒顯示的關聯,則隱式關聯到VPC的主路由表.
子網的大小必須小于VPC的IP范圍且大于等于/28(i.e: VPC CIDR - 10.0.0.0/16, 則Subnet的CIDR必須是10.0.X.X/17~28). NOTE: AWS會保留CIDR IP段的前4個IP和最后一個IP, 所以對于10.0.X.X/28實際可用的IP數量是16-5=11個IP地址
可以通過ACL來做子網級別的安全控制(入/出站規則)
默認VPC在所有的AZ都有一個規模為/20的子網
Route Table
一組所關聯的子網的流量導向規則. 每條路由規則有2個字段destination和target. destination用來表示請求的最終目的地, target用來指定由誰來處理路由的下一跳.
下條路由規則的語義為: 子網內所有訪問172.9.X.X的請求都經由IGW來處理
Destination | Target |
---|---|
172.9.0.0/16 | igw-id |
典型的Target
target=local的規則實現同一VPC內不同子網之間的通訊. (每個路由表都帶有一個只讀的規則 x.x.x.x/x - local).
target=IGW的規則實現了VPC外對于子網的訪問,
target=NAT的規則實現了子網對于VPC外的訪問
target=Peering Connection的規則實現了VPC和VPC之間的訪問
target=VPG的規則實現了子網的VPN訪問
target=endpoint的規則實現了子網對于相同region的其他AWS service的訪問(目前僅支持S3切該調路由不是手動加入的)
注意
一個VPC在創建的時候會自動生成一個主路由表, 所有沒有指定路由表的子網都會默認關聯這個主路由表
你可以將自己創建的路由表設置為主路由表
路由表中的路由規則的優先級由規則的具體程度來決定(越具體優先級越高). 如下表中,規則2的優先級高于規則3,規則3高于規則1
Destination | Target |
---|---|
0.0.0.0/0 | igw-id |
172.9.1.0/24 | peer-connection-reject |
172.9.0.0/16 | peer-connection-approve |
Internet Gateway
IGW實現了VPC中的instance和Internet通訊. 在AWS的VPC中,即便一臺instance被分配了public ip/eip也是無法被從VPC外訪問到的.必須要往該instance所屬的子網關聯的路由中添加target=igw的路由才可以. 在通訊過程中IGW具體做了:
維護一個public ip-private ip的one-to-one的映射表
當具有public ip的instance試圖從VPC內訪問Internet, IGW負責將被訪問端的reply的目標地址轉換成instance的public ip。并
當VPC外的機器試圖訪問VPC內的具有public ip的instance的時候, IGW在請求到達VPC后將目標地址從public ip轉換成private ip,最終到達instance.
EIP
Elastic IP是AWS對于某個region的IP資源池中的IP, 所以一個EIP是無法跨region的被其他資源(instance, nat gateway等)使用。并且EIP是分配到你的AWS Account的,所以不管一個EIP是否被使用,只要沒有從你的Account里面釋放出去都會被計費。
與Public IP的不同
EIP綁定到賬戶就計費,Public IP只有使用的時候才收費
EIP除非你釋放了,否則一旦分配到Account就是穩定不變的. Public IP分配給Instance之后隨著Instance關閉而釋放,而且當instance重啟之后,之前分配的Public IP會被重新分配
NAT Gateway/Instance
NAT在AWS中主要提供幫助私有子網訪問internet的服務.(通過upnp協議實現). 本質上來講無論NAT Gateway還是NAT Instance都是一個具有公有IP的實例(NAT Gateway只是從服務角度進行了封裝),不過這個特殊的instance提供端口映射的服務,所有的內網主機對外發送的請求都經由NAT Gateway/Instance發出,NAT會給相應的內網主機隨機分配一個端口號,然后請求再經過IGW進入Internet. 所有被訪問服務器的返回地址都是NAT Gateway/Instance的公有IP和之前所分配的隨機端口號。當response返回到NAT后,NAT再根據端口映射表找到相應的主機,轉發返回的response.
NAT與IGW的不同
NAT只提供內網到外網的單項訪問,IGW提供內網-外網的雙向反問
路由到IGW的公有子網的instance需要有public ip/eip. 而和NAT關聯的私有子網主機只需要私有ip
NAT必須綁定一個EIP, IGW不需要
NAT Gateway和NAT Instance的不同
注意
NAT Gateway必須所處公有子網中(如果NAT自己都訪問不了外網如何幫私有子網的主機訪問外網?)
私有子網所關聯的路由必須將流量切到NAT Gateway
Peering Connection
Peer connection提供VPC之間的訪問。在建立了Peer connection的2個VPC的主機上,可以直接通過private ip相互通訊。
注意
Peer connection不具備傳遞性,比如VPC A和VPC B建立了connection, VPC B和VPC C建立了connection, 但是VPC A和VPC C依舊無法相互訪問
建立了Peer connection的2個VPC的IP范圍不能有重疊(在建立了Peer connection以后如果VPC的ip范圍重疊,就有可能一個ip代表2臺主機)
建立了Peer connection之后必須同時更新2個VPC需要相互通信的子網的路由(requester和receiver的路由都要更新),將相互訪問的CIDR指向peer connection - pcx-xxxxx. 例如VPC A 10.0.0.0/16和VPC B 192.168.0.0/16. 建立了peer connection,在VPC A和B的路由中需要分別添加一條
Destination | Target |
---|---|
192.168.0.0/16 | pcx-xxxx |
Destination | Target |
:-------- | :-------- |
10.0.0.0/16 | pcx-xxxx |
Security Group & ACL
SG和ACL都是用來保障你VPC的網絡安全的。但是它們有一些區別
SG是作用于instance級別的訪問控制,而ACL是Subnet級別的訪問控制
SG是白名單性質的防火墻,你只能允許某些ip訪問某些端口而不能拒絕。ACL可以顯示的deny一些訪問,也可以顯示的approve一些訪問
SG是有狀態的,你不能分開控制SG的出站規則和入站規則。入站請求和出站請求會被同時approve.而ACL是無狀態的,你可以對于同一個目標允許入站拒絕出站(或相反)
ACL的安全規則帶有具備優先級屬性的rule #,(rule #越小優先級越高)
一個instance可以關聯多個SG, 但是一個Subnet同一時間僅能綁定一個ACL
Endpoint
Endpoint是用來建立你的VPC和同region的AWS其他service的內部通訊鏈路的。目前僅支持S3。當你建立了和S3的Endpoint之后,你的VPC內部訪問S3的時候就不會通過廣域網來進行訪問,而且從AWS的內部網路進行訪問。
注意
在建立了endpoint之后還需要同時更新路由表,保證相關service(destination)的請求經由endpoint(target)處理
你可以建立access policy來控制endpoint對service的訪問權限