ยืนยันตัวตนบน SonarQube ด้วย OpenID Connect บน AWS Cognito

Nont Banditwong
2 min readSep 14, 2024

--

SonarQube รองรับการยืนยันตัวตนผ่าน OpenID Connect

SonarQube รองรับการยืนยันตัวตนของผู้ใช้งานได้หลายวิธี หนึ่งในวิธีที่ได้รับความนิยมในปัจจุบันได้แก่ OpenID Connect เนื่องจากเป็นมาตรฐานที่ใช้กันอย่างแพร่หลายและมีความปลอดภัยมากกว่าวิธีการยืนยันตัวตนแบบอื่นโดยผู้ใช้งานไม่จำเป็นต้องใส่รหัสผ่านในแอปพลิเคชันซึ่งอาจเสี่ยงต่อการที่รหัสผ่านรั่วไหล

AWS Cognito เป็นบริการของ AWS สำหรับการจัดการ User Identity การยืนยันตัวตน (Authentication) และการตรวจสอบสิทธิ์ (Authorization) บน AWS Cloud

AWS Cognito user pool

ผู้ใช้งานสามารถลงชื่อเข้าใช้ SonarQube ได้โดยตรงผ่านกลุ่มผู้ใช้ (user pool) หรือสามารถทำ federation ไปที่ Identity Provider อื่น (IdP) ที่รองรับมาตรฐาน OAuth OpenID Connect (OIDC) หรือ SAML ได้ เช่นสามารถทำ federation ไปที่ Microsoft Active Directory

สำหรับ SonarQube รองรับ OpenID Connect ผ่าน Plugin sonar-auth-oidc ซึ่งสามารถติดตั้งผ่าน SonarQube เองโดย sign in ด้วยสิทธิ์ Administrator แล้วเข้าไปที่เมนู Administration / Marketplace

ติดตั้ง Plugins ใน SonarQube

ค้นหา OpenID Connect plugin โดยใส่คำว่า openid จากนั้นกด Install

OpenID Connect plugin

หลังจากกด Install แล้ว SonarQube จะให้กด Restart Server เพื่อทำการติดตั้ง Plugin ให้กด Restart Server

Restart SonaqQube server หลังจาก install plugin

เมื่อ SonarQube restart เสร็จแล้ว ให้กลับเข้ามาที่เมนู Administration / Configuration / Security และ Enable OpenID Connect

จากนั้นนำค่าที่ได้จาก AWS Cognito ได้แต่ Issuer URL Client ID Client secret และ Scope

ในส่วนของ Issuer URL ให้ใช้ format ดังนี้

https://cognito-idp.{region}.amazonaws.com/{userpoolid}

เลือก Allow users to sign-up เพื่อ register ผู้ใช้ที่ยืนยันตัวตนสำเร็จเข้าสู่ระบบ สำหรับ option นี้ขึ้นอยู่กับว่าเราจะ synchronize user หรือ สร้างรายชื่อผู้ใช้ไว้ใน SonarQube ก่อนหรือไม่ ถ้ารายชื่อผู้ใช้มีจำนวนไม่มากแนะนำให้ปิด option นี้แล้ว register รายชื่อผู้ใช้ไว้ในระบบก่อน

Default group ของ SonarQube คือ sonar-users ซึ่ง user ที่ผ่านการยืนยันตัวตนและถูก sign-up โดยอัตโนมัติ จะถูกกำหนดให้อยู่ใน group sonar-users ซึ่งถ้ามีหลายทีมและไม่ต้องการให้เห็น project ของต่างทีมได้เราต้องมากำหนดสิทธิ์ในส่วนนี้ด้วย

ในบาง Identity Provider เช่นใน Keycloak สามารถ synchronize group ของ user ได้ ทำให้สะดวกในบาง use case ซึ่งทำให้ไม่ต้องมาจัดการ map user เข้าไปใน group เอง

--

--

Nont Banditwong

Cloud Engineering Specialist, Software Developer, System Engineer, Photographer and Learner