Best Practices สำหรับ Kong ใน Microservice Architecture

ในยุคปัจจุบัน การพัฒนาแอปพลิเคชันแบบ Microservices กำลังกลายเป็นแนวทางที่ได้รับความนิยมอย่างมาก ด้วยความสามารถที่ยืดหยุ่น สเกลได้ และง่ายต่อการพัฒนา 

โดย Microservices เป็นการแบ่งแอปพลิเคชันขนาดใหญ่ ออกเป็นบริการย่อยๆ แต่ละบริการทำงานแยกกัน มีหน้าที่เฉพาะเจาะจง ทำงานได้อย่างอิสระ หากมีบริการไหนเกิดมีปัญหา หรือล่มไป ก็จะไม่กระทบกับบริการอื่น ๆ แต่การแยกส่วนแบบนี้ก็มาพร้อมความท้าทายใหม่ นั่นคือ การจัดการการสื่อสารระหว่างบริการต่าง ๆ จากปัญหานี้ ทำให้ API Gateway จึงถือกำเนิดขึ้น เพื่อทำหน้าที่เป็นศูนย์กลางควบคุมการเข้าถึง จัดการ และติดตามการสื่อสารระหว่างบริการ Microservices ทั้งหมดนั่นเอง !!!

Kong คืออะไร?

Kong เป็น API Gateway แบบ Open-Source ที่เป็นเหมือน “ตัวกลาง” ในการสื่อสารระหว่าง “Client” และ “Microservices” โดย Kong ได้รับความนิยมอย่างมากสำหรับ Microservice Architecture เนื่องจากความสามารถที่หลากหลาย เช่น การทำ Load Balancing, การทำ Authentication & Authorization, การทำ Monitoring และอื่นๆ อีกมากมาย

จุดเด่นของ Kong Gateway

  • ทำงานได้อย่างเร็ว สามารถรองรับผู้ใช้งานจำนวนมากได้
  • มีปลั๊กอินให้เลือกใช้มากมาย เพิ่มความสามารถได้หลากหลายในการใช้ Kong APIs
  • ยืดหยุ่นสูง สามารถปรับการทำงานได้หลายอย่าง รองรับการใช้งานทั้งแบบ On-premise, Hybrid-cloud และ Multi-cloud
  •  มีระบบรักษาความปลอดภัยในตัว ช่วยให้ API ปลอดภัยมากขึ้น
  • จัดการง่าย ทั้งส่วนของการติดตั้ง ใช้งาน และปรับแต่ง รองรับทั้งการตั้งค่าผ่าน API, UI บนเว็บ และไฟล์คอนฟิก

เนื่องจาก Kong  เป็น API Gateway เปรียบเหมือนประตูทางเข้าของแอปพลิเคชัน ถ้าไม่มีระบบรักษาความปลอดภัยที่ดี เหมือนเปิดบ้านโล่งๆ ให้ใครก็เข้ามาก็ได้ ง่ายๆ ก็คงจะไม่ดีใช่มั้ยครับ ซึ่งแน่นอนว่าภัยคุกคามที่จะตามมาก็จะมีดังนี้ 

ข้อมูลรั่วไหล: ข้อมูลที่ส่งผ่านไปมาระหว่างผู้ใช้กับ API Gateway อาจถูกดักได้ถ้าไม่ใช้การเข้ารหัส HTTPS

โดนขโมยข้อมูล: แฮกเกอร์หรือมิจฉาชีพอาจพยายามเดาชื่อผู้ใช้และรหัสผ่านด้วยเทคนิคต่าง ๆ เพื่อเข้าถึงข้อมูลส่วนตัว แล้วนำไปใช้งานจนเกิดความเสียหาย

โจมตีด้วยคำสั่งที่ก่อให้เกิดอันตรายกับระบบ: แฮกเกอร์อาจส่งคำสั่งที่อันตรายต่อระบบ เช่น SQL injection หรือ cross-site scripting ผ่าน API เพื่อเข้าไปทำลายระบบ

โจมตีแบบ DoS: แฮกเกอร์อาจโจมตีด้วย DoS ในการส่ง Request เข้าไปจำนวนมาก ๆ เข้ามาเพื่อทำให้ระบบล่ม หรือใช้การไม่ได้

Best Practices สำหรับ Kong ใน Microservice Architecture 

1. ยืนยันตัวตนผู้ใช้: ใช้เทคนิคการยืนยันตัวตนที่ปลอดภัย โดย Kong รองรับเทคนิคการยืนยันตัวตนผู้ใช้ได้หลายรูปแบบ เช่น

1.1 Basic Authentication: ผู้ใช้ต้องใส่ชื่อผู้ใช้และรหัสผ่านใน HTTP header โดยใน Kong ก็จะมี Basic Authentication มาให้ใช้งานได้เลย เหมาะสำหรับการใช้งานภายในองค์กร แต่หากใช้งานบน Public Internet อาจจะต้องมีการใช้เทคนิคอื่น ๆ เพื่อเพิ่มความปลอดภัยยิ่งขึ้น

ตัวอย่าง  Basic Authentication Plugin

1.2 API Key: สำหรับการใช้งาน API ผู้ใช้ควรจะได้รับ API Key โดย API Key จะส่งแนบมาผ่าน HTTP header หรือ query parameter การใช้เทคนิคนี้เหมาะสำหรับการใช้งาน API กับแอปพลิเคชันอื่น ปลอดภัยกว่า Basic Authentication เพิ่มขึ้นมา โดยใน Kong จะมี Key Auth Plugin ที่เป็นปลั๊กอินที่ช่วยให้เพิ่มระบบยืนยันตัวตนด้วย API Key เข้าไปในบริการหรือ API Route ได้

ตัวอย่าง  Key auth Plugin

1.3 OAuth 2.0: มาตรฐาน Open-Source สำหรับการยืนยันตัวตน

ผู้ใช้ต้องขอ access token จาก authorization server แล้วส่ง access token ผ่าน HTTP header มาเพื่อยืนยันตัวตน เทคนิคนี้เหมาะสำหรับการใช้งาน API กับแอปพลิเคชันของบุคคลที่สาม เช่น Google, Facebook, Github หรืออื่น ๆ  ซึ่งเป็นวิธีที่ค่อนข้างปลอดภัย

ตัวอย่าง OAuth 2.0 Plugin

1.4 JWT (JSON Web Token): การใช้ token ที่เข้ารหัสเพื่อยืนยันตัวตนผู้ใช้

token ประกอบด้วย claims เกี่ยวกับผู้ใช้ เหมาะสำหรับการใช้งาน API แบบ stateless

ที่ทั้งปลอดภัยและสะดวกโดยใน Kong จะมี JWT Plugin ให้ใช้เหมือนกันนน

ตัวอย่าง JWT Plugin

2. ป้องกันการโจมตี: ใช้ API Gateway เป็นด่านแรกในการป้องกันการโจมตีต่างๆ เช่น จำกัดจำนวนคำขอต่อวินาที ตรวจสอบข้อมูลที่ส่งมา โดยใน Kong ก็จะมี Rate Limiting Plug ในการช่วยกำหนดจำนวนการเข้าถึง

ตัวอย่าง Rate Limiting Plugin

3.เก็บ Log: การเก็บ Log การใช้งาน API ช่วยให้เราสามารถตรวจสอบพฤติกรรมของผู้ใช้ย้อนหลัง เพื่อป้องกันผู้ไม่หวังดีต่อระบบได้ โดยใน Kong จะมี Plugin ที่ช่วยเรื่องนี้ชื่อว่า HTTP Log

4. ออกแบบ API อย่างปลอดภัย: สำหรับการออกแบบ API  ควรเปิดเผยข้อมูลเท่าที่จำเป็น

ทำการกำหนดและจัดการ Error เองโดยไม่ทำการแสดง Error ที่ได้มาจากการ Compile ส่งออไป ควรทำการตรวจสอบ input ของผู้ใช้งาน และกรองข้อมูล output ด้วย เพื่อความปลอดภัย

5. ปิดใช้งาน API ที่ไม่ได้ใช้: สุดท้ายเราควรลบ API ที่ไม่ใช้แล้ว หรือ อัพเดท API เก่าให้มีระบบรักษาความปลอดภัยด้วยเพื่อความปลอดภัยของระบบ

นอกจากนี้หากต้องการนำ Kong มาใช้งานในองค์กรอย่างจริงจัง ผมแนะนำ “Kong Enterprise “เนื่องจากมีฟีเจอร์ และปลั๊กอินต่าง ๆ ที่มาช่วยให้เราสามารถจัดการได้ง่าย มีประสิทธิภาพ และมั่นใจว่าปลอดภัยด้วยฟีเจอร์เหล่านี้

  • Kong Admin GUI: จัดการ Kong ผ่านหน้าเว็บที่ใช้งานง่าย
  • Kong Security: มีฟีเจอร์ความปลอดภัยให้ API ในระดับสูงที่สูงขึ้น
  • Kong Dev Portal: สำหรับพัฒนาและทดสอบ API ได้สะดวกขึ้น
  • Kong Analytics: ช่วยให้วิเคราะห์การใช้งาน API อย่างละเอียด
  • Kong Scalability: รองรับการสเกลได้อย่างราบรื่น

สุดท้ายหากใครกำลังมองหาผู้ให้บริการ Cloud ชั้นนำในประเทศไทย ที่ช่วยนำเสนอโซลูชั่น Kong Enterprise บน Cloud Platform ผมขอแนะนำ Cloud HM ผู้ให้บริการ Cloud ครบวงจรมีผู้เชี่ยวชาญด้าน Cloud ที่พร้อมให้คำปรึกษา สำหรับท่านที่สนใจบริการ Kong ของ Cloud HM สามารถติดต่อได้ผ่านช่องทางนี้ครับ Cloud HM

Reference:

https://konghq.com/blog/enterprise/best-practices-for-api-management

https://konghq.com/blog/engineering/5-best-practices-securing-microservices-scale


— Cloud HM