IAM & AWS CLI
Identity & Access Management
01ภาพรวม IAM — Global Service
IAM (Identity and Access Management) เป็นบริการสำหรับจัดการ ผู้ใช้ (identity) และ สิทธิ์ (permissions) ในบัญชี AWS ของเรา จุดสำคัญที่ออกสอบ: IAM เป็น global service ไม่ผูกกับ region ใด region หนึ่ง — Users, Groups, Roles, Policies ที่สร้างจะมองเห็นได้ทุก region
ตอนสร้างบัญชี AWS ครั้งแรกจะได้ root account ซึ่งมีสิทธิ์เต็ม (full access) แต่ AWS แนะนำว่าไม่ควรใช้ root ในงานประจำวัน และไม่ควรแชร์ออกไป ควรสร้าง IAM User สำหรับใช้งานจริงแทน
องค์ประกอบหลักของ IAM
- Users — บุคคลหนึ่งคนต่อหนึ่ง user (เช่น พนักงาน) สามารถมี credentials ของตัวเอง
- Groups — กลุ่มของ users เท่านั้น (ห้ามมี group ซ้อนใน group และ group ไม่สามารถบรรจุ group อื่นได้)
- Policies — เอกสาร JSON กำหนดสิทธิ์ ผูกกับ user / group / role
- Roles — identity ที่ให้ AWS services หรือ users สวมบทบาทเพื่อรับสิทธิ์ชั่วคราว
02โครงสร้าง IAM Policy (JSON)
Policy คือเอกสาร JSON ที่กำหนดว่าใครทำอะไรกับ resource ไหนได้ ต้องจำโครงสร้างให้ขึ้นใจเพราะออกสอบเป็น JSON บ่อยมาก
- Version — เวอร์ชันภาษานโยบาย ปัจจุบันใช้ "2012-10-17" เสมอ (ค่าทางการล่าสุด)
- Id — (optional) ตัวระบุ policy
- Statement — (required) ประกอบด้วยหนึ่งหรือหลาย statement
- Sid — (optional) statement id
- Effect — Allow หรือ Deny
- Principal — ใคร (account/user/role) ที่ statement นี้มีผล (ใช้ใน resource-based policy)
- Action — รายการ API actions ที่ allow/deny เช่น s3:GetObject
- Resource — รายการ ARN ที่ action มีผล
- Condition — (optional) เงื่อนไขที่ทำให้ statement มีผล
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowReadSpecificBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"IpAddress": { "aws:SourceIp": "203.0.113.0/24" }
}
}
]
}Version คือ 2012-10-17 (ไม่ใช่วันที่ปัจจุบัน) และ Effect/Action/Resource เป็นองค์ประกอบที่ต้องมี ใน statement ของ identity-based policy ส่วน Principal มีเฉพาะใน resource-based policy (เช่น S3 bucket policy) ไม่มีใน identity-based policyResource ต้องระบุ ARN ให้ถูกระดับ — สำหรับ S3 การ list bucket ใช้ ARN ของ bucket (arn:aws:s3:::my-bucket) แต่การอ่าน object ต้องใช้ ARN แบบมี /* (arn:aws:s3:::my-bucket/*) ข้อสอบชอบให้แยกความต่างนี้03ประเภทของ Policy: Managed vs Inline vs Customer-managed
Policy แบ่งตามวิธีบริหารจัดการได้ 3 แบบหลัก ออกสอบเรื่องความแตกต่างและ use case ของแต่ละแบบ
| คุณสมบัติ | AWS Managed | Customer Managed | Inline |
|---|---|---|---|
| ใครดูแล | AWS | เรา | เรา |
| นำมาใช้ซ้ำหลาย identity | ได้ | ได้ | ไม่ได้ (1:1) |
| แก้ไขเนื้อหา | ไม่ได้ | ได้ | ได้ |
| Versioning / rollback | AWS จัดการ | ได้ (สูงสุด 5 versions) | ไม่มี |
| AWS อัปเดตอัตโนมัติ | ใช่ | ไม่ | ไม่ |
04IAM Roles สำหรับ Services (EC2 & AWS Services)
IAM Role คือ identity ที่ไม่มี credentials ถาวร แต่ให้ entity (เช่น EC2 instance, Lambda, ECS task หรือ user) สวมบทบาท (assume) เพื่อรับ credentials ชั่วคราว (temporary credentials) ผ่าน AWS STS (Security Token Service)
หลักการสำคัญ: เมื่อต้องการให้ AWS service (เช่น EC2) เรียก AWS API อื่น ห้ามฝัง access key ลงใน instance เด็ดขาด ให้ผูก IAM Role กับ instance แทน ระบบจะหมุน credentials ให้อัตโนมัติและปลอดภัยกว่า
องค์ประกอบของ Role
- Trust policy (assume role policy) — กำหนดว่าใคร (principal) สวมบท role นี้ได้ เช่น ec2.amazonaws.com
- Permissions policy — กำหนดว่า role นี้ทำอะไรได้บ้างหลังถูกสวมบท
- การ assume ทำผ่าน sts:AssumeRole ได้ credentials ชั่วคราวมีอายุจำกัด
// Trust policy: อนุญาตให้ EC2 service สวมบท role นี้
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}05Identity-based vs Resource-based Policies
Policy มีสองมุมมองหลักที่ต้องแยกให้ออก: identity-based ผูกกับ identity (user/group/role) และ resource-based ผูกกับ resource (เช่น S3 bucket policy, SQS queue policy, Lambda resource policy)
| ประเด็น | Identity-based Policy | Resource-based Policy |
|---|---|---|
| ผูกกับ | User / Group / Role | Resource (S3 bucket, SQS, SNS, Lambda) |
| ระบุ Principal | ไม่ระบุ (principal คือ identity ที่ผูก) | ระบุ Principal ว่าใครเข้าถึงได้ |
| ตัวอย่าง | Customer managed policy ผูกกับ user | S3 bucket policy, KMS key policy |
| ใช้ข้าม account | ผ่านการ assume role | อนุญาต principal จาก account อื่นโดยตรงได้ |
กรณีข้าม account (cross-account): เมื่อ principal ถูกสวมบท role (assume role) จะ ไม่นำ identity-based policy เดิมของตัวเองติดไปด้วย (ยกเว้น session policy) — ใช้สิทธิ์ของ role ที่ assume แทน แต่ถ้าใช้ resource-based policy ให้สิทธิ์ข้าม account โดยตรง principal จะใช้สิทธิ์ทั้งของ resource-based policy และ identity-based policy ของตัวเองพร้อมกัน
06Policy Evaluation Logic & Explicit Deny
นี่คือหัวข้อที่ออกสอบบ่อยและสำคัญที่สุดข้อหนึ่ง ต้องเข้าใจลำดับการตัดสินว่าคำขอจะถูก allow หรือ deny
หลักการตัดสิน (เรียงลำดับ)
- Default คือ implicit deny — ทุกอย่างถูกปฏิเสธโดยปริยายถ้าไม่มีอะไร allow
- ถ้ามี explicit Allow ที่ตรงกับคำขอ → allow (เว้นแต่มี explicit deny)
- Explicit Deny ชนะทุกอย่างเสมอ — ถ้ามี Deny ที่ตรงคำขอ ไม่ว่าจะมี Allow กี่อันก็ถูกปฏิเสธ
- ลำดับจำง่าย: Explicit Deny > Explicit Allow > Implicit Deny (default)
// แม้จะมี Allow s3:* อยู่ที่อื่น statement Deny นี้ก็ชนะเสมอ
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyDeleteEvenIfAllowedElsewhere",
"Effect": "Deny",
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::critical-bucket/*"
}
]
}เมื่อมีหลายชั้นนโยบาย (SCP จาก Organizations, permission boundary, identity-based, resource-based, session policy) การจะ allow ได้ต้อง ผ่านทุกชั้นที่เกี่ยวข้อง และ ไม่มี explicit deny ในชั้นใดเลย
07Permission Boundaries
Permission Boundary คือ managed policy ที่ใช้เป็น ขอบเขตสูงสุด (maximum permissions) ที่ identity-based policy สามารถให้ได้กับ IAM user หรือ IAM role (ใช้ได้กับ user/role เท่านั้น ไม่ใช้กับ group)
หลักสำคัญ: permission boundary ไม่ได้ให้สิทธิ์ด้วยตัวเอง แต่เป็นตัวจำกัด สิทธิ์ที่ใช้ได้จริง = intersection (ส่วนที่ทับซ้อนกัน) ระหว่าง identity-based policy กับ permission boundary
- ใช้จำกัดสิทธิ์ของ user/role ไม่ให้เกิน boundary แม้ identity policy จะ allow มากกว่า
- use case: ให้ developer สร้าง user/role ได้เอง แต่จำกัดไม่ให้ escalate สิทธิ์เกินขอบเขต (delegation)
- ทำงานร่วมกับ AWS Organizations SCP ได้ — สิทธิ์จริงต้องผ่านทั้ง SCP, boundary, และ identity policy
08MFA & Access Keys
MFA (Multi-Factor Authentication) เพิ่มชั้นความปลอดภัยโดยต้องใช้รหัสจากอุปกรณ์ MFA ร่วมกับรหัสผ่าน AWS แนะนำให้เปิด MFA ทั้ง root account และ IAM users ที่มีสิทธิ์สูง
ประเภทอุปกรณ์ MFA
- Virtual MFA device — แอป เช่น Google Authenticator, Authy (รองรับหลายบัญชีในเครื่องเดียว)
- Universal 2nd Factor (U2F) Security Key — เช่น YubiKey (รองรับหลาย root/IAM users ในกุญแจเดียว)
- Hardware Key Fob MFA Device — จาก third party
- Hardware Key Fob MFA Device for AWS GovCloud (US)
Access Keys & วิธีเข้าถึง AWS
- AWS Management Console — ป้องกันด้วย password + MFA
- CLI / SDK — ใช้ Access Keys (Access Key ID + Secret Access Key)
- Access Keys เป็นความลับ ห้ามแชร์ ผู้ใช้สร้าง/จัดการของตัวเอง
- Access Key ID เปรียบเหมือน username, Secret Access Key เปรียบเหมือน password
09IAM Best Practices & Least Privilege
- อย่าใช้ root account ยกเว้นตอน setup บัญชีครั้งแรก
- หนึ่งคน = หนึ่ง IAM user ห้ามแชร์ user ร่วมกัน
- จัด permission ผ่าน Groups เพื่อบริหารง่าย
- ใช้ strong password policy และเปิด MFA
- ใช้ IAM Roles สำหรับ AWS services (EC2/Lambda) แทน access key
- ใช้ access keys เฉพาะกับ programmatic access ที่จำเป็น และ หมุนเวียน (rotate) เป็นระยะ
- หลัก least privilege (สิทธิ์น้อยที่สุดเท่าที่จำเป็น) — ให้เฉพาะสิทธิ์ที่ต้องใช้จริง
- ตรวจสอบสิทธิ์ด้วย Credentials Report และ Access Advisor สม่ำเสมอ
- อย่าแชร์ IAM users/access keys
"Action": "*" หรือ AdministratorAccess10IAM Credentials Report & Access Advisor
AWS มีเครื่องมือสองตัวสำหรับ audit สิทธิ์ ออกสอบเรื่อง 'ใช้ตัวไหนเพื่อทำอะไร' บ่อยมาก ต้องแยกให้ชัด
| เครื่องมือ | ระดับ | ใช้ทำอะไร |
|---|---|---|
| Credentials Report | ทั้ง account | ดูสถานะ credentials ของ users ทั้งหมด (MFA, password, key rotation) เป็น CSV |
| Access Advisor | ราย user/role | ดู service ที่มอบสิทธิ์และเวลาใช้ล่าสุด เพื่อลดสิทธิ์ที่ไม่ใช้ |
คำถามทบทวน
ทดสอบความเข้าใจหัวข้อ IAM & AWS CLI
23 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย
1.ในโครงสร้าง IAM policy JSON ค่าของ field "Version" ที่ถูกต้องและใช้กันในปัจจุบันคืออะไร?
2.EC2 instance ต้องเรียก AWS API ของ S3 วิธีที่ปลอดภัยและ AWS แนะนำที่สุดในการให้สิทธิ์คืออะไร?
3.Policy ของ user มี statement Allow s3:* บน bucket หนึ่ง และอีก statement Deny s3:DeleteObject บน bucket เดียวกัน ผลลัพธ์คือ?
4.ข้อใดอธิบาย Permission Boundary ได้ถูกต้อง?
5.ต้องการลดสิทธิ์ที่ user คนหนึ่งไม่ได้ใช้งานออก เพื่อทำ least privilege ควรใช้เครื่องมือใด?
6.ข้อใดเกี่ยวกับ IAM Groups ถูกต้อง?
7.เปลี่ยน permission policy ของ IAM Role ที่ผูกอยู่กับ EC2 instance ที่กำลังรัน ผลกระทบเป็นอย่างไร?
8.field ใดใน policy JSON ที่ปรากฏใน resource-based policy แต่ปกติไม่มีใน identity-based policy?
9.การ assume role ข้าม account เพื่อรับ temporary credentials ใช้ service และ action ใด?
10.ถ้าไม่มี statement ใดใน policy ที่ allow action ที่ร้องขอ และไม่มี explicit deny ผลลัพธ์เริ่มต้นคือ?
11.ต้องการ custom policy ที่นำกลับมาใช้ซ้ำกับหลาย user/role และควบคุม version เองได้ ควรใช้ policy ประเภทใด?
12.อุปกรณ์ MFA ประเภทใดที่เป็น physical security key เช่น YubiKey และรองรับหลาย user ในกุญแจเดียว?
13.ใน Shared Responsibility Model สำหรับ IAM ข้อใดเป็นความรับผิดชอบของลูกค้า (customer)?
14.ต้องการ audit ทั้งบัญชีว่า user แต่ละคนเปิด MFA หรือยัง และ access key ถูกหมุนครั้งล่าสุดเมื่อไหร่ ควรใช้อะไร?
15.Policy มี "Resource": "arn:aws:s3:::my-bucket" และ Action "s3:GetObject" แต่เข้าถึง object ไม่ได้ สาเหตุที่เป็นไปได้มากที่สุดคือ?
16.หลักการให้สิทธิ์แบบใดที่ AWS แนะนำว่าปลอดภัยที่สุดและมักเป็นคำตอบในข้อสอบเรื่องการออกแบบ permission?
17.ในการสวมบท role ข้าม account (cross-account assume role) สิ่งใดเกิดขึ้นกับ identity-based policy เดิมของผู้ใช้?
18.Trust policy ของ IAM Role ทำหน้าที่อะไร?
19.คำสั่ง AWS CLI ใดใช้ตรวจสอบว่า request ปัจจุบันกำลังใช้ identity ใด (debug ว่า EC2 ใช้ role ถูกหรือไม่)?
20.S3 bucket ในบัญชีเดียวกับ user — user มี identity-based policy ไม่ได้ allow s3:GetObject แต่ bucket policy (resource-based) allow s3:GetObject ให้ user นั้น ผลลัพธ์คือ (ไม่มี explicit deny ที่ใด)?
21.ข้อใดถูกต้องเกี่ยวกับ AWS Managed Policy?
22.องค์กรต้องการให้ developer สร้าง IAM role ได้เอง แต่ไม่ให้สร้าง role ที่มีสิทธิ์เกินขอบเขตที่กำหนด (ป้องกัน privilege escalation) ควรใช้อะไร?
23.Inline Policy แตกต่างจาก Managed Policy อย่างไรที่สำคัญที่สุด?