Lesson 2Policy

IAM Policies

IAM Policy คือ JSON document ที่บอกว่า Action ใด Allow หรือ Deny บน Resource ใด ภายใต้ Condition ใด การอ่าน Policy ได้คือทักษะหลักของ AWS Security และ Infrastructure operation

Policy question Effect + Action + Resource + Condition อ่าน policy โดยถามว่า allow/deny อะไร กับ resource ไหน ภายใต้เงื่อนไขใด
Evaluation rule Explicit Deny ชนะเสมอ ถ้าไม่มี allow จะเป็น implicit deny, แต่ explicit deny override allow ทุกครั้ง
Boundary บาง policy เป็นเพดาน ไม่ใช่ grant Permissions Boundary, SCP และ Session Policy จำกัดสิทธิ์สูงสุด แต่ไม่ได้ให้สิทธิ์เอง

โครงสร้าง JSON Policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadProjectBucket",
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": "arn:aws:s3:::example-project-bucket/*",
      "Condition": {
        "Bool": { "aws:SecureTransport": "true" }
      }
    }
  ]
}
Elementหน้าที่
EffectAllow หรือ Deny
ActionAPI action เช่น s3:GetObject
ResourceARN ของ Resource เป้าหมาย
Conditionเงื่อนไข เช่น ต้องใช้ TLS หรือมาจาก Region ที่กำหนด
Principalใช้ใน Resource-based Policy หรือ Trust Policy เพื่อระบุว่าใครได้รับสิทธิ์

Policy types ที่ควรรู้

  • Identity-based Policy: attach กับ IAM User, Group หรือ Role เพื่อให้ Permission กับ Identity
  • Resource-based Policy: attach กับ Resource เช่น S3 Bucket Policy หรือ Role Trust Policy
  • Permissions Boundary: กำหนดเพดานสูงสุดของ Permission แต่ไม่ได้ grant Permission เอง
  • SCP: guardrail จาก AWS Organizations ที่จำกัด Permission สูงสุดของ Account
  • Session Policy: จำกัด Permission ของ session ที่ได้จาก AssumeRole หรือ federation

Policy evaluation logic

โดยทั่วไป AWS เริ่มจาก implicit deny หากไม่มี Policy ใด Allow ก็จะถูกปฏิเสธ เมื่อมี Allow จาก policy ที่เกี่ยวข้อง Request จึงผ่านได้ แต่ Explicit Deny ชนะ Allow เสมอ

RequestPrincipal + Action + Resource
ContextRegion, MFA, IP, tags
PoliciesIdentity, Resource, Boundary, SCP
DecisionAllow unless explicit Deny wins

Common mistakes

  • ใช้ Action: "*" และ Resource: "*" เพราะแก้ปัญหาเร็ว แต่เสี่ยงมาก
  • ลืมว่า Resource-based Policy อาจ grant access แม้ identity policy ไม่ได้ grant ในบาง same-account scenario
  • เข้าใจผิดว่า Permissions Boundary grant Permission ได้ ทั้งที่เป็นแค่เพดาน
  • ไม่ใช้ Condition เพื่อบังคับ MFA, TLS หรือ tag-based control ในจุดที่ควรใช้

Review questions

Before next lesson
  1. อ่าน JSON policy แล้วระบุ Effect, Action, Resource และ Condition ได้
  2. อธิบาย implicit deny, explicit allow และ explicit deny ได้
  3. รู้ว่า permissions boundary ไม่ grant permission ด้วยตัวเอง
  1. ทำไม Explicit Deny สำคัญในการออกแบบ guardrail?
  2. Identity-based Policy ต่างจาก Resource-based Policy อย่างไร?
  3. Permissions Boundary grant Permission เองหรือไม่?