AWS IAM — 101
โลกของ AWS นั้นกว้างใหญ่และมี resources มากมายที่รอเราเข้าไปใช้งานเต็มไปหมด เลยนั่งคิดอยู่ซักพักเหมือนกันว่าจะเริ่มจากส่วนไหนก่อนดี สุดท้ายเลยคิดว่าถ้าจะเข้าใจ AWS จริงๆควรปูพื้นฐานที่ดีตั้งแต่เรื่องการจัดการสิทธิ์ของ AWS ให้เป็นเพื่อความปลอดภัย และ ใช้งานในทุกๆ services ที่เหลือนั้นเอง :)
AWS IAM หรือ Identity Access Management มีหน้าที่ในการจัดการบริหารสิทธิ์ไม่ว่าจะเป็น Users, Groups หรือ Roles โดยใช้ Policies ที่ระบุสิทธิ์ว่าสามารถเข้าถึง resources ส่วนไหนได้บ้างในรูปแบบของ JSON file
Concept หลักของ IAM มีอยู่ 4 อย่าง ด้วยกันคือ

- Users
จะตรงตัวคือ เป็น User ของผู้ใช้ตรงๆเลย ซึ่งเราสามารถนํา Policies ต่างๆมาผูกเข้ากับ User นั้น
- Groups
ในกรณีที่เรามี User จํานวนมาก การที่เราจะเอา Policies ไปแปะ Userทีละคนมันค่อนข้างที่จะจัดการลําบากเวลามีการเปลี่ยนแปลง AWS เลยสร้างสิ่งที่เรียกว่า Groups ขึ้นมาที่สามารถรวม User หลายๆคนที่ต้องได้รับสิทธิ์เดียวกัน มารวมใน Group นั้นๆ เช่น Group ของ User Admin ที่จัดการ Kubernetes ก็ไม่สมควรที่จะมีสิทธิ์ของจัดการ S3 นั้นเอง
- Roles
แต่ในหลายๆกรณีที่เราสร้างระบบขึ้นมาบน AWS คนที่ทําการขอสิทธิ์ไม่ใช่ User หรือ Group แต่เป็น AWS Resources ที่ส่ง service requests ต่างๆ เช่น สมุมติว่าเรามี Web Application บน EC2 และ ต้องการเข้าถึงข้อมูลบน S3 ทีนี้เวลาส่ง request ไปเราไม่ได้ใช้ access keys ของ user นั้นๆเพื่อการเข้าถึง S3
สิ่งที่เราต้องทํา คือการสร้าง Role ที่มีสิทธิ์ในการเข้าถึง S3 ขึ้นมาและนํา Role นั้นไปผูกเข้ากับ EC2 นั่นเอง
ข้อดี คือ ไม่มี long time credentials ที่ต้องไปผูกกับ user ใด user นึง เช่น access keys โดยที่เวลาเราใช้ role มันจะสร้าง temporary security credential ให้เราเองจนกว่าจะหมด session นั้นๆไป
- Policies
policies เป็นรายละเอียดของสิทธิ์ว่า User, Group และ Role สามารถเข้าถึงอะไรได้บ้าง โดย policy จะอยู่ในรูปแบบของ JSON โดยจะมีหน้าตาแบบตัวอย่างล่างข้างล่างนี้

โดยจะเห็นได้ว่าโครงสร้างของ Policy จะแบ่งเป็นหลักๆคือ statement ที่เราใส่ไว้
- Action
ระบุว่า Resources (API action) ที่จะให้สิทธิ์ว่าจะเข้าถึงได้หรือไม่ได้
- Effect
ระบุว่าจะให้สิทธิ์อะไรเช่น Allow หรือ Deny โดย default จะเป็น denied ไว้ก่อนเพื่อความปลอดภัยนั้นเอง
- Resource
ระบุ resource ที่จะมีผลกับ policy นี้โดยให้ระบุ Amazon Resource Name (ARN) เช่น Refer resourceไปที่ Amazon SQS queue
arn:aws:sqs:us-east-2
หรือจะใช้ wildcard (*) ซึ่งหมายถึง resource ทั้งหมดแบบตัวอย่างดังรูปข้างบน
IAM policy structure ทั้งหมดดูได้ที่นี้ https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#policy-syntax
Policy Simulator
เมื่อเราใช้งาน AWS ไปซักระยะนึง หรือว่ามี Users, Groups, Roles ที่มากจนอยากที่จะตรวจสอบหมดมันจะยุ่งยากมากเมื่อต้องจัดการกับ Policy ต่างๆ ดังนั้น AWS จึงได้เตรียม Policy Simulator (https://policysim.aws.amazon.com/home/index.jsp) ที่ใช้ทดสอบ Policy ของ Users, Groups และ Roles ว่ามีสิทธิ์เข้าถึงทุก Resources ที่เราต้องการหรือไม่

ตัวอย่างข้างบนเป็นการทดสอบ user นึงที่สร้างขึ้นมาและได้รับสิทธิ์ EC2 และ APIGateway แต่ไม่ได้มีสิทธิ์ Amplify เวลาเราเลือกสิทธิ์ที่ต้องการทดสอบทั้งหมดเสร็จแล้วและกดทดสอบ จะเห็นว่ามีบางสิทธิ์ที่เรายังเข้าถึงไม่ได้
ด้วยวิธีนี้เราจะสามารถจัดการสิทธิ์ได้อย่างถูกต้องก่อนที่จะไปใช้งานจริงนั้นเอง