gcloud: Connect แบบไหนให้ตรงใจและปลอดภัย

Redbulls Thailand
Google Cloud Thailand
2 min readApr 25, 2023

#gcloud #architecture #connectivity

Background:

gcloud เป็นเครื่องมือ แบบ command-line ที่ใช้ในการบริหารจัดการ resources บน Google Cloud ได้แทบทั้งหมด โดยเบื่องหลังของ gcloud นั้นก็คือเป็นการเรียกผ่านโปรแกรมไปยัง Google Cloud APIs (*.googleapis.com) นั้นเอง วิธีการนี้จะช่วยอำนวยความสะดวกแก่ผู้ใช้งานโดยเฉพาะผู้ที่เชี่ยวชาญ และ รวมถึงนักพัฒนา automated script ต่างๆ ซึ่งไม่มีความจำเป็น และ ไม่เหมาะ ที่ต้องใช้งานผ่าน Google Cloud Console แต่อย่างใด

Note: เราสามารถดูวิธีการติดตั้ง gcloud บนเครื่องโน้ตบุ๊คได้เพิ่มเติมจาก การติดตั้ง gcloud CLI

Challenges:

(Option#1) โดยปกติ การเชื่อมต่อระหว่าง gcloud ไปยัง Google Cloud APIs นั้นจะคุยผ่าน internet เป็นหลัก

#ข้อดี ซึ่งวิธีที่นิยมสำหรับผู้ใช้งานทั่วไป มีความสะดวกและรวดเร็ว ในแง่ความปลอดภัยการเข้าถึงถูกจำกัดโดย Authentication & Authorization ผ่าน Identity Access Management (IAM) และ User/Service Account ที่ใช้งานบนโน้ตบุ๊คของเรา

#ข้อเสีย คือไม่สามารถเพิ่มความปลอดภัยในการเข้าถึง Google Cloud APIs ที่ระดับ Network ได้เนื่องจาก Google Cloud APIs นั้นเป็น Public/Global Access และมี Public IP CIDR หลายตัว จึงยากต่อการทำ Network Firewall Rules จึงอาจจะไม่เหมาะกับองค์กรที่ต้องการความปลอดภัย

Note: เราสามารถดู Reserved Public IP CIDR สำหรับ Google Cloud APIs ได้จาก Obtain Google IP address ranges

วิธีการเชื่อมต่อ gcloud กับ Google Cloud APIs

(Option#3) สำหรับองค์กรที่ต้องการความปลอดภัยสูง, การเชื่อต่อ gcloud ผ่าน Private Network อาทิ VPN/InterConnect จะเหมาะสมที่สุด โดยเราจะเรียกวิธีการนี้ว่า Google Private Access นั้นเอง

#ข้อดี เป็นแนวทางที่ปลอดภัยที่สุดในการเข้าถึง Google Cloud APIs ซึ่งควมคุมได้ทั้ง IAM และ Network Firewall & Network Routes. วิธีการนี้ยังใช้ Reserved Public IP CIDR จำกัด (restricted.googleapis.com: 199.36.153.4/30, private.googleapis.com:199.36.153.8/30) (เมื่อเทียบกับ Option#1) ทำให้ง่ายการต่อการทำ Network Firewall Rules

#ข้อเสีย เพิ่มความซับซ้อน และ ค่าใช้จ่ายในการติดตั้งจัดการ VPN/InterConnect และ Network Components ต่าง e.g. Routes, DNS

Note: เราสามารถดูวิธีการ Config Google Private Accessได้จาก Private Google Access for on-premises hosts

Solution:

(Option#2) สำหรับองค์กรที่ต้องการความปลอดภัย แต่ไม่ต้องการ Manage อะไรให้วุ่นวาย, การเชื่อต่อ gcloud ผ่าน Proxy จึงเป็นอีกทางนึงที่จะช่วยได้. โดยแทนที่ gcloud command จะถูกรันบนเครื่องโน้ตบุ๊คเรา มันจะถูกส่งต่อไปยัง Proxy Server ให้รันแทน จากนั้น response ก็จะถูกส่งกลับมาที่เรา

ขั้นตอนการติดตั้งโดยย่อ

  • สร้าง VPC และ Subnet ที่จะใช้งานสำหรับ VM/Compute Engine ของ Proxy Server และ Subnet ดังกล่าวต้องมีการ Enable Google Private Access ด้วย (ซึ่งความสามารถของ Google Private Access บน Google VPC Subnet เมื่อ enable แล้ว การคุยกับ Google Cloud APIs บน VPC Subnet จะเป็นแบบ internal/private โดยอัตโนมัติ)
วิธีการ Enable Google Private Access ก่อน/หลัง สร้าง Subnet
  • บน Subnet ดังกล่าว, สร้าง Linux VM/Compute Engine ที่มี External IP/Public IP เพื่อใช้สำหรับการเข้าถึงจากโน้ตบุ๊คภายในนอก (Internet)
  • บน VM/Compute ดังกล่าว, ติดตั้ง Software Proxy อาทิ Squid Proxy Server เพื่อใช้การทำงานร่วมกับ gcloud
  • บนโน็ตบุ๊คที่มี gcloud ติดตั้งไว้, ให้ทำการเซ็ต proxy configuration สำหรับ gcloud (ดูตัวอย่างได้จาก Configuring the gcloud CLI for use behind a proxy/firewall)
  • บน VPC, สร้าง VPC Firewall Rules (Ingress Rule) เพื่ออนุญาติการเข้าถึงเฉพาะจาก Public IP ต้นทางของโน้ตบุ๊ค และ Proxy Port ปลายทางบน VM (ดูตัวอย่างได้จาก Create VPC firewall rules)
  • ทำการทดสอบรัน gcloud command บนโน้ตบุ๊คผ่าน Proxy Server แล้วดูว่าสามารถเชื่อมต่อกันได้ และ มี response กลับมาถูกต้อง หรือไม่

#ข้อดี เป็นแนวทางที่ยังคงไว้ซึ่งความปลอดภัย (Security: Option#1 < Option#2 < Option#3) , ไม่ต้อง manage อะไรให้วุ่นวาย (Operation: Option#1 < Option#2 < Option#3) อาทิ VPN/InterConnect, Route, DNS, และ มีค่าใช้จ่ายโดยรวมไม่แพงมากนัก ก็จะถูกว่า (Cost: Option#1 < Option#2 < Option#3)

#ข้อเสีย ต้องบริหารจัดการตัว Proxy Server และ Firewall บางส่วนอยู่ นอกจากนี้ขนาดของตัว Proxy Server (CPU/Memory) ยังส่งผลต่อ Performanceในการรัน คำสั่ง gcloud พร้อมๆกันจากหลายๆ Users เนื่องจาก requests/response จะไปกองอยู่ที่ Server ตัวนี้

“รอติดตามวิธีการ Configure Option#2 แบบง่ายๆในครั้งหน้า ^ ^”

--

--