AWS Learning
Security

AWS IAM Management - Tổng Quan & Best Practices

Tổng quan Account, Users, Groups, Roles, Policies, Best Practices (Diagram)

📋 Mục lục


Overview Diagram

Toàn cảnh hệ thống IAM trong AWS


Mối quan hệ giữa các thành phần

┌──────────────────────────────────────────────────────────────────────────────────────┐
│                           AWS ACCOUNT                                                │
│                                                                                      │
│   ┌──────────┐                                                                       │
│   │Root User │──── ⚠️ Toàn quyền, chỉ dùng khi thật sự cần thiết                     │
│   └──────────┘                                                                       │
│          │                                                                           │
│         │ tạo & quản lý                                                              │
│         ▼                                                                            │
│   ┌─────────────────────────────────────────────────────────────────────────────┐    │
│   │                        IAM SERVICE (Global)                                 │    │
│   │                                                                             │    │
│   │   ┌─────────────────────────────────────────────────────────────────────┐    │   │
│   │   │                    IDENTITIES (Ai?)                                 │    │   │
│   │   │                                                                     │    │   │
│   │   │   ┌──────────┐    ┌──────────────┐    ┌──────────────┐              │    │   │
│   │   │   │  Users   │───▶│    Groups    │    │    Roles     │              │    │   │
│   │   │   │          │    │              │    │              │              │    │   │
│   │   │   │ • John   │    │ • Developers │    │ • EC2-S3Role │              │    │   │
│   │   │   │ • Jane   │    │ • Admins     │    │ • Lambda-Role│              │    │   │
│   │   │   │ • Bob    │    │ • DevOps     │    │ • CrossAcct  │              │    │   │
│   │   │   └──────────┘    └──────────────┘    └──────────────┘              │    │   │
│   │   └─────────────────────────────────────────────────────────────────────┘    │   │
│   │                              │                                               │   │
│   │                    gắn policies vào                                         │    │
│   │                              │                                               │   │
│   │   ┌─────────────────────────────────────────────────────────────────────┐    │   │
│   │   │                    POLICIES (Được phép làm gì?)                     │    │   │
│   │   │                                                                     │    │   │
│   │   │   JSON Document:                                                    │    │   │
│   │   │   {                                                                 │    │   │
│   │   │     "Effect": "Allow" | "Deny",                                     │    │   │
│   │   │     "Action": "s3:GetObject",        ← Hành động gì?                │    │   │
│   │   │     "Resource": "arn:aws:s3:::*",    ← Trên resource nào?           │    │   │
│   │   │     "Condition": { ... }             ← Với điều kiện gì?            │    │   │
│   │   │   }                                                                 │    │   │
│   │   └─────────────────────────────────────────────────────────────────────┘    │   │
│   │                              │                                               │   │
│   │                    cho phép/từ chối                                         │    │
│   │                              ▼                                              │    │
│   │   ┌─────────────────────────────────────────────────────────────────────┐    │   │
│   │   │                    AWS RESOURCES                                    │    │   │
│   │   │                                                                     │    │   │
│   │   │    EC2    S3    RDS    Lambda    DynamoDB    SQS    SNS   ...       │    │   │
│   │   └─────────────────────────────────────────────────────────────────────┘    │   │
│   └─────────────────────────────────────────────────────────────────────────────┘    │
└──────────────────────────────────────────────────────────────────────────────────────┘

Các thành phần chính

1. 🔑 Root User

Đặc điểmMô tả
CredentialsEmail + Password đăng ký AWS account
QuyềnTOÀN QUYỀN - không thể bị giới hạn bởi bất kỳ policy nào
Dùng khi nàoChỉ khi bắt buộc: đóng account, thay đổi support plan, restore IAM permissions

2. 👤 IAM Users

IAM User = "1 người hoặc 1 ứng dụng" cần truy cập AWS

Xác thực bằng:
├── Console Access: Username + Password + MFA (optional)
└── Programmatic Access: Access Key ID + Secret Access Key
Đặc điểmGiá trị
Tối đa users/account5,000
Groups/userTối đa 10
Policies/userTối đa 10 managed policies

3. 👥 IAM Groups

Group = "Nhóm users có cùng quyền"

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Developers    │    │     Admins      │    │    Auditors     │
│                 │    │                 │    │                 │
│ • John          │    │ • Alice         │    │ • Charlie       │
│ • Jane          │    │ • Bob           │    │ • Diana         │
│                 │    │                 │    │                 │
│ Policy:         │    │ Policy:         │    │ Policy:         │
│ EC2, S3, Lambda │    │ AdminAccess     │    │ ReadOnlyAccess  │
└─────────────────┘    └─────────────────┘    └─────────────────┘

[!IMPORTANT]

  • Groups KHÔNG phải identity → không thể dùng trong Resource-based Policy
  • Groups KHÔNG thể nested (group trong group)
  • User KHÔNG bắt buộc thuộc group nào
  • User có thể thuộc NHIỀU groups cùng lúc

4. 🎭 IAM Roles

Khi nào dùng Role?

Tình huốngVí dụ
AWS Service cần quyềnEC2 đọc S3, Lambda ghi DynamoDB
Cross-account accessAccount A truy cập resource ở Account B
Federated usersLogin bằng Google/Facebook/SAML
Temporary accessContractor cần quyền tạm thời

5. 📜 IAM Policies

Cấu trúc của 1 Policy (JSON)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3Read",
      "Effect": "Allow",
      "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"
        }
      }
    }
  ]
}
TrườngÝ nghĩaBắt buộc?
EffectAllow hoặc Deny
ActionHành động gì? (s3:GetObject, ec2:*)
ResourceTrên resource nào? (ARN)✅ (Identity-based)
PrincipalAi?✅ (Resource-based)
ConditionĐiều kiện gì? (IP, MFA, time...)

Luồng xác thực & phân quyền

Authentication (Xác thực - "Bạn là ai?")

Authorization (Phân quyền - "Bạn được phép làm gì?")

Quy tắc vàng

1. Mặc định: TẤT CẢ đều bị DENY (Default Deny)
2. Explicit Allow ghi đè Default Deny
3. Explicit Deny LUÔN THẮNG Allow (Deny wins)
4. SCP/Permissions Boundary = "trần" (ceiling)
   → Chỉ GIỚI HẠN, KHÔNG CẤP quyền

Multi-Account Architecture

Với AWS Organizations + SCPs

SCP vs IAM Policy - Sự khác biệt

┌──────────────────────────────────────────────────────────────────┐
│                                                                  │
│   SCP (Organizations)          IAM Policy (Account)              │
│   ═══════════════════          ═════════════════════             │
│                                                                  │
│   • Áp dụng cho TOÀN account   • Áp dụng cho user/group/role     │
│   • Chỉ GIỚI HẠN (ceiling)     • CẤP QUYỀN (Allow/Deny)          │
│   • Không áp dụng cho          • Áp dụng cho mọi identity        │
│     Management Account           trong account                   │
│   • Kế thừa từ OU cha          • Không kế thừa                   │
│                                                                  │
│   Effective Permissions = SCP ∩ IAM Policy                       │
│   (Giao của 2 tập hợp)                                           │
│                                                                  │
│   ┌─────────────────────────────┐                                │
│   │        SCP Allow            │                                │
│   │    ┌──────────────┐         │                                │
│   │    │ ████████████ │←── Effective Permissions                 │
│   │    │ ████████████ │    (chỉ phần GIAO)                       │
│   │    └──────────────┘         │                                │
│   │         IAM Allow ──────────┤                                │
│   └─────────────────────────────┘                                │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

Tóm tắt: Ai / Cái gì / Bằng cách nào?


Best Practices

🔐 Security Best Practices

┌─────────────────────────────────────────────────────────────────────────┐
│                    AWS IAM BEST PRACTICES                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  1️⃣  ROOT USER                                                          │
│  ├── ✅ Enable MFA (dùng hardware key nếu được)                         │
│  ├── ✅ Xóa root access keys                                            │
│  ├── ❌ KHÔNG dùng root cho daily tasks                                 │
│  └── ❌ KHÔNG share root credentials                                    │
│                                                                         │
│  2️⃣  USERS & GROUPS                                                     │
│  ├── ✅ 1 user = 1 người thật (KHÔNG share accounts)                    │
│  ├── ✅ Dùng Groups để gán permissions (không gán trực tiếp cho user)   │
│  ├── ✅ Enable MFA cho tất cả users                                     │
│  └── ✅ Tạo strong password policy                                      │
│                                                                         │
│  3️⃣  PERMISSIONS                                                        │
│  ├── ✅ Least Privilege: chỉ cấp quyền TỐI THIỂU cần thiết              │
│  ├── ✅ Dùng AWS Managed Policies khi có thể                            │
│  ├── ✅ Review permissions định kỳ (IAM Access Analyzer)                │
│  ├── ✅ Dùng Conditions trong policies (IP, MFA, time...)               │
│  └── ❌ KHÔNG dùng wildcard (*) cho Actions và Resources                │
│                                                                         │
│  4️⃣  ROLES                                                              │
│  ├── ✅ Dùng Roles cho AWS services (EC2, Lambda...) thay vì Access Keys│
│  ├── ✅ Dùng Roles cho cross-account access                             │
│  ├── ✅ Dùng Roles cho federated users (SSO)                            │
│  └── ✅ Dùng External ID để chống Confused Deputy                       │
│                                                                         │
│  5️⃣  ACCESS KEYS                                                        │
│  ├── ✅ Rotate định kỳ (90 ngày)                                        │
│  ├── ✅ Remove unused keys                                              │
│  ├── ❌ KHÔNG commit vào source code                                    │
│  └── ❌ KHÔNG embed trong AMI/container                                 │
│                                                                         │
│  6️⃣  MONITORING & AUDITING                                              │
│  ├── ✅ Enable CloudTrail (log tất cả API calls)                        │
│  ├── ✅ Dùng IAM Access Analyzer (phát hiện unintended access)          │
│  ├── ✅ Review IAM Credential Report định kỳ                            │
│  └── ✅ Set up CloudWatch Alarms cho suspicious activities              │
│                                                                         │
│  7️⃣  ORGANIZATIONS (Multi-Account)                                      │
│  ├── ✅ Tách accounts theo môi trường (Dev/Staging/Prod)                │
│  ├── ✅ Dùng SCPs để enforce security guardrails                        │
│  ├── ✅ Centralized logging account                                     │
│  └── ✅ Dùng IAM Identity Center cho SSO                                │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

Least Privilege Workflow


Công cụ hỗ trợ quản lý IAM

Công cụMục đíchTần suất
IAM Credential ReportLiệt kê tất cả users + trạng thái credentialsĐịnh kỳ (monthly)
IAM Access AdvisorXem services nào user đã/chưa accessKhi review permissions
IAM Access AnalyzerPhát hiện resources bị chia sẻ ra ngoàiLiên tục (automated)
IAM Policy SimulatorTest policies trước khi applyKhi tạo/sửa policies
CloudTrailLog tất cả API calls (ai, làm gì, khi nào)Luôn bật
AWS ConfigTrack thay đổi cấu hình IAMLuôn bật

Exam Tips (Cloud Practitioner / SAA)

[!TIP] Ghi nhớ nhanh:

  • Users = người/app cụ thể, long-term credentials
  • Groups = nhóm users, KHÔNG nested, KHÔNG phải identity
  • Roles = temporary credentials, cho services/cross-account/federation
  • Policies = JSON documents, Allow/Deny, Deny luôn thắng
  • SCP = ceiling cho account, KHÔNG cấp quyền, KHÔNG áp dụng Management Account
  • Root = toàn quyền, KHÔNG dùng hàng ngày, MFA bắt buộc
  • Least Privilege = câu trả lời "an toàn" nhất trong mọi tình huống

[!CAUTION] Câu hỏi hay gặp lẫn:

  • "Làm sao để EC2 truy cập S3?" → IAM Role (KHÔNG PHẢI Access Keys trên EC2)
  • "Làm sao để giới hạn toàn bộ account?" → SCP (cần Organizations)
  • "Group có phải identity không?" → KHÔNG (không dùng được trong Resource-based Policy)
  • "SCP có cấp quyền không?" → KHÔNG (chỉ giới hạn)
  • "Permissions Boundary cấp quyền?" → KHÔNG (chỉ giới hạn MAX)

Liên kết tài liệu