IAM JSON Policy Types
Identity-based, Resource-based, Permissions Boundaries, SCPs, ACLs, Session Policies
Tổng quan
AWS IAM sử dụng JSON documents để định nghĩa permissions. Có 6 loại policy khác nhau, mỗi loại phục vụ một mục đích riêng.
Các loại Policy trong IAM
1. Identity-based Policies
Policy gắn vào IAM identities (Users, Groups, Roles). Đây là loại policy phổ biến nhất.
Có 3 sub-types:
| Sub-type | Mô tả | Quản lý bởi |
|---|---|---|
| AWS Managed | AWS tạo sẵn, update tự động | AWS |
| Customer Managed | Bạn tự tạo, tự quản lý | Bạn |
| Inline | Gắn trực tiếp 1-1 vào entity | Bạn |
Ví dụ: AWS Managed Policy
Ví dụ: Customer Managed Policy (chỉ cho phép update DynamoDB)
Ví dụ: Inline Policy
2. Resource-based Policies
Policy gắn trực tiếp vào AWS resources (không gắn vào identity). Có Principal field để chỉ định ai được access.
Services hỗ trợ Resource-based Policies:
| Service | Tên Policy | Ví dụ use case |
|---|---|---|
| S3 | Bucket Policy | Public read, cross-account access |
| SQS | Queue Policy | Cho phép SNS gửi message vào queue |
| SNS | Topic Policy | Cho phép services khác publish |
| Lambda | Function Policy | Cho phép API Gateway invoke |
| KMS | Key Policy | Quản lý ai dùng được encryption key |
| ECR | Repository Policy | Cross-account image pull |
| Secrets Manager | Resource Policy | Cross-account secret access |
Ví dụ: S3 Bucket Policy
Ví dụ: SQS Queue Policy (cho phép SNS gửi message)
[!IMPORTANT] Cross-account access: Resource-based policies cho phép không cần assume role. User Account B có thể truy cập trực tiếp S3 của Account A nếu Bucket Policy cho phép.
3. Permissions Boundaries
Giới hạn maximum permissions mà một IAM User hoặc Role có thể có. Permissions Boundary không cấp quyền, chỉ giới hạn.
Ví dụ: Permissions Boundary
Use case phổ biến: Cho phép developer tự tạo IAM roles nhưng giới hạn quyền tối đa của role đó:
4. Organizations SCPs
Service Control Policies (SCPs) giới hạn quyền cho toàn bộ Account hoặc OU (Organizational Unit).
[!NOTE] SCPs không cấp quyền. SCPs chỉ giới hạn quyền tối đa. IAM policies trong account vẫn cần Allow riêng.
Xem chi tiết tại aws-organizations.md
5. Access Control Lists (ACLs)
ACLs là policy cross-account ở cấp network/resource. Dùng phổ biến nhất với S3 và VPC.
[!WARNING] ACLs là legacy mechanism. AWS khuyến nghị dùng Resource-based Policies (Bucket Policy) thay thế ACLs cho hầu hết use cases.
| Service | ACL Type | Mô tả |
|---|---|---|
| S3 | Bucket ACL / Object ACL | Quản lý read/write ở cấp bucket hoặc object |
| VPC | Network ACL (NACL) | Stateless firewall ở cấp subnet |
S3 ACL (XML-based, không phải JSON)
6. Session Policies
Session Policies giới hạn quyền của một temporary session khi assume role hoặc federated user.
Ví dụ: Assume Role với Session Policy
So sánh các loại Policy
| Loại | Gắn vào | Có Principal? | Cấp quyền? | Giới hạn quyền? |
|---|---|---|---|---|
| Identity-based | User/Group/Role | ❌ | ✅ | ❌ |
| Resource-based | Resource (S3, SQS...) | ✅ | ✅ | ❌ |
| Permissions Boundary | User/Role | ❌ | ❌ | ✅ |
| SCP | Account/OU | ❌ | ❌ | ✅ |
| ACL | Resource | N/A (legacy) | ✅ | ❌ |
| Session Policy | Session | ❌ | ❌ | ✅ |
Policy Evaluation Flow
Ví dụ JSON cho từng loại
Identity-based: Cho phép Developer update EC2 tags
Resource-based: Lambda cho phép API Gateway invoke
Deny Policy: Chặn không cho xóa CloudTrail logs
Condition-based: Chỉ cho phép từ IP cụ thể và yêu cầu MFA
Exam Tips
[!IMPORTANT] Keywords để nhớ IAM Policy Types:
- Identity-based = Gắn vào User/Group/Role, KHÔNG có Principal
- Resource-based = Gắn vào resource, CÓ Principal
- Permissions Boundary = Giới hạn max quyền, dùng cho delegation an toàn
- SCP = Guardrails cho cả Account/OU, KHÔNG cấp quyền
- Explicit Deny LUÔN THẮNG - bất kể policy nào
| Câu hỏi | Trả lời |
|---|---|
| Cross-account access không cần assume role? | Resource-based Policy |
| Giới hạn max quyền cho developer tự tạo roles? | Permissions Boundary |
| Guardrails cho toàn bộ accounts trong Organization? | SCP |
Policy có Principal field? | Resource-based Policy (hoặc Trust Policy) |
| Policy loại nào KHÔNG cấp quyền? | Permissions Boundary, SCP, Session Policy |
| Effective permissions khi có nhiều loại policy? | INTERSECTION (phần giao) của tất cả policies |
Tài liệu tham khảo
Xem thêm: IAM | IAM Roles | AWS Organizations