Amazon Cognito คืออะไร? การแนะนำฟังก์ชั่นล่าสุดของ AWS

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS再入門ブログリレー2022 Amazon cognito編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับ ผม BEGOMIN แผนก consulting ครับ

ครั้งนี้อยากจะให้เพื่อนๆทุกท่านได้มารู้จักกับบริการของ AWS ที่เกี่ยวข้องกับการจัดการความปลอดภัยของผู้ใช้งานกันครับ โดยบริการนี้มีชื่อว่า Amazon cognito ครับ รายละเอียดจะเป็นยังไงตามไปดูกันเลย

เกี่ยวกับ Amazon cognito

เนื้อหาหลักๆเกี่ยวกับ Amazon Cognito อ้างอิงจากเอกสารของ AWS นี้ครับ

Amazon Cognitoเป็นบริการแบบไหน?

Amazon Cognito เป็นบริการที่สามารถติดตั้ง 「การยืนยันตัวตน (Authentication)」「การขออนุมัติ (Authorization)」「การจัดการ User」เข้าไปใน web application หรือ mobile application ได้อย่างง่ายดาย

โดยหลักๆแล้ว Amazon Cognito จะประกอบด้วย 2 component คือ 「user pool」และ「 identity pools (หรือ federated identities)」 (ในเชิงลึกจริงๆยังมี cognito Sync ด้วยโดยจะอธิบายในภายหลัง)

user pool และ identity pools ต่างเป็น component ของ Amazon Cognito ทั้งคู่โดยทั้งคู่ต่างก็เป็น component ที่แยกกันอย่างอิสระ และสามารถแยกใช้งานกันได้ รายละเอียดเพิ่มเติมจะอธิบายเกี่ยวกับ use case ที่เหมาะกับการใช้งานต่างๆในช่วงต่อๆไปครับ

user pool คือ

user pool เป็น component ที่มีฟังก์ชั่น 「การยืนยันตัวตน」และ「การจัดการ User」

ด้วยการใช้ user pool ผู้ใช้งานจะสามารถ log in เข้าสู่แอพพลิเคชั่นมือถือ,เว็บแอพพลิเคชั่น ผ่าน Amazon Cognito ได้

ยิ่งไปกว่านั้น user pool ยังสามารถทำงานร่วมกับผู้ให้บริการ IdP (Identity Provider) ต่างๆได้ เช่น Google , Facebook , Apple หรือ Amazon เป็นต้น

โดยฟังก์ชั่นที่สามารถใช้งาน user pool ได้มีดังนี้

  • Sign-up and sign-in services.
  • Web UI ที่สามารถปรับแต่งสำหรับการ sign-in ได้
  • sign-in เพื่อเชื่อมกับ SAML IdP และ social IdP เช่น Facebook, Google, Amazon, Apple ฯ
  • การจัดการ User directory และ user profile
  • ฟังก์ชั่นความปลอดภัย อย่างเช่น Multi-factor authentication (MFA) เป็นต้น ที่จะตรวจสอบข้อมูลยืนยันตัวตน เบอร์โทรศัพท์ และ อีเมล์ เพื่อป้องกันการเข้าถึงแอคเคาท์
  • การถ่ายโอน User ด้วย AWS Lambda trigger และ workflow ที่ได้รับการ customize

use case สำหรับใช้งาน user pool จะขอแนะนำหลักๆตามนี้ครับ

  • ออกแบบ webpage สำหรับ Sign-up and sign-in เพื่อเข้าใช้งานแอพพลิเคชั่น
  • เข้าถึงข้อมูลผู้ใช้งาน และสามารถจัดการข้อมูลนั้นได้
  • ปรับการเรียกร้องในการเข้าระบบตามระดับความเสี่ยงต่างๆ เช่นการติดตามผ่าน IP Adress , สถานที่ หรือ อุปกรณ์ของผู้ใช้งาน เป็นต้น
  • ใช้งาน authentication flow สำหรับแอพพลิเคชั่น

identity pools (หรือ federated identities)คือ

identity pools (หรือ federated identities) เป็น component ที่มีฟังก์ชั่นของการ 「อนุมัติ」 ที่จะทำการสร้าง ID เฉพาะขึ้นมาสำหรับผู้ใช้งานและสามารถใช้งานร่วมกับ IdP ได้

ด้วยการใช้ identity pools จะดึงข้อมูลยืนยันชั่วคราวของ AWS มาจำกัดสิทธ์ของผู้ใช้งาน ทำให้สามารถเข้าถึงบริการอื่นๆของ AWS ได้

identity pools จะรองรับ IdP ดังต่อไปนี้

  • Social IdP อย่างเช่น Facebook, Google, Amazon, Apple เป็นต้น
  • Open ID Connect provider
  • SAML IdP
  • การยืนยันตัวตนที่รับรองโดยนักพัฒนา

use case สำหรับใช้งาน identity pools จะขอแนะนำหลักๆตามนี้ครับ

  • อนุญาตให้ผู้ใช้งานเข้าถึง AWS Resource อย่างเช่น DynamoDB หรือ Amazon S3 เป็นต้น
  • สร้างข้อมูลยืนยันตัวตนชั่วคราวสำหรับผู้ใช้งานที่ยังไม่ได้รับการอนุมัติ

เพิ่มเติม: Cognito Sync คือ

อย่างที่จั่วหัวไปในตอนต้นแล้วว่า จริงๆแล้ว Amazon Cognito ยังมี component ที่ชื่อว่า Cognito Sync อยู่ด้วย

โดย Cognito Sync จะเป็น Client library สำหรับซิงค์ข้อมูลผู้ใช้งานของแอพพลิเคชั่นระหว่างอุปกรณ์ครับ

แต่ทว่า ในปัจจุบันมีบริการที่มีชื่อว่า AWS AppSync ซึ่งมีฟังก์ชั่นของการซิงค์ข้อมูล + ฟังก์ชั่นของ α อยู่แล้ว
จึงอยากแนะนำท่านที่จะใช้งานใน use case ที่คล้ายๆกับ Cognito Sync ให้ใช้ AWS AppSync ครับ

และจะขออธิบายเกี่ยวกับ Cognito Sync ไว้เท่านี้ครับ

เกี่ยวกับค่าใช้จ่าย

ค่าบริการของ Amazon Cognito จะเกิดขึ้นเฉพาะการใช้งาน component ที่มีค่าใช้จ่ายเท่านั้นคือ user pool และ Cognito Sync เท่านั้น ในส่วนของ identity pools จะสามารถใช้งานได้ฟรีครับ ( ในส่วนของราคาของ Cognito Sync จะไม่อธิบายในครั้งนี้ครับ )

ราคาของ user pool จะมีกรอบการใช้งานฟรีได้แบบไม่จำกัดเวลา

ราคาของ user pool จะแปรเปลี่ยนตาม IdP ที่ใช้ , MAU (monthly active user) ครับ

อ้างอิงข้อมูลจาก ราคา Amazon Cognitoโดยตารางราคาจะแสดงยอดการใช้งานใน singapore region (ap-southeast-1) ตาม IdP ที่ใช้ครับ

  • ในกรณีที่ผู้ใช้งาน sign-in โดยตรงผ่าน IdP social ต่างๆ , ข้อมูลยืนยันตัวตนของ user pool
ระดับราคา (MAU) ราคาต่อ MAU (USD)
~ 50,000 ฟรี
50,001 ~ 100,000 0.0055
100,001 ~ 1,000,000 0.0046
1,000,001 ~ 10,000,000 0.00325
10,000,001 ~ 0.0025
  • ผู้ใช้ที่ลงชื่อเข้าใช้ผ่านการเชื่อมโยง SAML หรือ OIDC
ระดับราคา (MAU) ราคาต่อ MAU (USD)
~ 50 ฟรี
51 ~ 0.0015

Management console หน้าใหม่

หน้า console ของ Amazon Cognito พึ่งมีการอัพเดทใหม่ไปเดือนพฤศจิกายน 2021 ที่ผ่านมา โดยเราสามารถใช้งานหน้า console ใหม่นีได้แล้ว (แต่หน้าจอตัวเก่าก็ยังใช้ได้นะครับ)

เรามาลองเปรียบเทียบหน้าตาทั้งแบบเก่าและใหม่กันครับ

  • หน้าจอหลังจากเข้ามาหน้าบริการ

หน้าจอใหม่

ในหน้าจอรูปแบบใหม่ตรงขวามือ เมื่อเลือกที่เมนูใต้ Start from your business case จะแสดงปุ่มเมนูสร้าง user pool และ identity pools ขึ้นมาให้เลือกครับ

โดยเมื่อเลือกที่ Add user directories to your app จะแสดงปุ่มสร้าง user pool ขึ้นมา

ในขณะที่ถ้าเลือก Grant access to AWS services ก็จะแสดงปุ่มสร้าง identity pools ขึ้นมา

หน้า Management console แบบเก่า

ในขณะเดียวกัน ในหน้า console แบบเก่าจะมีเมนูให้เลือกสร้าง user pool และ identity pools อยู่แล้วครับ
หน้าตาดูเรียบง่ายแล้วก็ใช้งานง่ายดีครับ ถ้าเป็นหน้าแบบใหม่จะดูคล้ายๆกับหน้าบริการอื่นของ AWS ครับ

  • หน้าสร้าง user pool

หน้าแบบใหม่

หน้าแบบเก่า

หน้าสร้าง user pool แตกต่างกันมากเลย ไม่ว่าจะเป็นการจัดวางเมนูการตั้งค่า หรือ ออฟชั่นต่างๆ

อย่างเช่น การตั้งชื่อ user pool ในหน้าแบบเก่าจะตั้งได้ตั้งแต่ขั้นตอนแรกสุดเลย
ในขณะที่หน้าแบบใหม่ต้องไปถึงที่ขั้นตอนที่ 5 ก่อนถึงจะตั้งได้ครับ

  • หน้าสร้าง identity pools

หน้าแบบใหม่

หน้าแบบเก่า

ในหน้าจอการสร้าง identity pools แทบจะไม่ต่างกันเลย ไม่ว่าจะเข้าจากหน้าเก่าหรือใหม่ก็จะมาเจอหน้าเดียวกันนี้

แต่ใน developer guide จะมีระบุจุดที่เปลี่ยนแปลงหลักๆของในหน้าแบบใหม่ดังนี้ครับ

  • Logical grouping
  • ขั้นตอนอ้างอิงที่ให้ความสำคัญกับประสบการณ์ของผู้ใช้แอพพลิเคชั่น
  • การสนับสนุนแบบไดนามิกสำหรับโครงสร้างของ user pool
    • Pop out help text
    • Filter view
    • App category settings and recommended presets
    • คำเตือนเกี่ยวกับตัวเลือกการตั้งค่าที่ไม่สามารถย้อนกลับได้
  • การอัพเดทข้อมูลที่เกี่ยวกับการจำกัดการตั้งค่า user pool และ การจำกัด resource

และหน้า identity pools ตามข้อบนก็มีฟังก์ชั่นของ console ที่มีเฉพาะหน้าแบบเก่าอยู่ด้วยครับ

  • Amazon Cognito identity pools
  • Amazon Cognito Sync
  • การ import ผู้ใช้งานจาก CSV file ไปที่ user pool
  • การวิเคราะห์ user pool

สุดท้ายนี้

สำหรับบทความนี้ Amazon cognito คืออะไร? การแนะนำฟังก์ชั่นล่าสุดของ AWS ในปี 2022 ท่านใดที่ยังไม่รู้จัก Amazon Cognito หรือแยกความแตกต่างระหว่าง user pool กับ identity pools ไม่ออกก็อยากให้ลองได้อ่านกันนะครับ

เอกสารอ้างอิง