ปรับ Config map ของ EKS เพื่อให้เเสดงรายการ Node + Workload ได้เมื่อ Login AWS Management Console ด้วย SSO

Pao Payungsak Klinchampa
PAOCLOUD CO., LTD.
Published in
3 min readFeb 7, 2021

--

EKS Workload

สำหรับ AWS EKS นั้น มีหลักการง่ายๆที่ผมใช้ในการอธิบายข้อนึงเกี่ยวกับเรื่องของ Permission ว่า “ใครสร้าง คนนั้นใช้ได้” ซึ่งก็แปลตรงตัวครับ และใครไม่ได้สร้าง คนนั้นก็เข้าถึงไม่ได้

เข้าเรื่องกันดีกว่า

สำหรับ Organization ที่มีระบบบริหารจัดการ AWS Account อย่างเป็นระบบ โดยการจับ AWS Account หลายๆ Account มา Join Organization ซึ่งจะพบกับความสะดวกสบายหลายๆอย่าง เช่น คิดตังค์ที่ Account เดียว ใน Invoice ก็เเยกชัดเจนว่า Account ไหน ผลาญตังค์ไปกี่บาท 555+ หรือยังสามารถ Share Resource ต่างๆถึงกันได้ เช่นการ Share VPC เป็นต้น แถมถ้าใช้กับ AWS SSO ด้วยอีก จะสะดวกสบายมากๆในการ Login เข้าหน้า AWS Management Console เพราะ Login ครั้งเดียวไปได้ทุก Account ที่เข้าถึง ประมาณนี้ครับ

อย่างที่บริษัทผม ก็ใช้ Google Workspace ทำ IdP โดยเวลาจะ Login เข้า AWS ก็ต้อง Login ผ่าน Google Workspace ซะก่อน ซึ่งมันก็สะดวกจริงๆครับ แถมยังเข้า AWS Account ลูกค้าได้อีก เเค่ไปสร้าง Role ไว้ใน Account ลูกค้า 5555+

แต่ปัญหามันอยู่ที่ว่า เวลาผมสร้าง EKS Cluster ผมจะสร้างผ่านทาง Terraform ซึ่งผมก็จะ Add user ใน IAM เเล้วกดสร้าง Access Key เอามาแปะใน Code แล้วสั่ง Deploy ครับ

กลับมาที่ผมพูดตั้งเเต่ตอนต้น ใครสร้าง คนนั้นใช้ ในที่นี้ผมสร้าง ก็จะมีเเค่ผมที่ Access EKS ได้ครับ รวมไปถึงการ Access k8s api ต่างๆด้วย ตัวอย่างก็การใช้ kubectl ครับ

ซึ่งถ้าผมอยากจะเปิดให้ EKS Cluster ที่ผมสร้าง ให้คนอื่นใช้ด้วย ผมก็เเค่ Add User เข้าไปใน Config Map ของ EKS ครับ

โดยใช้คำสั่งนี้

kubectl edit -n kube-system configmaps aws-auth

ซึ่งก็จัดการ Add user เข้าไป เอาค่า ARN และ Username ของ User นั้นๆมาใส่ให้เรียบร้อย จัดการ Save แล้วบอกให้ User คนนั้นใช้คำสั่งเพื่อสร้าง kubeconfig ได้เลยครับ เค้าก็จะสามารถเรียกใช้ kubectl ได้เเล้ว

ลืมไป User นั้นๆต้อง Add ใน IAM ก่อนนะครับ ไม่งั้นจะเอา ARN มาได้ไง 555+

แต่ว่าปัญหามันอยู่ที่

เมื่อผม Login เข้า AWS Management Console โดยใช้ SSO นี่ซิ ผมกลับมองไม่เห็น Workload ที่มันเเสดงในหน้า Dashboard ของ EKS

แน่นอนว่า ผมเข้าใจดี ว่าการ Login ผ่าน SSO มันใช้ Role ครับ ผมก็เข้าไปจัดการ Check Role ว่ามันชื่ออะไร มีค่า ARN เป็นอะไร โดยเข้าไปเช็คจาก IAM แล้วลองเอามาใส่ใน Config map ของ EKS

ผมลองใส่ไปหลายรอบ ก็ยังไม่ได้ผลครับ เลยลอง Search ใน Google ดู ก็พบกับลิ๊งนี้

ในนี้เค้าใช้ AD เป็น IdP นะครับ ซึ่งมันยังต่างกับ Environment ของผม

แต่ด้วยการใช้ Engineer Sense (อีกแล้วเหรอ 5555+) ผมก็พบว่า ค่า ARN มันเป็น Format เดียวกันนี่หว่า ก็จัดการลอกเลียนแบบนิดหน่อย จนเป็นแบบนี้ครับ

config map — aws-auth

Role ตัวเเรกในภาพคือ Role ที่สร้างขึ้นมาเองของมัน ส่วน Role ที่สอง คือที่ผม Add เข้าไปครับ

ที่ Role ARN ให้ไปดูจาก IAM เลยครับ เเต่ต้องปรัเเต่งมันนิดนึง

อย่างของผมเป็นแบบนี้

arn:aws:iam::25974505xxx:role/aws-reserved/sso.amazonaws.com/ap-southeast-1/AWSReservedSSO_AdministratorAccess_2c909c1c031xxxx

ก็ให้เอาพวก sso.amazonaws.con/ap-southeast-1 อะไรพวกนี้ออกด้วยครับ ให้เหลือเเค่แบบภาพด้านบน

ในส่วนของ Username ก็ใส่ตามภาพเลยครับเป็น {{SessionName}}

แค่นี้เราก็สามารถดูหน้า EKS Dashboard ได้เเล้วครับ

Node list

อย่างอันนี้หน้า Overview จะเเสดงรายการ Node ครับ ซึ่งถ้าไม่ได้ Add role ใน config map ตามที่ผมบอก มันก็จะไม่เเสดงผล

และก็หน้า Workload ก็จะเเสดงผลเเล้วครับ

EKS Workload

ผิดพลาดยังไง หรือมีอะไรต้องแก้ แจ้งผมได้นะครับ หรือมีใครลองทำตามเเล้วพัง หรือยังใช้ไม่ได้ ก็ Inbox เข้ามาที่ผมได้เลยครับ

วันนี้ไม่ขอโฆษณา ไม่ได้เขียน Blog share knowledge นานเกิน รู้สึกผิดกับสังคมเบาๆ 5555555 แล้วเจอกันใหม่ใน Blog ต่อไป ขอบคุณเเละสวัสดีครับ

--

--