สวัสดีครับ สำหรับบทความนี้เราจะมาทำความรู้จัก Service Account บท Google Cloud Platform ซึ่งผมคิดว่าเป็นเครื่องมือ Authentication ตัวนึงที่สำคัญมากในการ Develope อะไรต่าง ๆ ที่เกี่ยวข้องกับ Google Cloud Platform ว่ามันคืออะไร เอาไว้ใช้งานแบบไหน ซึ่งบางคนอาจจะเคยใช้มาก่อนแต่ก็งงว่ามันคืออะไรกันแน่ และวิธีการใช้ที่ถูกต้องต้องใช้แบบไหน วันนี้เรามาทำความเข้าใจกันครับ
ก่อนจะไปดูเรื่อง Service Account ควรไปทำความเข้าใจเรื่อง Cloud IAM ก่อนครับ
ทำความรู้จักกับเทคโนโลยีอื่นๆ บน Google Cloud กับกิจกรรม webinar
ถ้าจะให้อธิบายง่าย ๆ เรามาทำความเข้าใจ Google Account ที่เราเคยใช้กันที่เป็น Email กันก่อน หรือ เราเรียก Account แบบนี้ว่า User ซึ่งเราก็สามารถใช้ Google Cloud Resource ต่างๆ ตาม Permission กับ Role ใน IAM ได้ แต่เจ้าตัว Service Account จะเป็น Account แบบพิเศษที่จะไม่ได้แสดงถึง User หรือ Google เรียกว่าการใช้งานแบบ Non-user
แล้วการใช้งานแบบ Non-user เป็นแบบไหน ? ก็ประมาณว่าถ้าเรามีการเรียกใช้ Service Google Cloud ที่ On-premise หรือบน Cloud โดยที่ User ไม่ได้เรียกใช้เองแบบที่มี Oauth2 เด้งขึ้นมาลองนึกเวลาเราใช้ Email Authentication อะไรซักอย่างนั่นแหละ เช่น การเขียน Cron Script. Terraform, เขียนโปรแกรมเชื่อมต่อ API ของ Google Cloud ส่วนก็จะใช้ Service Account ทั้งนั้น
ตัว Service Account Keys เป็น Private/Public RSA Key pair ที่ใช้ในการ Authenticate เข้าใช้ Google Cloud APIs ซึ่งจะแบ่งเป็น 2 แบบ คือ
ใช้ Service Account ตอนไหนดี?
ก่อนที่เราจะเรียกใช้ Service Account เราควรเข้าใจก่อนว่า
ทีนี้เรามาดูรูปภาพ Flow นี้ประกอบจะได้เข้าใจง่ายยิ่งขึ้น
ยกตัวอย่างสมมติเราจะใช้ Service Account ที่ On-premise และต้องการเพิ่ม Permission แบบเฉพาะเจาะจง หรือเรียกว่า least privilege ถ้าดูจาก flow นี้ เราจะได้ใช้ Serivce Account แบบ User Managed Keys และ ใช้ IAM แบบ Predefined Role.
Predefined Role กับ Primitive Role แตกต่างกันอย่างไร?
Primitive roles จะมีผลต่อ Google Cloud resource ทั้งหมด แต่ Predefined role จะมีผลต่อ Service แบบเฉพาะเจาะจง ใน Google Cloud สามารถดู Document ของ Google Cloud เพิ่มเติมได้ที่ : https://cloud.google.com/iam/docs/understanding-roles
วิธีการสร้าง Service Account? แบบใช้ Google Cloud Web interface
1. Log in ไปที่ Google Cloud Platform Console.
2. ดูว่าเราเลือก Project ถูกต้องมั้ย
3. ไปที่ Hamburger menu ที่ตำแหน่งบนซ้าย แล้วเลือกหา Identity > Service accounts
4. คลิ๊กที่ + CREATE SERVICE ACCOUNT
5. สร้าง Service Account ตั้งชื่อ มี Concept ประมาณนี้ทำ <team name>-<resources accessed>-<what your app does> ทำให้สามารถเข้าใจได้ง่ายยิ่งขึ้น และ สามารถใส่คำอธิบายเพิ่มเติมไปด้วยได้ที่ช่อง Description
6. กด Create จากนั้นเราต้องทำการให้ สิทธิ Service Account ตามที่เราต้องการ ยกตัวอย่างเช่น ทีม Cath ต้องการทำ Data pipeline โดยใช้ Cloud Storage และ BigQuery ในการทำ เราก็ให้ Role ที่เกี่ยวข้องไป
7. กด CONTINUE ต่อมาจะเป็นเกี่ยวกับให้สิทธิการเข้าถึง จัดการ หรือ ใช้ Service Account ตัวนี้เราสามารถเลือก User ที่เป็น Email หรือ Service Account ก็ได้
8. ถึงตอนนี้เราก็สร้าง Service Account ที่สามารถใช้ได้บน Google Cloud Platform เป็น Google Managed ที่นี้เราอยากนำไปใช้นอก Google Cloud Platform เป็น User Managed ทำยังไง เริ่มที่กลับไปที่หน้าแรกของ Service Account : Identity > Service accounts
9. กดที่ปุ่ม ... ด้านขวา แล้วกด > Create Key
10. กดสร้าง Private Key เลือก Key type เป็น JSON
11. การใช้งานก็สามารถนำไปใส่ใน Coding ได้หลากหลาย Language สามารถดู Library ได้โดยกดที่ link Google Cloud’s Client Libraries เช่น ต้องการใช้ Google Cloud APIs BigQuery โดยใช้ Pyhon
ต่อมาเมื่อเราเริ่มใช้ Service Account ที่เป็น User Managed แล้วเราต้องระวังในการใช้ให้มากขึ้นทีนี้เรามาดู ช่องโหว่ของการใช้ Service Account กัน
ตอนที่ใช้งาน บางคน หรือ บางบริษัท คงไม่ได้ลงทุน หรือ ศึกษาขั้นตอนการทำ Secret Management Solution ทำให้มีโอกาสที่จะทำให้ Service Account หลุดออกไปยังภายนอก Organization หรือ Environment ของเราได้ ซึ่งสามารถเหตุที่พบเจอได้บ่อยๆ เช่น เผลอ Push code ไปที่ Git repositoies ที่เป็น Public ซึ่งจะทำให้ Service Account ของเราหลุดออกไปโดยใช้เวลาไม่นาน เปิดอีกที Google Cloud เราจะถูกสร้าง VM Instance ที่ลงโปรแกรม Miner Cryptocurrency ไปแล้ววันถัดเราอาจดูเก็บค่าใช้งานไปเป็นล้านๆ ก็เป็นไปได้
Best Practice ของการใช้งาน Service Account
ตอนนี้ก็จะได้เข้าใจว่า Service Account มันคืออะไร ทำงานแบบไหน กันแล้วนะครับ จะเห็นว่า Service Account เนี่ยมีทั้งประโยชน์ และ โทษ เลยใช่ไหมครับ ขอเตือนอีกครั้งนะครับการที่ Service Account leak ออกไปนี่อันตรายมาก ๆ นะครับเสียหายกันมาเยอะแล้ว แต่ถ้าประสบปัญหานี้อยู่สามารถติดต่อ Support ของ Google ได้นะครับ เดี๋ยวเค้าจะให้แนวทางการช่วยเหลือมาครับ หรือสามารถติดต่อ Partner ที่เราใช้บริการ Billing อยู่ก็ได้ครับ นอกจากตัว Service Account บน Google Cloud Platform ยังมีอะไรอีกหลายอย่างที่น่าเอามาอธิบายครับ เดี๋ยวจะเอามาเขียนเรื่อยๆ ครับ ถ้าว่างนะครับฮ่าา
บทความนี้ถ้าผิดพลาด หรือ ตกหล่นอะไรไป ขออภัยนะครับ มีความคำถามหรือสงสัยอะไรคอมเม้นกันได้ครับ
ขอบคุณครับ
Written by Thanatip Suwanchundee
Cloud Ace Thailand
หากคุณสนต้องการคำปรึกษา Cloud Ace Thailand พร้อมให้บริการที่จะสนับสนุนคุณตั้งแต่ การให้คำปรึกษา จนถึงการออกแบบระบบ ติดตั้งระบบ ย้ายระบบ ในฐานะ Google Cloud Partner ที่มีความเชี่ยวชาญ และได้รับรางวัล Service partner of the year ในปี 2019
ติดต่อเรา th_sales@cloud-ace.com
Thank you for subscribing!
Have a great day!