Posted in: Amazon VPC
AWS VPC 使用心得总结
參考文件:
Prerequisites
- AWS::EC2
- Network Basics:
- TCP/IP
- CIDR (Classless Inter-Domain Routing)
- Routing Table
- Gateway
- NAT (Network Address Translation)
What is VPC ?
- Virtual Private Cloud
- 擬似傳統機房的網路環境
- 作為 EC2 的 網路層
- 老賬號可以選擇將機器開在 EC2-Classic 或 EC2-VPC 下;新用戶只能選 EC2-VPC
- 不額外收費,但正常使用情境下,應該會想切 Private subnet;那低消 NAT 一台
- Management Console 功能完備,不太需要打 API
A Closer look into VPC
EC2-Classic 與 EC2-VPC 之比較
EC2-Classic
- 雖然現在不建議使用,還是介紹一下,緬懷過去的環境
- 每台 Instance 會透過 DHCP 取得 AWS 內部 (10.0.0.0/8) IP
- 同 AZ 下的機器都能用 internal IP 互通 (假設 Security Group 允許)
- 重開機 (stop -> start) 後 IP 會刷新
- 若綁定 Elastic IP,則該 IP 會綁定到網卡 (eth0) 上;否則 DHCP 派發 Public IP
- 使用 Security Group 管理連入封包;更深入的安全設定只能到 vm 裡搞
- Security Group 綁上 instance 之後,只能透過 snapshot -> launch 的手段更改
EC2-VPC
- 在建機器時有可選擇啓用 Public IP,則使用與 EC2-Classic 相近
- 也可以綁 Elastic IP (EIP) 到網卡 (eth0) 上
- 若使用 Public IP 或 EIP,則該主機僅能有一張網卡 (ENI)
- 只有在 Public Subnet 下的 instance 能使用 Public IP / EIP 對外通信
- ENI: Elastic Network Interface
- 可以動態更改綁定的 Security Group
- 可以給一台 instance 動態插拔多張 ENI (第一張 eth0 除外)
- 可以派發多個同一個子網域下的 Secondary IP。給定後無法變動,但可以 Remove 再重 Assign。
- 提供 Dedicate Instance 的功能,讓這些 instance 跑在獨佔的 host 下
網路功能
Subnet
- 不限制只能鎖 24 bits,但建立後不給改
- Route Tables
- 同一個 VPC 下的封包預設互通
- Route Table 決定往特定網段 (Destination) 的封包怎麼走 (Target)
- 常見 Target 有:
- local
- NAT Portal
- igw (internet gateway)
- vgw (virtual gateway) 用於串接企業內部 vpn
- 每個 subnet 只能指定零或一張 routing table
- 有一張 route table 可以設為預設;未指定的 subnet 都參照它
- Public / Private Subnet
- 以 igw (Internet Gateway) 作為外送封包 target 的 instance,若綁有 EIP / Public IP 則可外連,並自外部訪視。否則無法對外
- 以 NAT Portal 為外送封包 target 的 instance 可以向外連線,但綁定的 EIP / Public IP 無法作用
- DHCP Options Sets
- 每個 subnet 可設定一組,管理 DHCP, DN, DNS, NTP, Netbios 等設定;適合以 DN 區隔 stage 的專案。
NAT
- 在建立 VPC 的時候,有精靈可以引導建立
- 不小心搞爛的話,AWS 提供一系列的 AMI 供選用;搜尋 ami-vpc-nat 即可
- 自幹關鍵:
- 轉址:執行下列指令,透過 ipfilter 轉址
-
sudo iptables -t nat -A POSTROUTING -s [VPC CIDR] -o eth0 -j MASQUERADE
- 設定 Security Group,接受來自 VPC 內部(才能做 port redirect)與外部 ssh(用於從外部連入管理)的連線
- 關閉該主機 eth0 的 Source/Dest Checking (外連封包的 Dest 不是該 ENI 的 IP,AWS 預設從 host drop 這類封包)
- 給 eth0 綁上 EIP
- 記下 ENI 編號,設定為 Route Table 中的 target
DNS
若 DN 設定不一致,可能會無法透過 internal DN 對連(Manual 中 描述應該是這意思);但還是能透過 ip access。
Security
- Private Network
除非綁定 EIP / Public IP 或設定 NAT 轉發,外部連線進不來。相當於有防火牆 - IAM
- API 的管理權限,目前無法針對 IAM 給 instance access
- Security Group
- 綁定在 ENI 上,多對多對應
- 可針對 Inbound or Outbound 設定
- 預設為 Allow, Deny;但若未設定 Outbound Rule,則 Outbound 為 Allow All
- Inbound Packet 的 Response 會自動 allow
- Net ACL
- 對 subnet 綁定的機制與 Route Table 相同
- 可針對 Inbound or Outbound 設定
- 依照優先權比對規則,可能是 Allow 或 Deny
- 不自動 allow 回覆封包,因此要根據 ephemeral port 設置
Dedicate Instance
- launch instance 的時候可以選擇 tenancy: [ dedicated | default ]
- VPC 也可以設定 tenancy,若是 dedicated 則所有 instance 會被設為 dedicated
- 某些服務,如 RDS,無法以 dedicated instance 運行
- 帶 tenancy 的 Reserved instance 與一般 RI 是分開賣的,無法轉換
整合其他服務
費用
- 基於 endpoint (dn) 的服務,例如 DynamoDB, S3, Glacier, SQS, SimpleDB,都算 intra AZ 的外連流量,抽 $USD 0.01 per GB
- Instance-based SaaS 如 RDS, EC2, ElastiCache, ELB (有 ENI 的) 如果使用 Private IP (在同一個 VPC 下),區內免費;如果不在 VPC 內只能用 Public IP / EIP 連,就要付 $USD 0.01 per GB
- 註:某些服務會對經手流量收費,例如 ELB;這部分的費用與 Transfer 要分開計算
Scenarios for VPC
註:底下用例摘自 Manual,大多描述僅適用於預設值。
Public Subnet Only
- 新建 igw
- 建立預設 Route Table,以 igw 為 target
- 切網段, 切網段, 切網段
- 設定 Security group / Net ACL
- 開機器並啟用 Public IP / Elastic IP
- 沒有 Public IP / Elastic IP 的 instance 無法與外部溝通,但能與 VPC 下的其他機器對連
Public and Private Subnets
- 事前準備
- 新建 igw
- 建立 NAT portal
- 切網段
- 設定 Security group / Net ACL
- Public 網段
- 建立以 igw 為 default target 的 route table
- 把這 route table 綁到某個 subnet
- 在這個 subnet 內開機器,則:
- 有 Public IP 或 Elastic IP 的 instance 可以對外連線,並接受外部連線(若 Security group / Net ACL 允許)
- 沒有 Public IP 或 Elastic IP 的 instance 無法從外部直連(但可以透過其他 instance),也無法對外訪視,除非手動進去改 route table (理論可行,徵求勇者)
- Private 網段
- 建立以 NAT portal 的 ENI 為 default target 的 route table
- 把這 route table 綁到某個 subnet
- 這個 subnet 內的 instance 可對外連線(若 Security group / Net ACL 允許),但外部無法直連這些主機
Hardware VPN with Private and Public Subnets
Hardware VPN with Public Subnets
官方文件為 VPC Network Admin Guide。
- 基本架構
- 用戶先在 VPC 端,建立 Virtual Gateway (VGW) 虛擬網路設備。
- 輸入位於企業私有網路的 Customer Gateway ,並在 VGW 與之間,建立 VPN Connection
- VGW 可以作為 Route Table 中的 Target,因此能指派特定 Destination 的連線走向該 VGW,從而將封包導向私有網路。
- 猜想
- VPN Connection 支援 IPSec 協定
- 無論是否有啟用的 VPN Connection,VGW 都可以被 Route Table 引用;猜想網路不通會直接噴 destination unreachable
- VPC 文件範例中的 Route Table 都只有兩條規則;實際上 [VPC CIDR] -> local; 192.168.0.0/16 -> vgw; 0.0.0.0/0 -> nat 這樣的設定應可行