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 PolicyGắn trực tiếp vào 1 user/group/role duy nhất, không tái sử dụng được
AWS Managed PolicyAWS tạo sẵn, cập nhật tự động, dùng cho các use case phổ biến
Customer Managed PolicyBạ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 ).

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ạiVí dụ
Virtual MFAGoogle Authenticator, Authy (dùng TOTP trên điện thoại)
Hardware MFAToken vật lý (Gemalto)
U2F Security KeyUSB 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ứcDùng khi nào
Management ConsoleThao tác thủ công qua giao diện web
AWS CLITự động hóa, scripting, truy cập trực tiếp public API
AWS SDKTích hợp AWS vào ứng dụng bằng code (Python boto3, JS aws-sdk…)

CLISDK đề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ệmBạn chịu trách nhiệm
Hạ tầng vật lý, tính sẵn sàng của IAM serviceQuản lý users, groups, roles, policies
Cung cấp AWS Managed PoliciesBậ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