การย้ายข้อมูลจาก Google Drive ไป Cloud Storage

[Cross-posted on blog.niwpopkorn.com] Google Drive เป็นพื้นที่เก็บข้อมูลใน cloud ที่ผู้ใช้ทั่วไปสามารถเข้าไป สร้างเอกสาร, upload และแชร์เอกสารให้เพื่อนได้ โดยสะดวก ด้วยความง่าย และมี feature ครอบคลุมการใช้งานทั่วๆ ไป แค่สมัคร account แล้วก็เริ่มใช้งานได้เลย มันจึงเหมาะกับการเป็นที่รับ-ส่ง ไฟล์ แบบเร็วๆ Google Cloud Storage เป็นบริการเก็บข้อมูลบน cloud อีกตัวหนึ่งจาก Google อยู่ในกลุ่มบริการของ Google Cloud Platform ที่มีออกแบบมาสำหรับงานระบบหรือ application ในการใช้งาน Google Cloud Storage นอกจากการสมัคร account แล้ว จะต้องตั้ง project สร้าง bucket ซึ่งต้องตั้งชื่อ เลือก location ของข้อมูล เลือก class ของ storage … Continue reading การย้ายข้อมูลจาก Google Drive ไป Cloud Storage

ตั้งค่าแจ้งเตือนเมื่อข้อมูล Cloud Storage ถูกตั้งค่าเป็นสาธารณะ ด้วย Cloud Monitoring

[Cross-posted on blog.niwpopkorn.com] การใช้งาน Cloud นั้น เป็นการใช้พลังประมวลผล และพื้นที่เก็บข้อมูลอันมหาศาลของผู้ให้บริการ เช่น Google, AWS หรือ Azure โดยมีข้อดีคือ เราสามารถเข้าถึงทรัพยากรเหล่านั้นได้ทันที ไม่ต้องสร้างโครงสร้างพื้นฐานต่างๆ เองทั้งหมด ส่วนเรื่องความปลอดภัยนั้น ผู้ให้บริการแต่ละรายก็มีมาตรฐานสากล และมีการตรวจสอบจากผู้ตรวจสอบภายนอก เพื่อแสดงให้เห็นถึงความปลอดภัยทั้งจากการดำเนินงานของผู้ให้บริการ และมาตรการความปลอดภัยในทุกๆ ขั้นตอนของบริการนั้นๆสิ่งหนึ่งที่ยังเป็นจริงอยู่ก็คือ แม้ว่าบริการนั้นจะปลอดภัยแค่ไหน แต่ถ้าเราเผลอเรอ ตั้งค่าการเข้าถึงไว้หละหลวม ก็มีสิทธิ์ที่ข้อมูลจะรั่วไหลได้เช่นกัน เช่นข่าวนี้ การป้องกันสามารถทำได้โดยการกำหนดสิทธิ์ของผู้ที่เข้าถึงตามความจำเป็น และจำกัดขอบเขต แต่ถึงอย่างนั้น ความผิดพลาดจากการตั้งค่าก็ยังคงเกิดได้อยู่นอกจากแนวทางการระวังไม่ให้เกิดความผิดพลาดขึ้น และการตรวจสอบความผิดปกติจาก log แล้ว การรู้ตัวอย่างรวดเร็วเมื่อเกิดปัญหา ทำให้ปัญหาถูกแก้ไขอย่างรวดเร็ว และจำกัดขอบเขตความเสียหายได้ เป็นอีกแนวทางหนึ่งที่ช่วยให้ผู้ดูแลระบบสามารถรับมือกับปัญหานั้นได้ดียิ่งขึ้นบทความนี้จะยกตัวอย่างการตั้งค่าบน Google Cloud Platform เพื่อแจ้งเตือนทันทีที่มีการ "เปิด" ถังข้อมูลออกสู่สาธารณะ ไม่ว่าจะโดยตั้งใจหรือไม่ ก็ตาม (หากในอนาคตมีระบบที่วัดระดับความตั้งใจของคนได้ ก็เป็นไปได้ที่จะกำหนดเงื่อนไขให้แจ้งเตือนแค่กรณีเผลอเรอด้วยความสะเพร่า)สิ่งที่เราใช้เป็นตัวอย่างเพื่อตรวจสอบ คือ Google Cloud Storage และเหตุการณ์ที่เราจะเฝ้าระวังคือ การเปิดให้ทุกคนเข้าถึงได้ หากตั้งค่าแบบนี้ ก็เท่ากับเปิดให้ทุกคนเข้าถึงข้อมูลบน … Continue reading ตั้งค่าแจ้งเตือนเมื่อข้อมูล Cloud Storage ถูกตั้งค่าเป็นสาธารณะ ด้วย Cloud Monitoring

การทดสอบ SMTP connection กับ G Suite SMTP relay service

[Cross-posted on blog.niwpopkorn.com] ลูกค้า G Suite นอกจากจะได้อีเมลให้ผู้ใช้ในองค์กรแล้ว หากต้องการส่งอีเมลออกจากระบบอื่นๆ เช่น เครื่อง printer หรือ app ภายใน สามารถตั้งค่าให้ส่งผ่าน G Suite SMTP relay service ได้ด้วย โดยไม่ต้องเสีย license user แต่อย่างใดโควต้าที่ Google ให้ลูกค้า G Suite ใช่ส่งอีเมลผ่าน SMTP relay นั้น คือ 130 เท่าของจำนวน G Suite license โดยโควต้านี้จะนับในช่วงเวลา 24 ชม. ตัวอย่างเช่น หากองค์กรของเรามี G Suite user 100 license ก็จะสามารถส่งอีเมลผ่าน SMTP relay ได้ 13,000 ฉบับ … Continue reading การทดสอบ SMTP connection กับ G Suite SMTP relay service

ตั้ง Active Directory แบบไม่ต้องดูแล server เอง ด้วย Managed Service for Microsoft Active Directory

[Cross-posted on blog.niwpopkorn.com] Microsoft Active Directory (MS AD) เป็นบริการจัดเก็บข้อมูลทั้ง user, group, computer และอื่นๆ ที่มีการใช้งานอย่างแพร่หลายในองค์กรขนาดกลางและขนาดใหญ่ ประโยชน์ที่ได้รับคือ องค์กรสามารถจัดการ directory ส่วนกลาง ว่าตอนนี้มีใครได้สิทธิ์อะไรบ้าง รวมถึง policy ต่างๆ ที่จะถูกกระจายไปที่เครื่องปลายทาง เมื่อมีการ join domain เข้ามา ช่วยให้องค์กรสามารถควบคุม policy บนเครื่องผู้ใช้งานได้ ทั้งในแง่ความปลอดภัย (เช่น การสั่งปิดการถ่ายโอนข้อมูลลง usb drive) ความสะดวกและความเป็นมาตรฐานในการใช้งาน (เช่น การสั่งติดตั้ง software พื้นฐานในการทำงาน ให้แต่ละแผนก) และยังสามารถใช้เป็นศูนย์กลาง เพื่อให้ app ต่างๆ ในองค์กร เข้ามาใช้ยืนยันตัวตนผู้ใช้งานได้อีกด้วย     การตั้ง AD server เพื่อใช้งานบน Google Cloud สามารถติดตั้งบน … Continue reading ตั้ง Active Directory แบบไม่ต้องดูแล server เอง ด้วย Managed Service for Microsoft Active Directory

ถ้ามั่นใจว่าใช้ยาว ก็ลดไปเลย 50% ด้วย Committed use discounts

[Cross-posted on blog.niwpopkorn.com] หากองค์กรของเรา มีการใช้งาน Google Cloud Platform ในกลุ่ม Compute Engine อย่างสม่ำเสมอ และคิดว่าจะมี workload อยู่นานเกิน 1 ปีหรือ 3 ปี เราสามารถลดค่าใช้จ่ายที่เกิดขึ้นได้ด้วย Committed use discount resource ที่สามารถลดราคาได้ด้วย Committed use discount มีดังนี้ครับ vCPUs memory GPUs SSDs VMs ใน service ที่จะได้ประโยชน์จาก Committed use discount  จะมี Google Kubernetes Engine Dataproc Compute Engine. หมายความว่า ถ้าเราซื้อ Committed use discount ไว้ใน project หรือ billing account … Continue reading ถ้ามั่นใจว่าใช้ยาว ก็ลดไปเลย 50% ด้วย Committed use discounts

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

[Crossed-posted on blog.niwpopkorn.com] การใช้งาน 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 ประเภทนี้จะถูกปิดเป็นค่าเริ่มต้น (ยกเว้น … Continue reading ตรวจสอบการเข้าถึงข้อมูลบน GCP ด้วย Data Access audit log

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

[Crossed-post on blog.niwpopkorn.com] หากใครที่กำลังพัฒนา 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 … Continue reading การกำหนด quota บน GCP เพื่อป้องกันการเรียก Maps API เยอะจนตังค์หมด

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

[Cross-posted on blog.niwpopkorn.com] เมื่อนานมาแล้ว ผมพัฒนา Apps Script ขึ้นมาตัวหนึ่ง เพื่อดึงข้อมูลจาก Reseller API มาตรวจสอบ หากเข้าเงื่อนไขที่กำหนดไว้ script ก็จะส่งอีเมลแจ้งเตือนไปยังทีมงานที่ดูแลข้อมูลชุดนั้น เมื่อเวลาผ่านไปนานเข้า จำนวนข้อมูลที่ต้องตรวจสอบก็เยอะขึ้น และจำนวนอีเมลที่ต้องส่งแจ้งเตือนออกไปก็มากขึ้นเป็นเงาตามตัว จนถึงขีดจำกัดของ script account ที่ผมใช้รัน script เพื่อดึงข้อมูลจาก Reseller API นั้น เป็น G Suite free editon ซึ่งมีข้อจำกัดในการส่งอีเมลที่ 100 ฉบับต่อวัน ซึ่งในบางวันนั้น จำนวนอีเมลที่ต้องส่งออกก็สูงเกินข้อจำกัดนี้ และการที่ระบบส่งอีเมลไม่ได้ ก็ส่งผลให้ทีมงานที่ทำงานกับอีเมลแจ้งเตือนนี้ ทำงานได้ลำบาก reseller account ที่ใช้ส่งอีเมลแจ้งเตือน มีข้อจำกัดที่ 100 ฉบับต่อวัน ซึ่งไม่พอกับความต้องการ ทางออกที่ก้าวข้ามขีดจำกัดนี้ มีอยู่หลายทาง เช่น การเปลี่ยนวิธีการส่งอีเมล แทนที่จะใช้ email service ของ … Continue reading ออกแบบระบบให้คุยข้าม module กันได้ ด้วย Pub/Sub

ลดเวลาการเรียก API ใน Apps Script ด้วย fecthAll

[Cross-posted on blog.niwpopkorn.com] Apps Script มี function UrlFetchApp.fetch() สำหรับเรียก http request ไปที่ service อื่นๆ ได้ ซึ่งสามารถนำมาใช้เรียก API ภายนอกได้เช่นกัน แต่หากเรามีข้อมูลจำนวนมาก และต้องเรียก UrlFetchApp.fetch() หลายๆ ครั้ง จะทำให้ระบบทำงานช้าและเกินข้อจำกัดของ Apps Script ไป (document ระบุไว้ว่าได้ 6 นาที) วันนี้ผมจะมาแนะนำวิธีแก้ปัญหาในกรณี้นี้กันคับ account ที่ผมใช้งาน ตกอยู่ในกลุ่มที่มีข้อจำกัด 6 min/execution   เมื่อการเรียกทีละ request ไม่ตอบโจทย์ เรื่องเริ่มมาจากผมมีโปรเจกต์ที่มีข้อมูลชื่อโดเมน จำนวนประมาณ 1,400 รายการ ที่ต้องการดึงค่า DNS มาตรวจสอบอะไรบางอย่าง ด้วยการเรียก http request ไปที่ https://dns.google.com/resolve?name=%DOMAIN% โดยการแทนค่า %DOMAIN% ด้วยโดเมนที่ต้องการ … Continue reading ลดเวลาการเรียก API ใน Apps Script ด้วย fecthAll

แนะนำ Dialogflow: การใช้ regex เพื่อดึงข้อมูลด้วย pattern

[Cross-posted on blog.niwpopkorn.com] การสร้าง chatbot engine ด้วย Dialogflow นั้น มีความสะดวกตรงที่ เราสามารถใส่ตัวอย่างข้อความที่ผู้ใช้จะพิมพ์มาคุยกับ bot ลงใน training phrase ระบบจะเรียนรู้จากข้อมูลตัวอย่างนั้นและทำความเข้าใจประโยค ทำให้เมื่อผู้ใช้พิมพ์มาไม่ตรงกับ training phrase ระบบก็ยังสามารถเข้าใจความหมายและโต้ตอบได้อย่างถูกต้อง (อ่านเพิ่มเติม: แนะนำ Dialogflow: Intent, Parameters และ Fulfillment) ในบางกรณี ข้อมูลที่เราต้องการจากผู้ใช้ ไม่สามารถระบุลงไปใน training phrase ได้โดยตรง เนื่องจากเป็นข้อมูลที่ไม่ตายตัว จึงไม่สามารถใช้วิธีการยกตัวอย่างเพื่อให้ระบบเรียนรู้ได้ เช่น สำหรับ chatbot แจกป๊อบคอร์น สมมติว่า เราจะขอให้ผู้ใช้ใส่เลขบัตรประจำตัวประชาชนมาเพื่อยืนยันตัวตนก่อน จึงจะแจกป๊อปคอร์นให้ จะเห็นว่า ค่าที่ผู้ใช่จะใส่เข้ามานั้นเป็นค่าเฉพาะของแต่ละคนและไม่ซ้ำกันเลย การจะระบุค่านี้ได้เราจะใช้ความสามารถของ regex เข้ามาช่วยครับ regex หรือ Regular Expression เป็นวิธีการระบุรูปแบบ (pattern) ของตัวอักษรที่เราต้องการค้นหา ซึ่งจะใช้ได้ดีกับการค้นหาข้อมูลที่มีรูปแบบ ในกรณีนี้เราจะใช้ regex เพื่อระบุรูปแบบของเลขบัตรประจำตัวประชาชนกันครับ สิ่งที่เรารู้คือ เลขบัตรประจำตัวประชาชนมี … Continue reading แนะนำ Dialogflow: การใช้ regex เพื่อดึงข้อมูลด้วย pattern