บทความ

กำลังแสดงโพสต์จาก เมษายน, 2020

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

รูปภาพ
การใช้งาน 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 การเข้าถึงข้อม

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

รูปภาพ
หากใครที่กำลังพัฒนา application และมีการเรียกใช้งาน Google Maps Platform  ที่เป็นบริการให้ข้อมูลด้านแผนที่ เส้นทาง หรือสถานที่ต่างๆ Google มี quota ให้ใช้งานได้ฟรี $200 ทุกเดือน Google ให้ใช้ Maps API ได้ฟรี $200 ทุกเดือน ส่วนที่เกินจาก $200 นั้นจะคิดค้าใช้งานตามจำนวนการเรียกใช้ API ตามรายละเอียดในหน้า Pricing & Plans ตารางราคา Places API ที่คิดค่าใช้จ่ายทุก 1,000 request จุดที่ต้องระวังคือ ระหว่างที่กำลังพัฒนา application อยู่นั้น มีความเป็นไปได้ที่ code ที่ยังเขียนไม่สมบูรณ์ จะมีการเรียกใช้ API เป็นจำนวนมาก (เช่น การวน loop ไปเรื่อยๆ) ทำให้เกิดค่าใช้จ่ายโดยไม่จำเป็น (และไม่รู้ตัว) ค่าใช้จ่ายที่เกิดจากการเรียกใช้ Places API ที่พุ่งสูงผิดปกติ ค่าใช้จ่ายที่เกิดจากการเรียกใช้ Maps API โดยไม่ได้ตั้งใจ การป้องกันเหตุการณ์ดังกล่าว นอกจากจะควบคุมกระบวนการพัฒนา application ให้รัดกุม รอบคอบมากขึ้นแล้ว เรายังสามารถป้องกันได้จากการกำหนด quota ที่ project บน GCP ได้ด้วยครับ หากเรามีการแยก environment หรือ project บน GCP เป็น dev, test, production ก็สามารถกำหนด quo

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

รูปภาพ
เมื่อนานมาแล้ว ผมพัฒนา Apps Script ขึ้นมาตัวหนึ่ง เพื่อดึงข้อมูลจาก Reseller API มาตรวจสอบ หากเข้าเงื่อนไขที่กำหนดไว้ script ก็จะส่งอีเมลแจ้งเตือนไปยังทีมงานที่ดูแลข้อมูลชุดนั้น เมื่อเวลาผ่านไปนานเข้า จำนวนข้อมูลที่ต้องตรวจสอบก็เยอะขึ้น และจำนวนอีเมลที่ต้องส่งแจ้งเตือนออกไปก็มากขึ้นเป็นเงาตามตัว จนถึงขีดจำกัดของ script account ที่ผมใช้รัน script เพื่อดึงข้อมูลจาก Reseller API นั้น เป็น G Suite free editon ซึ่งมีข้อจำกัดในการส่งอีเมลที่ 100 ฉบับต่อวัน ซึ่งในบางวันนั้น จำนวนอีเมลที่ต้องส่งออกก็สูงเกินข้อจำกัดนี้ และการที่ระบบส่งอีเมลไม่ได้ ก็ส่งผลให้ทีมงานที่ทำงานกับอีเมลแจ้งเตือนนี้ ทำงานได้ลำบาก reseller account ที่ใช้ส่งอีเมลแจ้งเตือน มีข้อจำกัดที่ 100 ฉบับต่อวัน ซึ่งไม่พอกับความต้องการ ทางออกที่ก้าวข้ามขีดจำกัดนี้ มีอยู่หลายทาง เช่น การเปลี่ยนวิธีการส่งอีเมล แทนที่จะใช้ email service ของ Apps Script ก็สามารถเปลี่ยนไปใช้ SMTP relay อื่นๆ ได้ แต่ก็จะมีองค์ประกอบที่ต้องดูแลเพิ่มเติมเข้ามา ด้วยความที่บริษัทใช้ G Suite Business อยู่แล้ว และเมื่อดูจาก quota อีเมลก็สามารถส่งได้มา