IAM – Identity and Access Management
IAM là gì?
IAM là dịch vụ web của AWS dùng để kiểm soát quyền truy cập vào các tài nguyên AWS một cách bảo mật. Đây là dịch vụ global (không giới hạn theo region) và miễn phí.
IAM quản lý 3 thứ chính: Users, Groups, và Roles.
Users & Groups
Users đại diện cho một người thực tế, có credentials riêng (username/password, access key). Mặc định khi tạo user mới, user không có quyền gì cả.
Groups là tập hợp các users để gán quyền chung. Một vài điểm cần nhớ:
- User không bắt buộc phải thuộc group nào
- User có thể thuộc nhiều group cùng lúc
- Group không thể chứa group khác (chỉ chứa users)
Ví dụ thực tế: Alice vừa là developer vừa là QA → Alice thuộc cả 2 group “Developers” và “QAs”, tự động thừa hưởng quyền từ cả hai.
Permissions & Policies
Quyền được định nghĩa qua Policies – các file JSON mô tả hành động nào được phép hoặc bị từ chối trên tài nguyên nào.
Cấu trúc một Policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow", // Allow hoặc Deny
"Action": "s3:ListBucket", // Hành động trên service
"Resource": "arn:aws:s3:::example-bucket" // Tài nguyên cụ thể
}
]
}3 loại Policy:
| Loại | Đặc điểm |
|---|---|
| Inline Policy | Gắn trực tiếp vào 1 user/group/role duy nhất, không tái sử dụng được |
| AWS Managed Policy | AWS tạo sẵn, cập nhật tự động, dùng cho các use case phổ biến |
| Customer Managed Policy | Bạn tự tạo, linh hoạt, tái sử dụng được nhiều nơi |
Policy Inheritance: Khi user thuộc nhiều group, AWS gộp tất cả policies lại để tính quyền cuối cùng. Nguyên tắc: Deny luôn thắng Allow.
IAM Roles
Roles không gán cho người dùng mà gán cho AWS services hoặc ứng dụng để chúng có thể hành động thay mặt bạn – không cần lưu credentials trong code.
Use case phổ biến:
- EC2 instance cần đọc S3 → gán Role cho EC2 thay vì nhúng access key vào code
- Lambda function cần ghi vào DynamoDB → gán Role cho Lambda
Tại sao quan trọng? Nếu nhúng access key vào code, lỡ push lên GitHub là lộ ngay. Role giải quyết vấn đề này hoàn toàn.
MFA – Multi-Factor Authentication
MFA yêu cầu 2 yếu tố để đăng nhập: mật khẩu (thứ bạn biết) + mã từ thiết bị (thứ bạn có).
Lợi ích cốt lõi: Dù mật khẩu bị lộ, tài khoản vẫn an toàn vì kẻ tấn công không có thiết bị MFA.
Các loại MFA device:
| Loại | Ví dụ |
|---|---|
| Virtual MFA | Google Authenticator, Authy (dùng TOTP trên điện thoại) |
| Hardware MFA | Token vật lý (Gemalto) |
| U2F Security Key | USB vật lý (YubiKey) dùng cho browser |
Password Policy
AWS cho phép thiết lập chính sách mật khẩu gồm: độ dài tối thiểu, yêu cầu ký tự đặc biệt/hoa/thường/số, không dùng lại mật khẩu cũ, và thời hạn hết hạn.
Cách truy cập AWS
| Phương thức | Dùng khi nào |
|---|---|
| Management Console | Thao tác thủ công qua giao diện web |
| AWS CLI | Tự động hóa, scripting, truy cập trực tiếp public API |
| AWS SDK | Tích hợp AWS vào ứng dụng bằng code (Python boto3, JS aws-sdk…) |
CLI và SDK đều dùng Access Keys (Access Key ID + Secret Access Key) để xác thực – không phải username/password.
Security Tools (Công cụ kiểm tra bảo mật)
IAM Credential Report: Báo cáo toàn bộ users trong account – trạng thái password, access key, MFA. Dùng để audit định kỳ.
IAM Access Advisor: Cho thấy permissions nào đã được cấp và lần cuối được dùng là khi nào → xác định quyền thừa để thu hồi.
IAM Policy Simulator: Test policy trước khi áp dụng thật → tránh cấp nhầm hoặc chặn nhầm quyền.
Shared Responsibility Model
| AWS chịu trách nhiệm | Bạn chịu trách nhiệm |
|---|---|
| Hạ tầng vật lý, tính sẵn sàng của IAM service | Quản lý users, groups, roles, policies |
| Cung cấp AWS Managed Policies | Bật MFA, xoay vòng credentials, audit định kỳ |
Best Practices – Cần nhớ cho exam
- Root account: Chỉ dùng để tạo lần đầu, sau đó không dùng nữa, bật MFA ngay
- Principle of Least Privilege: Chỉ cấp đúng quyền cần thiết, không hơn
- Dùng Roles thay vì Users cho applications và AWS services
- Xoay vòng Access Keys định kỳ, xóa key không dùng
- Không share credentials giữa nhiều người – mỗi người một user riêng
- Dùng Access Advisor + Credential Report để audit thường xuyên