AWS Documentation · Tiếng Việt

AWS IAM

Identity and Access Management — Quản lý danh tính và quyền truy cập trung tâm của AWS, kiểm soát ai được làm gì trên tài nguyên nào

Cập nhật 04/2026
Security · Identity
Global Service · Miễn phí
01 · Tổng quan

IAM là gì?

AWS Identity and Access Management (IAM) là dịch vụ quản lý danh tính và quyền truy cập của AWS. IAM cho phép bạn kiểm soát ai (authentication) được phép làm gì (authorization) trên tài nguyên nào trong tài khoản AWS của bạn. Đây là dịch vụ Global — không thuộc bất kỳ Region nào và hoàn toàn miễn phí.

🌍
Global Service
IAM không thuộc Region cụ thể. Users, Groups, Roles, Policies áp dụng toàn cầu trên mọi Region.
💰
Miễn phí 100%
Không tính phí cho IAM users, groups, roles, policies. Bạn chỉ trả tiền cho tài nguyên mà IAM entity sử dụng.
🔑
Authentication
Xác thực danh tính qua username/password (Console) hoặc Access Key (CLI/SDK/API).
🛡️
Authorization
Phân quyền chi tiết bằng JSON policies — cho phép hoặc từ chối hành động trên tài nguyên cụ thể.
👤
Root Account
Tài khoản gốc có toàn quyền. Chỉ dùng để setup ban đầu, sau đó khóa lại và dùng IAM users.
🔗
Tích hợp sâu
Mọi dịch vụ AWS đều sử dụng IAM để kiểm soát quyền truy cập — EC2, S3, Lambda, RDS, v.v.

Root Account vs IAM User

Khi tạo tài khoản AWS, bạn có một root account với email và password. Root account có quyền tuyệt đối — không bị giới hạn bởi bất kỳ policy nào. Đây là lý do bạn không bao giờ nên dùng root account cho công việc hàng ngày.

Tiêu chíRoot AccountIAM User
Quyền hạnToàn quyền, không thể bị giới hạnChỉ có quyền được gán qua policies
Đăng nhậpEmail + PasswordAccount ID + Username + Password
MFABắt buộc nên bậtNên bật cho tất cả users
Access KeysKhông nên tạoTạo cho programmatic access
BillingMặc định có quyền xem billingCần bật IAM access to billing
Khi nào dùngThay đổi account settings, đóng account, restore permissionsMọi công việc hàng ngày
🚨 Cảnh báo quan trọng
Không bao giờ chia sẻ root account credentials. Hãy tạo IAM user riêng cho từng người, bật MFA cho root account, và khóa access keys của root. Đây là bước bảo mật đầu tiên và quan trọng nhất khi sử dụng AWS.

Các thành phần chính của IAM

Các thành phần chính của AWS IAM AWS ACCOUNT 👤 IAM Users Người dùng thực 👥 IAM Groups Nhóm users 🎭 IAM Roles Vai trò cho services 📜 IAM Policies JSON permissions IAM POLICY (JSON) { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::*" }
💡 Ghi nhớ cho thi chứng chỉ
IAM là Global Service — không chọn Region khi tạo users/roles/policies. Mọi IAM entity đều có hiệu lực trên tất cả Regions. IAM hoàn toàn miễn phí — bạn không trả tiền cho việc tạo users, groups, roles hay policies.
02 · Users & Groups

IAM Users & Groups

IAM User đại diện cho một người hoặc ứng dụng cần tương tác với AWS. Mỗi user có credentials riêng và có thể được gán vào một hoặc nhiều Groups để quản lý quyền dễ dàng hơn.

IAM Users

  • Mỗi user đại diện cho một người hoặc một ứng dụng trong tổ chức
  • Mỗi account tối đa 5,000 IAM users
  • User có thể thuộc tối đa 10 groups
  • Console access: Username + Password (đăng nhập AWS Management Console)
  • Programmatic access: Access Key ID + Secret Access Key (CLI, SDK, API)
  • Mỗi user tối đa 2 access keys (để hỗ trợ key rotation)

Tạo IAM User qua Console

  1. Vào IAM Console → Users → Create user
  2. Nhập username, chọn loại access (Console và/hoặc Programmatic)
  3. Nếu Console access: đặt password hoặc auto-generate, chọn yêu cầu đổi password lần đầu
  4. Gán permissions: thêm vào group, copy từ user khác, hoặc attach policy trực tiếp
  5. Thêm tags (optional) → Review → Create user
Tạo IAM User bằng AWS CLI
# Tạo user mới
aws iam create-user --user-name nguyenvana

# Tạo login profile (Console access)
aws iam create-login-profile \
  --user-name nguyenvana \
  --password "MyStr0ng!Pass" \
  --password-reset-required

# Tạo access key (Programmatic access)
aws iam create-access-key --user-name nguyenvana

# Liệt kê tất cả users
aws iam list-users

# Thêm tags cho user
aws iam tag-user \
  --user-name nguyenvana \
  --tags Key=Department,Value=Engineering Key=Team,Value=Backend

IAM Groups

  • Group là tập hợp các IAM users — không thể chứa group khác (không nested)
  • Mỗi account tối đa 300 groups (có thể request tăng)
  • User không bắt buộc phải thuộc group nào (nhưng nên có)
  • Policies gán cho group sẽ áp dụng cho tất cả members trong group
  • Đây là cách best practice để quản lý permissions — gán policy cho group thay vì từng user
Quản lý Groups bằng AWS CLI
# Tạo group
aws iam create-group --group-name Developers

# Thêm user vào group
aws iam add-user-to-group --user-name nguyenvana --group-name Developers

# Gán policy cho group
aws iam attach-group-policy \
  --group-name Developers \
  --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

# Liệt kê members trong group
aws iam get-group --group-name Developers

# Liệt kê policies của group
aws iam list-attached-group-policies --group-name Developers

Mô hình tổ chức điển hình

Mô hình Users & Groups 👥 Developers 👤 Alice 👤 Bob 👤 Cường 👥 Admins 👤 Dũng 👤 Alice 👥 Auditors 👤 Hà 👤 Bob ⬆ Alice thuộc 2 groups (Developers + Admins) · Bob thuộc 2 groups (Developers + Auditors) 📜 S3 + EC2 Access 📜 AdministratorAccess 📜 ReadOnlyAccess Policies gán cho Group → tất cả members trong group đều được thừa hưởng
✅ Best Practice
Luôn quản lý permissions thông qua Groups thay vì gán trực tiếp cho từng user. Khi nhân viên mới vào, chỉ cần thêm vào group phù hợp. Khi rời đi, xóa khỏi group. Điều này giúp quản lý quyền dễ dàng và nhất quán hơn rất nhiều.
03 · Policies

IAM Policies

IAM Policy là tài liệu JSON định nghĩa permissions — cho phép hoặc từ chối các hành động trên tài nguyên AWS. Policies là trung tâm của hệ thống phân quyền IAM.

Cấu trúc JSON Policy

Mỗi policy gồm một hoặc nhiều Statement, mỗi statement định nghĩa một permission cụ thể:

Cấu trúc IAM Policy hoàn chỉnh
{
  "Version": "2012-10-17",
  "Id": "S3-Account-Permissions",
  "Statement": [
    {
      "Sid": "AllowS3ReadAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/nguyenvana"
      },
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ],
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "203.0.113.0/24"
        }
      }
    }
  ]
}
Thành phầnBắt buộcMô tả
VersionLuôn dùng "2012-10-17" — phiên bản mới nhất hỗ trợ policy variables
IdKhôngĐịnh danh tùy chọn cho policy
StatementMảng các permission statements
SidKhôngStatement ID — định danh cho từng statement
EffectAllow hoặc Deny
PrincipalTùyAi được áp dụng (bắt buộc trong resource-based policy, không dùng trong identity-based)
ActionDanh sách API actions (ví dụ: s3:GetObject, ec2:StartInstances)
ResourceARN của tài nguyên áp dụng (dùng * cho tất cả)
ConditionKhôngĐiều kiện bổ sung (IP, thời gian, MFA, tags, v.v.)

Ba loại IAM Policies

🏛️
AWS Managed Policies
Do AWS tạo và duy trì. Bắt đầu bằng arn:aws:iam::aws:policy/. Ví dụ: AdministratorAccess, AmazonS3ReadOnlyAccess. Tự động cập nhật khi AWS thêm service mới.
🔧
Customer Managed Policies
Do bạn tự tạo và quản lý. Linh hoạt nhất — có thể tùy chỉnh chính xác permissions cần thiết. Hỗ trợ versioning (tối đa 5 versions).
📌
Inline Policies
Gắn trực tiếp vào một user, group, hoặc role cụ thể. Bị xóa khi entity bị xóa. Dùng cho quan hệ 1:1 nghiêm ngặt. Không khuyến nghị cho hầu hết trường hợp.

Ví dụ Policies thực tế

Policy cho phép đọc S3 bucket cụ thể

S3 Read-Only cho bucket cụ thể
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": "arn:aws:s3:::production-data/*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::production-data"
    }
  ]
}

Policy từ chối xóa với điều kiện MFA

Deny Delete nếu không có MFA
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyDeleteWithoutMFA",
      "Effect": "Deny",
      "Action": [
        "s3:DeleteObject",
        "s3:DeleteBucket"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": false
        }
      }
    }
  ]
}

Policy Evaluation Logic (Luồng đánh giá quyền)

AWS đánh giá policies theo thứ tự ưu tiên rõ ràng. Hiểu luồng này là chìa khóa để debug permission issues:

IAM Policy Evaluation Logic 📨 Request đến AWS ❌ Có Explicit Deny không? (SCPs, Permission Boundaries, Policies) 🚫 DENY Không 🏢 SCP cho phép không? (Nếu account thuộc AWS Organizations) 🚫 DENY Không 🚧 Permission Boundary cho phép? (Nếu có đặt boundary) 🚫 DENY Không 📜 Identity/Resource Policy cho phép? (Có Allow statement phù hợp?) 🚫 DENY Không ✅ ALLOW ⚡ Quy tắc vàng: Explicit Deny LUÔN thắng Allow · Mặc định là Deny (implicit deny) · Phải có Allow rõ ràng mới được phép
⚠️ Quy tắc đánh giá quan trọng
  • Mặc định: Implicit Deny — nếu không có Allow nào, request bị từ chối
  • Explicit Deny luôn thắng — dù có bao nhiêu Allow, một Deny sẽ override tất cả
  • Policies được đánh giá đồng thời, không theo thứ tự
  • NotAction + AllowDeny — cẩn thận khi dùng NotAction