</>Học Dev
Bài học

Ngày 3: IAM Nâng Cao

Tuần 1 – Ngày 3

Ngày 3: IAM Nâng Cao

Mục tiêu học tập

  • Hiểu sâu về IAM Policies và cách evaluate
  • Nắm vững IAM Roles và cross-account access
  • Hiểu Permission Boundaries và SCPs

1. IAM Policy Evaluation Logic

Thứ tự đánh giá

1. Explicit DENY  →  Nếu có → DENY (dừng lại)
          ↓
2. SCPs (Org)     →  Nếu không Allow → DENY
          ↓
3. Resource Policy →  Nếu Allow → ALLOW (cho cross-account)
          ↓
4. Permission Boundary →  Nếu không Allow → DENY
          ↓
5. Session Policy  →  Nếu không Allow → DENY
          ↓
6. Identity Policy →  Nếu Allow → ALLOW
          ↓
7. Implicit DENY   →  Mặc định DENY

Nguyên tắc quan trọng

  • Explicit Deny luôn thắng
  • Deny by default - không có Allow = Deny
  • Cross-account: Cần Allow từ CẢ HAI phía

2. Các loại IAM Policies

Identity-based Policies

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Resource-based Policies

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

So sánh

LoạiAttached toPrincipal field
Identity-basedUser, Group, RoleKhông có
Resource-basedResource (S3, SQS, etc.)Bắt buộc

3. IAM Roles

Cấu trúc Role

IAMRoleTrustPolicy(Aiđưcassumerolenày?)Principal:Account,Service,FederatedUserPermissionPolicy(Rolenàyđưclàmgì?)ActionsvàResourcesPermissionBoundary(Optional)Giihntiđacapermissions

Trust Policy Example

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Các loại Roles phổ biến

LoạiPrincipalUse case
Service RoleAWS ServiceEC2 instance profile
Cross-account RoleAWS AccountAccess từ account khác
Identity Provider RoleFederatedSSO, SAML, OIDC

4. Cross-Account Access

Cách 1: Resource-based Policy

AccountA(ResourceOwner)AccountB(Requester)S3BucketIAMUserBucketPolicyUserPolicyAllowAccountBAllowS3access

Cách 2: IAM Role (Khuyến nghị)

AccountA(Trusting)AccountB(Trusted)IAMRoleIAMUserTrustPolicy:Permission:AllowAccountBAssumests:AssumeRoleRolePermissions:S3access

So sánh 2 cách

AspectResource PolicyIAM Role
AuditKhó hơnDễ hơn (CloudTrail)
FlexibilityChỉ 1 resourceNhiều resources
Best PracticeOne-off accessRegular access

5. Permission Boundaries

Định nghĩa

  • Giới hạn maximum permissions mà identity-based policy có thể cấp
  • Không cấp permissions, chỉ giới hạn

Ví dụ

PermissionBoundary:IdentityPolicy:Allow:EC2,S3,RDSAllow:EC2,S3,LambdaEffectivePermissions:EC2,S3(intersection)

Use case

  • Cho phép developers tự tạo roles nhưng giới hạn permissions
  • Delegated administration

6. Service Control Policies (SCPs)

Đặc điểm

  • Áp dụng ở AWS Organizations level
  • Ảnh hưởng tất cả principals trong account
  • KHÔNG ảnh hưởng management account

SCP Strategies

Strategy 1: Deny List (Khuyến nghị)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "organizations:LeaveOrganization"
      ],
      "Resource": "*"
    }
  ]
}

Strategy 2: Allow List

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:*",
        "s3:*"
      ],
      "Resource": "*"
    }
  ]
}

7. IAM Best Practices cho Professional level

  1. Least Privilege: Cấp quyền tối thiểu cần thiết
  2. Use Roles: Không dùng long-term credentials
  3. Enable MFA: Đặc biệt cho privileged actions
  4. Rotate Credentials: Định kỳ rotate access keys
  5. Use Conditions: Giới hạn theo IP, MFA, thời gian
  6. Audit Regularly: Dùng IAM Access Analyzer

8. Câu hỏi ôn tập

  1. Khi có Explicit Deny và Explicit Allow, kết quả là gì?

    Xem đáp án

    Explicit Deny luôn thắng — kết quả là DENY bất kể có bao nhiêu Allow statements. Đây là nguyên tắc cốt lõi của IAM policy evaluation: Explicit Deny > Explicit Allow > Implicit Deny (default). Áp dụng khi đánh giá tất cả policies: identity-based, resource-based, SCP, Permission Boundary, session policies.

  2. Cross-account access bằng Role khác Resource Policy như thế nào?

    Xem đáp án

    Role: principal B assume role trong account A → nhận temporary credentials → dùng credentials để access resources trong A. Cần trust policy (who can assume) + permission policy (what can do). Resource Policy (ví dụ S3 bucket policy): grant principal từ account B access trực tiếp, không cần assume role. Resource policy đơn giản hơn cho specific resources; Role dùng khi cần access nhiều resources hoặc cần assume identity khác.

  3. Permission Boundary có thể cấp thêm quyền không?

    Xem đáp án

    Không — Permission Boundary chỉ giới hạn permissions tối đa (ceiling), không grant permissions. Effective permissions = intersection của Identity-based policy AND Permission Boundary. Ví dụ: Boundary cho phép S3+EC2, Identity policy cho phép S3+DynamoDB → effective chỉ là S3. Dùng Boundary để cho phép admins tạo roles/users nhưng không vượt quá scope đã định — delegate IAM safely.

  4. SCP có ảnh hưởng đến management account không?

    Xem đáp án

    Không — Management account (root account của AWS Organization) không bị SCP apply, kể cả SCP attach vào root OU. SCPs chỉ affect member accounts. Best practice: không deploy workloads trong management account và dùng dedicated member accounts cho workloads. Management account chỉ dùng cho billing, organization management, Control Tower setup.

9. Bài tập thực hành

  • Tạo IAM Role cho EC2 instance với quyền đọc S3
  • Thử cross-account access (nếu có 2 accounts)
  • Tạo policy với conditions (IP restriction)

Tài liệu tham khảo chính thức


Ngày tiếp theo: VPC Fundamentals Review