สอน AWS Networking เบื้องต้น (Part 2)

Basic AWS Networking (Part 2)

Nopnithi Khaokaew (Game)
6 min readAug 27, 2021

— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —

เนื้อหาใน Part 2 นี้อาจไม่ได้ลงรายละเอียดเท่ากับ Part 1 นะครับเนื่องจากเป็น Advanced Topics แต่จะพยายามเขียน Concept ให้ไปสานต่อได้ง่ายขึ้นครับ

หลังจากเขียนเนื้อหาใน part 1 มาปีกว่า ถึงเวลามาสานต่อให้มันจบเสียที ใครที่ยังไม่มีพื้นฐานก็ให้ย้อนกลับไปอ่าน part 1 ก่อนตามลิงค์ด้านล่างนี้นะครับ

หัวข้อ AWS Networking Part 1

  • Virtual Private Cloud (VPC)
  • Public Subnet และ Private Subnet
  • Main Route Table และ Custom Route Table
  • Internet Gateway (IGW)
  • NAT Gateway
  • Security Group
  • Network ACL

หัวข้อ AWS Networking Part 2 (บทความนี้)

  • Virtual Private Gateway (VGW)
  • VPC Peering
  • Transit Gateway
  • VPC Endpoint
  • AWS Direct Connect (DX)

1. Virtual Private Gateway (VGW)

Virtual Private Gateway (VGW) คือ managed gateway ที่ใช้ในการสร้าง connectivity ที่เป็น site-to-site VPN โดยจะ support เฉพาะ IPsec โหมด Encapsulating Security Payload (ESP) ครับ ซึ่งในแต่ละ VPC จะมี VGW ได้เพียง 1 ตัวเท่านั้น แต่สามารถย้ายไปมาระหว่าง VPC ได้

เมื่อเราสร้าง VGW จะสามารถกำหนด AS number ให้กับมันได้ทั้งแบบ 16-bit (64512 ถึง 65534) และ 32-bit (4200000000 ถึง 4294967294) เพื่อใช้ในการแลกเปลี่ยน route ผ่าน BGP ครับ ซึ่งเรื่องนี้คนที่มีพื้นฐานด้าน network มาก่อนน่าจะเข้าใจได้ไม่มากก็น้อย

Cryptography ที่ Support

  • Advanced Encryption Standard (AES) 256
  • Secure Hash Algorithm (SHA) 2
  • Phase 1 Diffie Hellman(DH) groups: 2, 14–18, 22, 23, และ 24
  • Phase 2 DH groups: 1, 2, 5, 14–18, 22, 23, และ 24

ในส่วนของ HA ก็จะมีมาให้โดยอัตโนมัติ เพราะเมื่อเราสร้าง VGW มันจะมาพร้อมกับ endpoint ทั้งหมด 2 จุดและวางอยู่คนละ availability zone กัน ดังรูป

เมื่อเราพูดถึง VGW ก็จะเป็นเรื่องของ site-to-site VPN เท่านั้น ส่วน client-to-site VPN นั้น ณ วันนี้ทาง AWS ไม่ได้ provide managed endpoint มาให้พร้อมใช้งาน เราต้องเป็นคน setup ขึ้นมาเองโดยอาจจะใช้ EC2 กับ VPN software อีกทีครับ (สู้ VMware ไม่ได้ในจุดนี้)

สุดท้ายเรื่อง VPN บน AWS นั้นก็ค่อนข้างกว้างและเยอะ และด้วยความที่มันเป็นเรื่อง network ก็มักจะมีความซับซ้อนวุ่นวายจาก topology หลาย ๆ แบบเข้ามาเกี่ยวข้องด้วย แต่ด้วยบทความนี้เป็นเพียงพื้นฐานผมเลยจะขอเขียนไว้เท่านี้ละกันครับ

2. VPC Peering

หน้าที่ของ VPC peering คือการ connect VPC สองตัวเข้าหากันเพื่อให้สามารถรับส่ง traffic ไปมาระหว่างกันได้ผ่าน AWS private network (ไม่ใช้ internet)

  • ใช้ private IP ในการ comminicate
  • สามารถ connect ข้าม region หรือ account ได้
  • เป็น native HA และไม่ต้องกังวลเรื่อง bandwidth

สมมุติว่าบริษัทของเรามี active directory (AD) อยู่ใน VPC A ซึ่งเป็น VPC หลักของบริษัท และ app B อยู่ใน VPC B ซึ่งจะต้องใช้งาน AD เพื่อทำ user authentication ดังนั้นเราจึงใช้ VPC peering เข้ามาช่วยได้

วิธีการสร้าง VPC Peering

  1. สร้าง Peering Connection ขึ้นมาโดยเข้าไปที่ VPC → Peering connection → Create peering connection และตั้งชื่อให้เรียบร้อย
  2. เลือก local VPC (เช่น VPC A)
  3. เลือก another VPC (เช่น VPC B)
  4. เสร็จแล้วคลิก Create peering connection
  5. จากนั้น VPC ต้นทาง (VPC A) จะส่ง request ไปยัง VPC B ให้ไปที่ Peering connection ของ VPC B และทำการ accept connection request ซะ เมื่อเรียบร้อยจะเห็นว่า peering connection เป็น active
  6. ให้เพิ่ม entry ใน route table ของ VPC ทั้งสองฝั่งดังนี้
    - VPC A เพิ่ม 10.2.0.0/16 โดยชี้ไปที่ peering connection ที่สร้างขึ้น
    - VPC B เพิ่ม 10.1.0.0/16 โดยชี้ไปที่ peering connection ที่สร้างขึ้น

ข้อจำกัดของ VPC Peering

  • VPC สองฝั่งใช้ CIDR เดียวกันไม่ได้ (ห้ามมี network overlap)
  • ระหว่างสอง VPC สามารถมี peering connection ได้อันเดียว
  • ทำ transitive ไม่ได้ เช่น A — B — C จะไม่สามารถทำให้ A คุยกับ C ผ่าน B ได้
  • หรือการเชื่อมต่อในลักษณะเดียวกัน เช่น A ส่ง traffic ไปหา B ด้วย VPC peering เพื่อที่จะออกจาก B ไปยังที่อื่นต่อ ไม่ว่าจะเป็น internet, on-premise หรือ VPC endpoint

3. Transit Gateway

ในการเชื่อมต่อ VPC สองตัวเข้าด้วยกัน เราสามารถใช้ VPC Peering ช่วยได้ แต่เรามาลองทบทวนข้อจำกัดของ VPC Peering ดูดังนี้

จากรูปด้านบนเรามี VPC ทั้งหมด 4 ตัวที่ต้องการจะเชื่อมต่อหากัน เราจึงต้องสร้าง VPC Peering ทั้งหมด 6 จุด แล้วถ้าหากเรามีสัก 10 VPC จะเป็นยังไง? การเพิ่มหรือลบแต่ละ VPC ต้องทำอะไรบ้าง? ต้องแก้ route table หรือ security group ทั้งหมดกี่จุด?

Transit Gateway จึงเข้ามาทำหน้าที่เป็น hub หรือตัวกลางในการเชื่อมต่อระหว่าง VPC หลายตัว ทำให้สามารถ manage และ scale VPC ได้ง่ายขึ้น

หรือถ้าพูดให้คนที่เป็น network engineer เข้าใจได้ง่ายขึ้นก็ให้มองมันเป็น router ครับ เพราะแทนที่เราจะเชื่อม network (ที่จริงคือ VPC) หลายตัวโยงกันไปมาก็จับเข้า router ตัวเดียวแล้วทำ routing ซะ

วิธีการสร้าง Transit Gateway

  1. สร้าง Transit Gateway ขึ้นมาโดยเข้าไปที่ VPC → Transit Gateways → Create Transit Gateway และตั้งชื่อให้เรียบร้อย เช่น TGW-VPC-ABC
  2. Attach VPC ทั้งหมดเข้า Transit Gateway โดยไปที่ VPC → Transit Gateway Attachments → Create Transit Gateway Attachment
    -
    Transit Gateway ID: เลือกตัวที่สร้างจากข้อ 1
    - Attachment type: VPC
    - ตั้งชื่อ attachment และเลือก VPC ตัวที่เราจะ attach เข้า Transit Gateway
    -
    เลือก subnet ภายใต้ VPC (เป็นการสร้าง interface ของแต่ละ network)
    - คลิก Create Transit Gateway Attachment
    -
    ทำซ้ำจนครบทุก VPC (A, B และ C)
  3. ไปที่ VPC → Transit Gateway Route Tables และไปที่ Routes จะต้องเห็น CIDR ของทุก VPC
  4. เพิ่ม entry 10.0.0.0/8 ไปยัง route table ของ VPC ทุกตัวโดยชี้มาที่ Transit Gateway
  5. สร้าง Transit Gateway Attachment สำหรับ VPN เพื่อ connect ไปยัง on-premise โดยไปที่ VPC → Transit Gateway Attachments → Create Transit Gateway Attachment
    -
    Transit Gateway ID: เลือกตัวที่สร้างจากข้อ 1
    - Attachment type: VPN
    - เลือก Customer Gateway เป็น New
    - ใส่ public IP และ AS number ของ router ฝั่ง on-premise
    - Routing options: Static
    - คลิก Create Transit Gateway Attachment (มันจะสร้าง Site-to-Site VPN Connections ให้เราเอง)
  6. Configure VPN ที่ฝั่ง on-premise เพื่อ connect มายัง AWS (ตรงนี้ผมไม่ลงรายละเอียดนะครับ)
  7. เพิ่ม route 192.168.1.0/24 ใน Transit Gateway Route Table และชี้ไปยัง Transit Gateway Attachment ที่เป็น VPN (สร้างขึ้นจากข้อ 5)
  8. เพิ่ม route 192.168.1.0/24 ใน route table ของ VPC ทุกตัวโดยชี้มาที่ Transit Gateway

4. VPC Endpoint

ปกติการเชื่อมต่อจาก resource ที่อยู่ภายใน VPC ออกไปยัง AWS service จะต้องใช้ Internet Gateway, NAT Gateway, VPN connection หรือ DirectConnect connection

แต่เราสามารถใช้ VPC Endpoint สร้าง private connection ไปหา AWS service เหล่านั้นได้โดยไม่ต้องผ่าน internet หรือออกจาก AWS network เลย แน่นอนว่าเรื่อง scalability, redundant หรือ HA นั้นไม่ต้องห่วงแต่อย่างใด

ข้อจำกัดของ VPC Endpoint

  • ต้องอยู่ใน region เดียวกัน
  • ต้องใช้ IPv4 เท่านั้น (ในตอนนี้)

ชนิดของ Endpoint

  • Interface Endpoint (AWS PrivateLink) คือ Elastic Network Interface ที่มี private IP มีหน้าที่นำพา traffic ของเราไปยัง AWS service
  • Gateway Endpoint คือ gateway ที่เป็นปลายทางของ route เพื่อนำพา traffic ของเราไป access เข้า AWS service

ซึ่ง endpoint ทั้งสองชนิดจะซัพพอร์ต service ที่ไม่เหมือนกัน ดังนี้

Interface endpoint

  • CloudWatch Logs
  • CodeBuild
  • EC2 API
  • Elastic Load Balancing API
  • Systems Manager (SSM)
  • Service Catalog
  • Simple Notification Server (SNS)
  • Amazon Kinesis Streams

Gateway endpoints

  • S3
  • DynamoDB

ตัวอย่างการใช้งาน VPC Endpoint

ตัวอย่าง Gateway Endpoint

จากรูปด้านบนเป็นการใช้ Gateway Endpoint เพื่อให้ EC2 ใน private subnet สามารถ access S3 ได้โดยไม่ต้องใช้ internet สังเกตว่าจะมีการเพิ่ม entry ใน route table โดยอัตโนมัติ โดย pl-xxx คือ prefix list (กลุ่ม IP) ของ S3 และ vpce-xxx คือ endpoint ที่สร้างขึ้น

วิธีการสร้าง Gateway Endpoint

  1. สร้าง endpoint โดยเข้าไปที่ VPC → Endpoints → Create Endpoint
    - Service category: AWS services และเลือก S3 (Gateway)
    - เลือก VPC และ route table ที่ต้องการ

ทีนี้มาดูแบบ Interface Endpoint กันบ้าง

ตัวอย่าง Interface Endpoint

เมื่อเราสร้าง endpoint และเลือก CloudWatch Logs (ชนิด interface) เรียบร้อย ทาง AWS จะสร้าง Elastic Network Interface (ENI) โดยใช้ private IP ในวงเดียวกับ subnet ที่เราเลือก map เข้ากับ endpoint ซึ่งจะทำให้ EC2 ใน private subnet สามารถ access CloudWatch Logs ได้ผ่าน private network เช่นเดียวกัน

5. AWS DirectConnect

เรื่องนี้รายละเอียดเยอะและเป็นเรื่อง network จ๋า ๆ ซึ่งถ้าผู้อ่านไม่ใช่ network engineer อาจจะต้องคุยกันยาว ที่สำคัญหัวข้อนี้ไม่สามารถขึ้น lab ได้โดยง่าย แถมโอกาสที่จะได้สัมผัสก็มีไม่มาก ดังนั้นผมขอเขียนเป็นแบบ high-level concept ละกันนะครับ

AWS DirectConnect คือ service ที่ช่วยให้เราสามารถเชื่อมต่อ on-premise ไปหา AWS ได้โดยไม่ผ่าน internet (รวมถึง VPN ด้วย เพราะ VPN มันผ่าน internet) ซึ่งจะมาช่วยในเรื่องของค่าใช้จ่ายด้าน network, bandwidth, ความเสถียร และความปลอดภัยของ network

ความเร็วที่มีให้เลือกจะอยู่ท่ี 1G และ 10G ยกเว้นถ้าเราซื้อผ่าน partner อาจจะมีทางเลือกท่ีต่ำกว่า 1G เพราะเค้าเอามาซอยขายต่ออีกที

เชื่อมต่อผ่านที่ไหนได้บ้าง?

  • Direct Connect Location คือสถานที่ที่มีอยู่ทุก region ของ AWS ซึ่งจะวางอุปกรณ์ network ที่เชื่อมต่อตรงกับ AWS global backbone เอาไว้ และเราสามารถเชื่อมต่อไปหา Direct Connect Location หลาย ๆ แห่งเพื่อเพิ่ม redundancy ได้
  • Direct Connect Partner คือบริษัทที่เป็น AWS Partnet Network (APN) ซึ่งมี connectivity ไปถึง Direct Connect Location ครับ ซึ่งในประเทศไทย ณ วันนี้ผมเข้าใจว่าถ้าเราจะใช้ DirectConnect ก็จะเป็นท่านี้ท่าเดียวเลย

Virtual Interface

การ access AWS ผ่าน DirectConnect เราจะต้องสร้าง Virtual Interface ขึ้นมาก่อน ซึ่งการคอนฟิก VIF ประกอบไปด้วย VLAN และ BGP (optional)

ซึ่ง Virtual Interface จะมี 2 ชนิด

  • Public VIF = ทำให้เรา access public IP ทั้งหมดของ AWS ได้ และเราสามารถแลกเปลี่ยน BGP route กับ AWS ได้ผ่าน VIF ชนิดนี้
  • Private VIF = ทำให้เราสามารถ access resource หรือ service ภายใน VPC ของเราได้ผ่าน private IP ของมัน เนื่องจาก VIF ชนิดนี้จะ associate เข้ากับ VGW

โอเคครับ สำหรับพื้นฐาน AWS network ใน part 2 ผมก็ขอจบไว้ที่ตรงนี้ละกัน ที่จริง AWS service ด้าน network จะยังมีที่ไม่ได้กล่าวถึงอีก ได้แก่

  • Elastic Load Balancer (ELB)
  • Route 53 (DNS)
  • CloudFront (CDN)
  • VPC FlowLogs
  • หรืออื่น ๆ เช่น DNS หรือ DHCP ภายใน VPC หรือ AWS

ยังไงลองไปหาอ่านเพิ่มเติมดูแล้วกันนะครับ หรือถ้าหากมีเวลาผมจะมาอัพเดทเพิ่มเติมในบทความนี้ให้ ขอบคุณที่ติดตามจนจบครับ

ถ้าคิดว่าบทความนี้มีประโยชน์ ฝากกด clap, follow และ share บทความนี้ให้ผมด้วยนะครับ ขอบคุณมากครับ

--

--

Nopnithi Khaokaew (Game)
Nopnithi Khaokaew (Game)

Written by Nopnithi Khaokaew (Game)

Cloud Solutions Architect & Hobbyist Developer | 6x AWS Certified, CKA, CKAD, 2x HashiCorp Certified (Terraform, Vault), etc.