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 | หน้าที่ |
|---|---|
Effect | Allow หรือ Deny |
Action | API action เช่น s3:GetObject |
Resource | ARN ของ 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
- อ่าน JSON policy แล้วระบุ Effect, Action, Resource และ Condition ได้
- อธิบาย implicit deny, explicit allow และ explicit deny ได้
- รู้ว่า permissions boundary ไม่ grant permission ด้วยตัวเอง
- ทำไม Explicit Deny สำคัญในการออกแบบ guardrail?
- Identity-based Policy ต่างจาก Resource-based Policy อย่างไร?
- Permissions Boundary grant Permission เองหรือไม่?