ข้ามไปยังเนื้อหา

Groups

ใน Keycloak มีสองแนวคิดที่เกี่ยวข้องกันแต่แตกต่างกัน คือ group และ role

  • role คือ permission หรือความสามารถ (เช่น admin, viewer, editor) role จะถูกมอบให้กับ user และถูกตรวจสอบโดยแอปพลิเคชันเพื่อตัดสินว่า user ได้รับอนุญาตให้ทำอะไร
  • group คือ container สำหรับ user group ไม่ได้มอบ permission ด้วยตัวเอง — แต่ได้รับ permission ผ่าน role ที่ map ไว้กับ group

พลังของการใช้ร่วมกัน: map role ไปยัง group, แล้วเพิ่ม user เข้า group สมาชิกทุกคนของ group จะสืบทอด role ทั้งหมดที่กำหนดให้กับ group นั้นโดยอัตโนมัติ เมื่อคุณต้องการเปลี่ยน permission ให้กับชุดของ user คุณก็อัปเดต role mapping ของ group เพียงครั้งเดียวแทนที่จะต้องไปแตะทุกบัญชี user แต่ละราย

  1. ใน admin console ตรวจสอบให้แน่ใจว่าคุณอยู่ใน realm ที่ถูกต้อง (ตรวจสอบจาก drop-down ที่มุมซ้ายบน)
  2. คลิก Groups ในแถบด้านซ้าย
  3. คลิก Create group (มุมขวาบนของรายการ group)
  4. ใส่ Name สำหรับ group (เช่น developers, support-agents)
  5. คลิก Save

group ใหม่จะปรากฏในรายการ group ตอนนี้ คลิกชื่อของตัวเองเพื่อเปิดหน้ารายละเอียดของ group และเข้าถึงแท็บต่าง ๆ ของตัวเอง

  1. เปิด group จากรายการ Groups
  2. คลิกแท็บ Members
  3. คลิก Add member
  4. ในกล่องค้นหา พิมพ์ username หรืออีเมลเพื่อค้นหา user
  5. เลือก user แล้วคลิก Add

ตอนนี้ user จะปรากฏในแท็บ Members และสืบทอด role ใด ๆ ที่ map ไว้กับ group นี้ทันที

Role mapping บน group ทำงานเหมือนกับ role mapping บน user แต่ละราย — ความแตกต่างคือสมาชิกของ group ทุกคนทั้งในปัจจุบันและอนาคตจะสืบทอด role ที่ map ไว้โดยอัตโนมัติ

  1. เปิด group จากรายการ Groups
  2. คลิกแท็บ Role mapping
  3. คลิก Assign role
  4. ใช้กล่องค้นหาเพื่อค้นหา realm role (หรือ client role) ที่คุณต้องการกำหนด
  5. เลือก role หนึ่งรายการหรือมากกว่าแล้วคลิก Assign

role ที่กำหนดจะแสดงอยู่ภายใต้ role mapping ของ group ตอนนี้ user คนใดก็ตามที่เป็นสมาชิกของ group จะมี role เหล่านี้รวมอยู่ใน token ของพวกเขา

Keycloak รองรับลำดับชั้นของ group subgroup (child group) อยู่ภายใต้ parent group สมาชิกของ subgroup จะสืบทอด role ที่ map ไว้กับ subgroup นั้น — แต่พวกเขาจะไม่สืบทอด role ของ parent group โดยอัตโนมัติ เว้นแต่พวกเขาจะเป็นสมาชิกโดยตรงของ parent ด้วย

วิธีสร้าง subgroup:

  1. เปิด parent group จากรายการ Groups
  2. คลิกแท็บ Child groups (หรือ Sub groups ขึ้นอยู่กับเวอร์ชัน Keycloak ของคุณ)
  3. คลิก Create group
  4. ใส่ Name สำหรับ child group แล้วคลิก Save

จากนั้นคุณสามารถเพิ่มสมาชิกและ map role ให้กับ subgroup ได้อย่างอิสระจาก parent ทำให้ง่ายต่อการจำลองลำดับชั้นขององค์กร (เช่น engineeringbackend, frontend)

default group คือ group ที่ user ใหม่ทุกคนจะถูกเพิ่มเข้าโดยอัตโนมัติเมื่อสมัครสมาชิกด้วยตนเอง (self-registration) สิ่งนี้มีประโยชน์เมื่อคุณต้องการให้ user ที่ลงทะเบียนใหม่ทั้งหมดเริ่มต้นด้วยชุด role พื้นฐานโดยไม่ต้องให้ผู้ดูแลระบบดำเนินการใด ๆ

วิธีตั้งค่า default group:

  1. คลิก Realm settings ในแถบด้านซ้าย
  2. คลิกแท็บ User registration
  3. ภายใต้ Default groups คลิก Add groups
  4. เลือก group หนึ่งรายการหรือมากกว่าจากรายการแล้วคลิก Add

user คนใดก็ตามที่ลงทะเบียนผ่าน Keycloak Account Console หรือ self-registration flow จะถูกจัดวางใน default group ทั้งหมดโดยอัตโนมัติ — และจะสืบทอด role ที่ map ไว้กับ group เหล่านั้นด้วย

curl -s -H "Authorization: Bearer ${TOKEN}" http://localhost:8080/admin/realms/my-app/groups/${GROUP_ID}/members | jq .

แทนที่ TOKEN ด้วย admin access token ที่ถูกต้อง และ GROUP_ID ด้วย UUID ของ group (มองเห็นได้ใน URL เมื่อคุณเปิด group ใน admin console)

ตัวเลือกBenefitCost
กำหนด permission ผ่าน group (map role ให้ group แล้วเพิ่ม user เข้า)อัปเดต role mapping ครั้งเดียวก็มีผลกับสมาชิกทุกคน ย้าย user ระหว่างทีมแค่ย้าย groupต้องออกแบบโครงสร้าง group ให้ดีตั้งแต่แรก ถ้าวางผิดจะต้อง refactor ทีหลัง
กำหนด role แบบ role-by-role ให้ user แต่ละคนโดยตรงเหมาะกับ exception เฉพาะบุคคลที่ไม่ต้องการให้กระทบคนอื่นใน groupไม่ scale — เมื่อ permission ของทีมเปลี่ยน ต้องไล่แก้ทุกบัญชีทีละคน เสี่ยงตกหล่น
ใช้ default group ให้ user ใหม่เข้าโดยอัตโนมัติonboarding ไม่ต้องมีขั้นตอน manual, user ใหม่ได้ role พื้นฐานทันทีถ้ากำหนด default group ผิดหรือกว้างเกินไป user ใหม่อาจได้ permission เกินความจำเป็น
  • กำหนด role ให้ user ทีละคนแทนที่จะผ่าน group — เมื่อทีมโตขึ้นจะจัดการไม่ไหว ควร map role เข้า group แล้วให้ user สืบทอดผ่านการเป็นสมาชิก
  • ลืมว่า subgroup ไม่สืบทอด role ของ parent group โดยอัตโนมัติ — ถ้าคาดหวังให้สมาชิก subgroup ได้ permission ของ parent ด้วย ต้อง map role ซ้ำหรือเพิ่ม user เป็นสมาชิกของ parent ตรง ๆ
  • ไม่ตรวจสอบ default groups ก่อนเปิด self-registration — ถ้าลืมตั้งหรือกำหนดกว้างเกินไป user ที่สมัครเองจะได้ role ที่ไม่ควรได้ หรือไม่มี role พื้นฐานเลย

💡 ตัวอย่างจากของจริง

บริษัท enterprise onboarding พนักงานใหม่ — ตั้ง default group เป็น all-employees ให้ user ทุกคนที่สมัครผ่าน self-registration ภายในโดเมนบริษัทถูกจัดเข้า group นี้อัตโนมัติ พร้อม role พื้นฐานอย่าง view-directory โดยไม่ต้องให้ HR หรือ IT กดมือทีละคน

ทีม engineering ที่แบ่งเป็น subgroup — ใช้โครงสร้าง engineeringbackend, frontend เพื่อ map role เฉพาะทาง (เช่น deploy-backend) ให้เฉพาะ subgroup ที่เกี่ยวข้อง เวลามีคนย้ายทีมก็แค่ย้าย membership ระหว่าง subgroup ไม่ต้องแก้ role assignment ใหม่ทั้งหมด

ความแตกต่างที่สำคัญระหว่าง group กับ role ใน Keycloak คืออะไร?
คุณใช้แท็บใดเพื่อเพิ่ม user ที่มีอยู่แล้วเข้า group?
หากคุณ map role "editor" ให้กับ group เกิดอะไรขึ้นกับ user ที่เข้าร่วม group นั้น?
คุณตั้งค่าว่า user ที่สมัครด้วยตนเองใหม่จะถูกเพิ่มเข้า group ใดโดยอัตโนมัติได้ที่ไหน?