Posts

Showing posts from April, 2020

ตรวจสอบการเข้าถึงข้อมูลบน GCP ด้วย Data Access audit log

Image
การใช้งาน Google Cloud Platform นั้น หากเราต้องการตรวจสอบว่ามีใครเข้ามาทำอะไรกับระบบ หรือเข้ามาทำอะไรกับข้อมูลในระบบบ้าง สามารถตรวจสอบได้จาก Cloud Audit Logs ซึ่งมีข้อมูล log 3 แบบ และระยะเวลาการเก็บ log ดังตารางด้านล่าง



Admin Activity เป็น log แสดงการเรียก API หรือการกระทำ ที่เกี่ยวข้องกับการดูแล GCP ที่แก้ไขค่า config หรือ metadata ของ resource ต่างๆData Access เป็น log แสดงการอ่านค่า config หรือ metadata ของ resource ต่างๆ รวมถึง การเรียก API ของผู้ใช้ในการ สร้าง แก้ไข อ่าน ข้อมูลที่ผู้ใช้ใส่เข้ามาในระบบ, log ประเภทนี้จะถูกปิดเป็นค่าเริ่มต้น (ยกเว้น BigQuery ที่เปิด Data Access log เป็นค่าเริ่มต้น) เนื่องจาก log สามารถมีขนาดที่ใหญ่มากได้ หากต้องการใช้งานจึงต้องเข้าไปเปิดต่างหากSystem Event เป็น log แสดงการแก้ไขค่า config ของ resources โดยระบบของ Google ไม่เกี่ยวข้องกับการกระทำของผู้ใช้งาน
การเปิดใช้ Data Access log เนื่องจาก Data Access log สำหรับการเข้าถึงข้อมูล ถูกปิดเป็นค่าเริ่มต้น เราจึงต้องเข้ามาตั้งค่าเพื่อเปิด Data Access log หากต้องการ log การเข้าถึงข้อมูลในแต่ละ service โดย…

การกำหนด quota บน GCP เพื่อป้องกันการเรียก Maps API เยอะจนตังค์หมด

Image
หากใครที่กำลังพัฒนา application และมีการเรียกใช้งาน Google Maps Platform ที่เป็นบริการให้ข้อมูลด้านแผนที่ เส้นทาง หรือสถานที่ต่างๆ Google มี quota ให้ใช้งานได้ฟรี $200 ทุกเดือน


ส่วนที่เกินจาก $200 นั้นจะคิดค้าใช้งานตามจำนวนการเรียกใช้ API ตามรายละเอียดในหน้า Pricing & Plans


จุดที่ต้องระวังคือ ระหว่างที่กำลังพัฒนา application อยู่นั้น มีความเป็นไปได้ที่ code ที่ยังเขียนไม่สมบูรณ์ จะมีการเรียกใช้ API เป็นจำนวนมาก (เช่น การวน loop ไปเรื่อยๆ) ทำให้เกิดค่าใช้จ่ายโดยไม่จำเป็น (และไม่รู้ตัว)




การป้องกันเหตุการณ์ดังกล่าว นอกจากจะควบคุมกระบวนการพัฒนา application ให้รัดกุม รอบคอบมากขึ้นแล้ว เรายังสามารถป้องกันได้จากการกำหนด quota ที่ project บน GCP ได้ด้วยครับ

หากเรามีการแยก environment หรือ project บน GCP เป็น dev, test, production ก็สามารถกำหนด quota ดังกล่าวแยกตาม environment หรือ project ได้เลย เช่น บน dev อาจจะกำหนดให้ quota น้อยหน่อย ส่วนบน production ก็ใช้ default quota ไปตามปกติ

วิธีการกำหนด quota บน GCP 1. ที่หน้า cloud console เลือก project ที่ต้องการ และไปที่เมนู IAM & Admin &…

ออกแบบระบบให้คุยข้าม module กันได้ ด้วย Pub/Sub

Image
เมื่อนานมาแล้ว ผมพัฒนา Apps Script ขึ้นมาตัวหนึ่ง เพื่อดึงข้อมูลจาก Reseller API มาตรวจสอบ หากเข้าเงื่อนไขที่กำหนดไว้ script ก็จะส่งอีเมลแจ้งเตือนไปยังทีมงานที่ดูแลข้อมูลชุดนั้น เมื่อเวลาผ่านไปนานเข้า จำนวนข้อมูลที่ต้องตรวจสอบก็เยอะขึ้น และจำนวนอีเมลที่ต้องส่งแจ้งเตือนออกไปก็มากขึ้นเป็นเงาตามตัว จนถึงขีดจำกัดของ script

account ที่ผมใช้รัน script เพื่อดึงข้อมูลจาก Reseller API นั้น เป็น G Suite free editon ซึ่งมีข้อจำกัดในการส่งอีเมลที่ 100 ฉบับต่อวัน ซึ่งในบางวันนั้น จำนวนอีเมลที่ต้องส่งออกก็สูงเกินข้อจำกัดนี้ และการที่ระบบส่งอีเมลไม่ได้ ก็ส่งผลให้ทีมงานที่ทำงานกับอีเมลแจ้งเตือนนี้ ทำงานได้ลำบาก


ทางออกที่ก้าวข้ามขีดจำกัดนี้ มีอยู่หลายทาง เช่น การเปลี่ยนวิธีการส่งอีเมล แทนที่จะใช้ email service ของ Apps Script ก็สามารถเปลี่ยนไปใช้ SMTP relay อื่นๆ ได้ แต่ก็จะมีองค์ประกอบที่ต้องดูแลเพิ่มเติมเข้ามา

ด้วยความที่บริษัทใช้ G Suite Business อยู่แล้ว และเมื่อดูจาก quota อีเมลก็สามารถส่งได้มากถึง 1,500 ฉบับต่อวัน ซึ่งน่าจะเพียงพอกับการใช้งานไปได้อีกนาน แต่เนื่องจาก API ที่ผมต้องดึงข้อมูลมานั้น …