Hands-on LabSecurity-sensitive

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
  1. Verify identity ว่าอยู่ใน sandbox/learning account
  2. Draft least-privilege S3 read policy
  3. Create group และ attach policy สำหรับ human test user
  4. Create EC2 role พร้อม trust policy สำหรับ ec2.amazonaws.com
  5. 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

  1. ไปที่ IAM Console
  2. สร้าง customer managed policy จาก JSON ด้านบน
  3. ตั้งชื่อเช่น LearningS3ReadOnlyPolicy
  4. สร้าง IAM Group ชื่อ LearningS3Readers
  5. Attach policy ให้ Group
  6. เพิ่ม IAM User สำหรับ Lab เข้า Group ถ้ามี user สำหรับทดสอบ

Step 4: Create EC2 role for S3 read

  1. ไปที่ IAM > Roles > Create role
  2. เลือก trusted entity เป็น AWS service และ use case เป็น EC2
  3. Attach LearningS3ReadOnlyPolicy
  4. ตั้งชื่อ Role เช่น LearningEc2S3ReadRole
  5. ตรวจ Trust Policy ว่า Principal เป็น ec2.amazonaws.com

Step 5: Simulate Allow and Deny

  1. เปิด IAM Policy Simulator
  2. เลือก User หรือ Role ที่ต้องการทดสอบ
  3. ทดสอบ s3:GetObject กับ object ARN ที่ตรง policy
  4. ทดสอบ s3:DeleteObject กับ bucket เดียวกัน ควรถูก Deny
  5. เพิ่ม statement แบบ Explicit Deny สำหรับ s3:DeleteObject แล้วดูว่า Deny ชนะ Allow อย่างไร

Verification steps

Definition of done
  1. Policy JSON ผ่าน validation ไม่มี syntax error
  2. Group มี policy ที่ถูกต้อง attached
  3. Role มี Trust Policy สำหรับ EC2 และ Permission Policy ที่จำกัดเฉพาะ S3 read
  4. Policy Simulator แสดง Allow สำหรับ s3:GetObject และ Deny สำหรับ s3:DeleteObject
  5. 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

  1. Detach policy จาก Group และ Role ที่ไม่ใช้แล้ว
  2. ลบ IAM Group LearningS3Readers ถ้าไม่ใช้ต่อ
  3. ลบ IAM Role LearningEc2S3ReadRole ถ้าไม่มี EC2 ใช้งาน
  4. ลบ customer managed policy LearningS3ReadOnlyPolicy ถ้าไม่ใช้ต่อ
  5. ตรวจว่าไม่มี Access Key ใหม่ที่สร้างโดยไม่จำเป็น

Mini quiz

  1. ทำไม s3:ListBucket ใช้ bucket ARN แต่ s3:GetObject ใช้ object ARN?
  2. Trust Policy ของ EC2 Role ต้องอนุญาต Principal ใด?
  3. ถ้า Simulator แสดง Deny ทั้งที่มี Allow ควรตรวจอะไรเป็นอันดับแรก?