The Art of Readable Code && High Performance Comments

AWS VPC 心得

這是在 AWS 讀書會報告的題目,恰好有些中小企業的朋友可能對 VPC 不太熟悉,把內容順手貼到這邊備忘 + 騙點閱 >///<


Intro

參考文件:

Prerequisites

  • AWS::EC2
  • Network Basics:

What is VPC ?

  • Virtual Private Cloud
  • 擬似傳統機房的網路環境
  • 作為 EC2網路層
  • 老賬號可以選擇將機器開在 EC2-ClassicEC2-VPC 下;新用戶只能選 EC2-VPC
  • 不額外收費,但正常使用情境下,應該會想切 Private subnet;那低消 NAT 一台
  • Management Console 功能完備,不太需要打 API

A Closer look into VPC

EC2-ClassicEC2-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 IPEIP,則該主機僅能有一張網卡 (ENI)
  • 只有在 Public Subnet 下的 instance 能使用 Public IP / EIP 對外通信
  • ENI: Elastic Network Interface
    • 可以動態更改綁定的 Security Group
    • 可以給一台 instance 動態插拔多張 ENI (第一張 eth0 除外)
    • 可以派發多個同一個子網域下的 Secondary IP。給定後無法變動,但可以 Remove 再重 Assign。
  • 提供 Dedicate Instance 的功能,讓這些 instance 跑在獨佔的 host 下
  • DHCP Options Sets
    • 每個 subnet 可設定一組,管理 DHCP, DN, DNS, NTP, Netbios 等設定;適合以 DN 區隔 stage 的專案。

網路功能

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 無法作用
  • /** 感謝好同事提醒,應是 VPC 的設定而非 Subnet */
    DHCP Options Sets

    • 每個 subnet 可設定一組,管理 DHCP, DN, DNS, NTP, Netbios 等設定;適合以 DN 區隔 stage 的專案。

NAT

  • 在建立 VPC 的時候,有精靈可以引導建立
  • 不小心搞爛的話,AWS 提供一系列的 AMI 供選用;搜尋 ami-vpc-nat 即可
  • 自幹關鍵:
    • 轉址:執行下列指令,透過 ipfilter 轉址
    • 設定 Security Group,接受來自 VPC 內部(才能做 port redirect)與外部 ssh(用於從外部連入管理)的連線
    • 關閉該主機 eth0Source/Dest Checking (外連封包的 Dest 不是該 ENIIPAWS 預設從 host drop 這類封包)
    • eth0 綁上 EIP (照理說 public IP 應該也能用,徵求勇者測試 XD)
    • 記下 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 ConnectionVGW 都可以被 Route Table 引用;猜想網路不通會直接噴 destination unreachable
    • VPC 文件範例中的 Route Table 都只有兩條規則;實際上 [VPC CIDR] -> local; 192.168.0.0/16 -> vgw; 0.0.0.0/0 -> nat 這樣的設定應可行

小結

VPC 讓工程師對網路有更多控制,除了能簡化機器安全控管,也能運用運用網路技巧,使服務更加快速、穩定。
而網路設定中最麻煩的幾項 (iptables, route, NIC 等,出事往往只能跑機房) ,也能透過 API 或 Management Console 輕鬆惡搞。

2 Comments

  1. 2017 年 07 月 07 日    

    >DHCP Options Sets
    >每個 subnet 可設定一組,管理 DHCP, DN, DNS, NTP, Netbios 等設定;適合以 DN 區隔 stage 的專案。

    如果我理解沒有錯,現在 DHCP Options Sets 應該是只能 Attach VPC only,是 1 對 1 的概念。

    • 2017 年 07 月 09 日    

      多謝提醒,DHCP options set, DNS resolution/hostnames, 與近期加入的功能 DNS ClassicLink 都是 VPC 的設定,而非 Subnet;
      但仍可以在 EC2 裡頭更改 DNS 設定,不走 AWS 預設值 (預設值,會解到 Subnet 內的 DNS Server)。Hybrid 環境目前還是只能這麼做,才能把兩邊的 DNS 接起來。

發表迴響

分類

%d 位部落客按了讚: