Lab 2: IAM Baseline and Policy Simulator
Lab นี้ฝึกสร้าง IAM Group และ Policy แบบจำกัดสิทธิ์, สร้าง IAM Role สำหรับ EC2 อ่าน S3, ทดลอง Explicit Deny และใช้ Policy Simulator ตรวจ Permission ก่อนใช้จริง
Goal
สร้าง permission แบบตรวจสอบได้
เริ่มจาก S3 read-only scope แล้วใช้ simulator ยืนยัน allow/deny ก่อนใช้งานจริง
Safety
ทำใน sandbox เท่านั้น
Lab นี้แตะ IAM โดยตรง จึงควรตรวจ caller identity และ account ก่อนทุกครั้ง
Output
Policy, Group, Role, validation result
สุดท้ายต้องรู้ว่าอะไร allowed, อะไร denied และเพราะ policy ใด
Run order
- Verify identity ว่าอยู่ใน sandbox/learning account
- Draft least-privilege S3 read policy
- Create group และ attach policy สำหรับ human test user
- Create EC2 role พร้อม trust policy สำหรับ
ec2.amazonaws.com - Simulate allow/deny แล้วค่อย cleanup สิ่งที่ไม่ใช้ต่อ
Learning objectives
- สร้าง customer managed policy สำหรับ read-only S3 bucket scope
- สร้าง IAM Group และ attach policy
- สร้าง IAM Role สำหรับ EC2 ที่อ่าน S3 ได้ผ่าน Instance Profile
- ทดลอง Allow และ Explicit Deny ด้วย Policy Simulator
- ใช้ IAM Access Analyzer หรือ policy validation ตรวจ policy
Prerequisites
- ผ่าน Phase 1 และมี AWS CLI profile ที่ตรวจด้วย
aws sts get-caller-identityแล้ว - มีสิทธิ์ IAM สำหรับสร้าง Policy, Group และ Role ใน Account สำหรับเรียน
- มี S3 Bucket สำหรับทดลอง หรือจะใช้ placeholder ARN แล้วตรวจด้วย simulator ก่อนสร้าง Resource จริง
- ตั้ง AWS Budget แล้ว
Safety: อย่าใช้ Lab นี้ใน production account ถ้าไม่แน่ใจ Permission ใช้ Account สำหรับเรียนหรือ sandbox เท่านั้น
Step 1: Verify identity
aws sts get-caller-identity --profile learning
Expected result: Account ID และ Arn ตรงกับ sandbox/learning account
Step 2: Draft least-privilege S3 read policy
แทนที่ example-project-bucket ด้วย Bucket สำหรับ Lab ของคุณ
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListOnlySpecificBucket",
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": "arn:aws:s3:::example-project-bucket"
},
{
"Sid": "ReadObjectsOnly",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::example-project-bucket/*"
}
]
}
Step 3: Create IAM Group and attach policy
- ไปที่ IAM Console
- สร้าง customer managed policy จาก JSON ด้านบน
- ตั้งชื่อเช่น
LearningS3ReadOnlyPolicy - สร้าง IAM Group ชื่อ
LearningS3Readers - Attach policy ให้ Group
- เพิ่ม IAM User สำหรับ Lab เข้า Group ถ้ามี user สำหรับทดสอบ
Step 4: Create EC2 role for S3 read
- ไปที่ IAM > Roles > Create role
- เลือก trusted entity เป็น AWS service และ use case เป็น EC2
- Attach
LearningS3ReadOnlyPolicy - ตั้งชื่อ Role เช่น
LearningEc2S3ReadRole - ตรวจ Trust Policy ว่า Principal เป็น
ec2.amazonaws.com
Step 5: Simulate Allow and Deny
- เปิด IAM Policy Simulator
- เลือก User หรือ Role ที่ต้องการทดสอบ
- ทดสอบ
s3:GetObjectกับ object ARN ที่ตรง policy - ทดสอบ
s3:DeleteObjectกับ bucket เดียวกัน ควรถูก Deny - เพิ่ม statement แบบ Explicit Deny สำหรับ
s3:DeleteObjectแล้วดูว่า Deny ชนะ Allow อย่างไร
Verification steps
Definition of done
- Policy JSON ผ่าน validation ไม่มี syntax error
- Group มี policy ที่ถูกต้อง attached
- Role มี Trust Policy สำหรับ EC2 และ Permission Policy ที่จำกัดเฉพาะ S3 read
- Policy Simulator แสดง Allow สำหรับ
s3:GetObjectและ Deny สำหรับs3:DeleteObject - Access Analyzer ไม่มี finding ที่คุณไม่ตั้งใจ เช่น public หรือ broad cross-account access
Troubleshooting
| อาการ | แนวทางแก้ |
|---|---|
| Policy validation error | ตรวจ comma, bracket, quote และ policy element เช่น Action, Resource |
| Simulator แสดง Deny ทั้งที่คาดว่า Allow | ตรวจ Resource ARN ว่าตรง bucket/object หรือไม่ และมี explicit deny จาก policy อื่นหรือ SCP หรือไม่ |
| Role assume ไม่ได้ | ตรวจ Trust Policy ว่า Principal และ sts:AssumeRole ถูกต้อง |
| Console เห็น Billing/Account ไม่ครบ | อาจขาด permission ของ account/billing ไม่เกี่ยวกับ S3 policy โดยตรง |
Cleanup procedures
- Detach policy จาก Group และ Role ที่ไม่ใช้แล้ว
- ลบ IAM Group
LearningS3Readersถ้าไม่ใช้ต่อ - ลบ IAM Role
LearningEc2S3ReadRoleถ้าไม่มี EC2 ใช้งาน - ลบ customer managed policy
LearningS3ReadOnlyPolicyถ้าไม่ใช้ต่อ - ตรวจว่าไม่มี Access Key ใหม่ที่สร้างโดยไม่จำเป็น
Mini quiz
- ทำไม
s3:ListBucketใช้ bucket ARN แต่s3:GetObjectใช้ object ARN? - Trust Policy ของ EC2 Role ต้องอนุญาต Principal ใด?
- ถ้า Simulator แสดง Deny ทั้งที่มี Allow ควรตรวจอะไรเป็นอันดับแรก?