AWS Summit Bangkok 2024: คู่มือ cloud networking สำหรับ developer

สำหรับผู้ที่เริ่มต้นใช้งาน AWS การทำความเข้าใจเกี่ยวกับ networking ของ AWS เป็นเรื่องที่สำคัญมากแต่ก็น่าปวดหัวเช่นกันเพราะมีองค์ประกอบที่เยอะแยะไปหมด ในบทความนี้ผมจะอธิบายเกี่ยวกับ AWS network แบบคร่าว ๆ ให้เข้าใจง่ายมากที่สุดครับ

เนื้อหาในบทความนี้สรุปมาจาก Session [A developer's guide to cloud networking] ในงาน AWS Summit Bangkok 2024

VPC

VPC ถือเป็นโครงสร้าง networking พื้นฐานที่สุดของ AWS เปรียบเสมือนกล่อง 1 ใบ ที่แยก network ภายในกล่องใบนั้นออกจากโลกภายนอกครับ resource ใด ๆ ก็ตามที่อยู่ภายนอก VPC จะไม่สามารถเชื่อมต่อเข้ามายัง resource ที่อยู่ภายใน VPC ได้

Subnet

เมื่อเรามี VPC ที่เปรียบเสมือนกล่อง 1 ใบ ที่ทำหน้าที่แยก network ภายในกล่องออกจาก network ภายนอกแล้ว เราก็คงอยากที่จะแบ่ง network ภายในกล่องใบนั้นออกเป็นส่วน ๆ เพื่อสร้าง network ที่เป็นระบบภายใน VPC ใช่ไหมครับ subnet มีไว้เพื่อสิ่งนั้นเลยครับ

subnet เปรียบเสมือนกล่องใบเล็ก ๆ ที่อยู่ภายในกล่องใบใหญ่ (VPC) อีกที โดยทำหน้าที่แยก network ภายในตัวมันเองออกจากโลกภายนอกครับ โดยเมื่อเราสร้าง resource ใด ๆ ขึ้น resource เหล่านั้นจะถูกจัดให้ไปอยู่ใน subnet (ซึ่งอยู่ใน VPC อีกที) ที่เราเลือกตอนสร้าง resource

IGW, Private Subnet, และ Public Subnet

ไม่มีใครอยากได้ VPC ที่ทำได้แค่แยก network ภายในกับภายนอกออกจากกัน แต่เราต้องการ VPC ที่สามารถแยก network ได้ แต่ก็ยังอนุญาตให้ resource ใน subnet สามารถเชื่อมต่อออกไปยัง network ภายนอกได้เมื่อต้องการด้วย รวมถึงอนุญาตให้ network ภายนอกสามารถเชื่อมต่อเข้ามาหา resource ภายใน VPC ได้เมื่อต้องการเช่นกัน ในเวลานั้น IGW คือคำตอบครับ

IGW (Internet Gateway)

Internet Gateway หรือ IGW คืออุปกรณ์ที่เป็นสะพานเชื่อมระหว่าง network ภายใน VPC กับโลก internet ภายนอกครับ resource ใด ๆ ก็ตามที่ต้องการจะเชื่อมต่อไปยังภายนอกจะต้องเชื่อมต่อผ่าน IGW นี้เสมอ รวมถึง resource ภายนอกที่ต้องการเชื่อมต่อเข้ามาภายใน VPC ก็เช่นกันครับ

การมีอยู่ของ IGW นี้ ทำให้ subnet สามารถแบ่งออกได้เป็น 2 ประเภท คือ Private Subnet, และ Public Subnet

Private Subnet

private subnet คือ subnet ที่ไม่สามารถเข้าถึง IGW ได้ การที่ subnet ไม่สามารถเข้าถึง IGW ได้ ส่งผลให้ resource ทุก ๆ อย่างใน subnet นั้นไม่สามารถเชื่อมกับต่อกับ internet ภายนอกได้ครับ

resource ภายใน private subnet ยังคงสามารถเชื่อมต่อกับ subnet อื่น ๆ ที่อยู่ภายใน VPC เดียวกันได้อยู่ ซึ่ง subnet ประเภทนี้มีประโยชน์ในกรณีที่ resource บางตัวใน subnet นั้นมีข้อมูลที่เป็นความลับเก็บไว้อยู่ และไม่ต้องการเปิดช่องให้ภายนอกเชื่อมต่อเข้ามาได้ครับ

Public Subnet

public subnet ตรงข้ามกับ private subnet คือ subnet ที่สามารถเข้าถึง IGW ได้ ทำให้ resource ใน subnet นั้นสามารถเชื่อมต่อกับ internet ภายนอกได้

NAT และ IPv6 Egress only IGW

อย่างที่กล่าวไปด้านบน ว่า private subnet จะถูกตัดขาดการเชื่อมต่อไปยัง internet ภายนอกเนื่องจากไม่สามารถเข้าถึง IGW ได้ แต่ก็มีบางกรณีที่ resource บางตัวใน private subnet มีความจำเป็นจะต้องติดต่อกับ resource บน internet อย่างหลีกเลี่ยงไม่ได้อยู่ ในเวลานั้น NAT และ IPv6 Egress only IGW จะเข้ามามีบทบาทครับ

NAT (NAT Gateway)

NAT Gateway (NAT) จะทำหน้าที่เป็นเหมือนสะพานเชื่อมระหว่าง private subnet กับ IGW ครับ โดยจุดเด่นของ NAT ก็คือ จะอนุญาตแค่การเชื่อมต่อจากภายใน private subnet ออกไปยัง internet เท่านั้น แต่จะไม่อนุญาตการเชื่อมต่อจากภายนอกเข้ามายัง private subnet ทำให้ resource ใน private subnet สามารถเชื่อมต่อไปยังโลกภายนอกได้ โดยที่ยังคงจุดเด่นของ private subnet นั่นคือการรักษาความปลอดภัยจากการเชื่อมต่อจากภายนอกเอาไว้ได้ครับ

IPv6 Egress only IGW

IPv6 Egress only IGW จะคล้าย ๆ กับ NAT เลยครับ แต่ต่างกันตรงที่ NAT จะรองรับแค่ IPv4 ส่วน IPv6 Egress only IGW ก็ตามชื่อเลยครับ คือรองรับแค่ IPv6 เท่านั้น

NACL และ SG

เมื่อ VPC และ Subnet สามารถสื่อสารกับโลกภายนอกได้แล้ว อีกสิ่งหนึ่งที่เป็นของสำคัญก็คือ firewall ครับ ที่จะคอยควบคุมไม่ให้มีการเชื่อมต่อจากแหล่ง IP ที่ไม่ได้รับอนุญาตเข้ามายัง resource ของเราได้

NACL (Network Access Control List)

NACL เป็นเหมือน firewall ของ subnet โดย subnet แต่ละอันใน VPC จะมี NACL เป็นของตัวเองครับ NACL จะกำหนด IP ที่อนุญาตให้เชื่อมเข้าไปยัง subnet ดังกล่าว (allow) รวมถึง IP ที่ไม่อนุญาตให้เชื่อมเข้าไป (deny)

SG (Security Group)

Security group หรือ SG เป็นเหมือน firewall ของ resource ใน subnet ครับ เปรียบเสมือนเรามี firewall 2 ชั้น คือ NACL ของ subnet และ SG ของ resource นั้น ๆ

SG จะแตกต่างจาก NACL ตรงที่ เราสามารถกำหนด IP ที่อนุญาตให้เชื่อมเข้าไปยัง resource ดังกล่าว (allow) ได้อย่างเดียว ส่วน IP ใด ๆ ก็ตามที่ไม่ได้รับอนุญาตให้เชื่อมเข้าไป จะถูกตีความเป็น deny ไปโดยปริยายครับ

การเชื่อมต่อระหว่าง VPCs

การเชื่อมต่อระหว่าง VPC 2 อันขึ้นไปนั้น ถ้าจะทำจริง ๆ เราก็สามารถใช้ IGW เชื่อมต่อผ่าน internet ได้ครับ ภายใต้เงื่อนไขที่ว่า resource ของทั้งต้นทางและปลายทางจะต้องอยู่ใน public subnet ที่เปิดให้เข้าถึงได้ผ่าน internet แต่ถ้าเราต้องการให้การเชื่อมต่อนั้นเป็นแบบ private ที่ไม่ผ่าน internet ก็สามารถทำได้เช่นกันครับ โดย AWS ก็มีเครื่องมือรองรับสถานการณ์แบบนี้อยู่เช่นกัน

VPC Peering

เป็นการผูก VPC ทั้งสองเข้าด้วยกัน เสมือนกับว่า VPC ทั้งสองนั้นเป็น VPC เดียวกัน ทำให้ resource ในทั้งสอง VPC สามารถเชื่อมต่อหากันได้อย่างอิสระโดยไม่ต้องพึ่ง internet ครับ (ถ้าไม่ติด NACL และ SG)

TGW (Transit Gateway)

Transit Gateway หรือ TGW คือ gateway สำหรับเชื่อมต่อ network ต่าง ๆ เข้าด้วยกัน โดย network ที่ว่านี่หมายถึงทั้ง VPC และ on-premise network ด้วยครับ ในกรณีที่ TGW ทำการเชื่อม VPC 2 อันเข้าด้วยกัน VPC แต่ละอันจะเชื่อมต่อไปหา VPC อีกอันหนึ่งผ่าน TGW โดยที่ไม่ผ่าน internet ครับ แต่จะใช้ network หลังบ้านของ AWS แทน

AWS จะมี service บางประเภทที่เป็น global service โดยที่ service ประเภทนี้จะไม่อยู่ใน VPC และสามารถเข้าถึงได้ผ่าน internet ครับ PrivateLink คือบริการที่ทำให้ resource ใน VPC สามารถเข้าถึง global service เหล่านี้ได้แบบ private ไม่จำเป็นต้องเชื่อมต่อผ่าน internet เพื่อให้มั่นใจว่าการเชื่อมต่อของเราปลอดภัยและเป็นส่วนตัว

การเชื่อมต่อแบบ Hybrid

ส่วนสุดท้ายของบทความนี้จะพูดถึงการเชื่อมต่อระหว่าง on-premise network กับ AWS network (VPC) ครับ

Site-to-Site VPN

เป็นบริการของ AWS สำหรับเชื่อมต่อ on-premise network เข้ากับ VPC โดยใช้ VPN ของ AWS ครับ และขึ้นชื่อว่า VPN หมายความว่าการเชื่อมต่อนี้จะทำผ่าน internet ซึ่งถ้าใครที่ต้องการการเชื่อมต่อแบบ private บริการนี้อาจไม่เหมาะซักเท่าไหร่ครับ

Client VPN

จะคล้าย ๆ กับ Site-to-Site VPN แต่ลดสเกลลงมา จากระดับ network to network (on-premise network กับ AWS network (VPC)) เหลือเป็น individual to network (terminal กับ AWS network (VPC)) เป็นบริการที่เหมาะในกรณีที่เราต้องการจะเข้าถึง AWS resource ที่อยู่ใน VPC ผ่านอุปกรณ์ของเราเองโดยใช้ VPN ครับ

Direct Connect

Direct Connect หรือ DX จะคล้าย ๆ กับ Site-to-Site VPN ครับ แต่จุดเด่นอย่างหนึ่งของ DX คือ ไม่ใช่ internet แต่จะทำการเชื่อมต่อ on-premise network ของเราเข้ากับ VPC โดยตรง ผ่านตัวกลางที่เรียกว่า Direct Connect Location ซึ่งกระจายอยู่ทั่วโลก ซึ่งจะทำหน้าที่เป็นตัวกลางระหว่าง on-premise network ของเรา กับ AWS network (VPC) ครับ

อ้างอิง

  1. AWS re:Invent 2023 - A developer’s guide to cloud networking (BOA207) - YouTube
  2. NAT gateways - Amazon Virtual Private Cloud
  3. AWS Site-to-Site VPN - Amazon Virtual Private Cloud Connectivity Options
  4. AWS Client VPN - Amazon Virtual Private Cloud Connectivity Options
  5. AWS Direct Connect - Amazon Virtual Private Cloud Connectivity Options