Site logo

AWS Cloud Mastery

Hướng dẫn chi tiết tạo IAM Policy trên AWS: Bảo mật và quản lý quyền truy cập

IAM Policy là gì?

IAM Policy là một document định nghĩa permissions (quyền hạn) trên AWS, xác định chính xác những gì một user, group, role hoặc resource được phép hoặc không được phép làm. IAM Policy được viết dưới dạng JSON và hoạt động theo nguyên tắc "default deny" - tức là mặc định mọi quyền truy cập đều bị từ chối trừ khi được cấp phép rõ ràng.

Ví dụ về một IAM Policy đơn giản:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::example-bucket"
    }
  ]
}

Policy trên cho phép list nội dung của một S3 bucket cụ thể.

Tại sao IAM Policy quan trọng?

IAM Policy đóng vai trò then chốt trong việc bảo mật tài nguyên AWS của bạn:

  1. Principle of Least Privilege: Giúp cấp đúng quyền cần thiết cho từng đối tượng
  2. Quản lý tập trung: Dễ dàng kiểm soát quyền truy cập cho toàn bộ tổ chức
  3. Compliance: Đáp ứng yêu cầu tuân thủ bảo mật và kiểm toán
  4. Linh hoạt: Cung cấp nhiều cách để kiểm soát quyền ở mức chi tiết
  5. Giảm thiểu rủi ro: Hạn chế khả năng xảy ra sự cố bảo mật

Các loại IAM Policy

AWS cung cấp ba loại IAM Policy chính:

  1. AWS Managed Policies: Được tạo và quản lý bởi AWS, được cập nhật tự động khi có dịch vụ mới.
  2. Customer Managed Policies: Do khách hàng tạo và quản lý, linh hoạt hơn khi cần điều chỉnh quyền.
  3. Inline Policies: Được nhúng trực tiếp vào một user, group hoặc role cụ thể.

Bước 1: Đăng nhập vào AWS Management Console

Bước 2: Truy cập vào dịch vụ IAM

  • Tìm kiếm và chọn dịch vụ "IAM" trong thanh tìm kiếm.
  • Hoặc chọn IAM từ danh sách dịch vụ.

aws console iam

Bước 3: Tạo IAM Policy mới

3.1 Truy cập trang Policies

  • Ở thanh điều hướng bên trái, chọn "Policies".
  • Nhấn nút "Create policy" để bắt đầu tạo policy mới.

Create Policy Button

3.2 Chọn phương thức tạo policy

AWS cung cấp nhiều cách để tạo policy:

  1. Visual editor: Công cụ đồ họa giúp xây dựng policy mà không cần viết JSON trực tiếp.
  2. JSON: Viết policy dưới dạng JSON nếu bạn quen thuộc với cú pháp.
  3. Templates: Sử dụng templates có sẵn cho các use case phổ biến.

Chúng ta sẽ tìm hiểu cả ba phương pháp.

Bước 4: Tạo Policy sử dụng Visual Editor

Visual Editor là cách trực quan nhất để tạo policy nếu bạn chưa quen với cú pháp JSON.

AWS IAM Choose Service

4.1 Chọn Service

  • Nhấp vào "Choose a service" và chọn dịch vụ AWS mà bạn muốn cấp quyền (ví dụ: S3, EC2, DynamoDB).
  • Ví dụ: Chọn "S3".

4.2 Chọn Actions

  • Sau khi chọn service, bạn có thể chọn các actions (hành động) mà policy sẽ cho phép hoặc từ chối.
  • Bạn có thể tìm kiếm actions theo tên hoặc chọn từ danh sách.
  • Chọn các actions cần thiết. Ví dụ: "ListBucket", "GetObject", "PutObject".

aws iam  policy Select Actions

4.3 Chỉ định Resources

  • Bạn cần chỉ định resources (tài nguyên) mà actions sẽ được áp dụng.
  • Có hai lựa chọn:
    • All resources: Áp dụng cho tất cả resources trong service đã chọn (không nên dùng trong môi trường production).
    • Specific resources: Chỉ định ARN (Amazon Resource Name) của resources cụ thể. Để thêm resource, bạn có thể nhấp vào "Add ARNs"

Ví dụ để chỉ định một S3 bucket cụ thể:

  • Chọn "Specific" cho resource type "bucket"
  • Nhập ARN: arn:aws:s3:::example-bucket Như vậy những quyền trong policy sẽ áp dụng chỉ cho bucket được chỉ định. Các bucket khác sẽ không bị ảnh hưởng.

Để chỉ định objects trong bucket:

  • Chọn "Specific" cho resource type "object"
  • Nhập ARN: arn:aws:s3:::example-bucket/* Như vậy những quyền trong policy sẽ áp dụng cho tất cả objects trong bucket được chỉ định. Nếu muốn chỉ định từng object, bạn có thể thay đổi như: arn:aws:s3:::example-bucket/public/

Specify Resources

Specify Resources

Specify Resources

4.4 Thiết lập Request Conditions (tùy chọn)

Conditions cho phép bạn kiểm soát khi nào policy có hiệu lực. Ví dụ:

  • Chỉ cho phép access từ một địa chỉ IP cụ thể
  • Chỉ cho phép access trong một khoảng thời gian nhất định
  • Yêu cầu sử dụng HTTPS

4.5 Thêm nhiều Statement (nếu cần)

Một policy có thể chứa nhiều statements. Để thêm statement mới:

  • Nhấp vào "Add more permissions"
  • Lặp lại các bước trên để cấu hình statement mới

Bước 5: Tạo Policy bằng JSON Editor

Nếu bạn đã quen thuộc với cú pháp JSON hoặc có một policy JSON có sẵn, bạn có thể sử dụng JSON Editor:

  • Chọn tab "JSON"
  • Nhập hoặc dán code JSON của policy

Dưới đây là một ví dụ về policy cho phép read và write vào một S3 bucket cụ thể:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3ReadWrite",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket",
        "arn:aws:s3:::example-bucket/*"
      ]
    }
  ]
}

JSON Editor

Bước 6: Sử dụng Policy Templates

AWS cung cấp nhiều templates cho các use case phổ biến:

  • Chọn tab "Actions" -> "Import Policy"
  • Tìm kiếm và chọn Policy phù hợp với nhu cầu của bạn
  • Tùy chỉnh Policy theo yêu cầu

Bước 7: Kiểm tra và đặt tên cho Policy

Sau khi đã cấu hình xong policy:

  • Nhấp vào "Next" để tiếp tục
  • Kiểm tra lại permissions để đảm bảo chính xác
  • Điền thông tin:
    • Name (bắt buộc): Tên của policy (ví dụ: "S3BucketAccessPolicy")
    • Description (tùy chọn): Mô tả ngắn gọn về mục đích của policy
    • Tags (tùy chọn): Thêm tags để dễ quản lý

Review Policy

Bước 8: Tạo Policy

  • Kiểm tra lại tất cả thông tin
  • Nhấp vào "Create policy" để hoàn tất

Bước 9: Gán Policy cho Users, Groups, hoặc Roles

Sau khi tạo policy, bạn cần gán nó cho người dùng, nhóm hoặc role để có hiệu lực:

9.1 Gán Policy cho User

  • Chọn "Users" trong menu bên trái
  • Chọn user cần gán policy
  • Nhấp vào "Add permissions"
  • Chọn "Attach policies directly"
  • Tìm và chọn policy bạn vừa tạo
  • Nhấp vào "Add permissions"

Attach Policy to User

Các ví dụ IAM Policy thông dụng

1. Read-Only Access cho S3 Bucket cụ thể

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

2. EC2 Full Access với điều kiện Region

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": [
            "ap-southeast-1",
            "ap-northeast-1"
          ]
        }
      }
    }
  ]
}

3. Policy với nhiều Services và Conditions

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::company-data/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "192.0.2.0/24"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:Query"
      ],
      "Resource": "arn:aws:dynamodb:*:*:table/users",
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "true"
        }
      }
    }
  ]
}

So sánh các phương pháp quản lý IAM Policy

Phương pháp Ưu điểm Nhược điểm Use Case phù hợp
AWS Managed Policies - Không cần bảo trì<br>- Tự động cập nhật<br>- Được AWS khuyến nghị - Ít linh hoạt<br>- Có thể chứa nhiều quyền hơn cần thiết - Môi trường test/dev<br>- Quyền tiêu chuẩn
Customer Managed Policies - Tùy chỉnh cao<br>- Tái sử dụng cho nhiều entities<br>- Dễ dàng cập nhật - Yêu cầu bảo trì<br>- Phải tự cập nhật khi AWS thay đổi - Môi trường production<br>- Quyền tùy chỉnh phức tạp
Inline Policies - Không thể gán nhầm<br>- Liên kết chặt chẽ với entity - Khó quản lý trên quy mô lớn<br>- Không tái sử dụng được<br>- Khó backup - Quyền đặc biệt cho một entity<br>- Quyền tạm thời

Best Practices khi tạo IAM Policy

  1. Follow Least Privilege Principle: Chỉ cấp đúng quyền cần thiết, không cấp quyền thừa.

  2. Sử dụng Conditions: Thêm conditions để giới hạn quyền truy cập theo IP, thời gian, MFA, v.v.

  3. Avoid Inline Policies: Ưu tiên Customer Managed Policies để dễ quản lý và tái sử dụng.

  4. Resource-Level Permissions: Luôn chỉ định resources cụ thể thay vì dùng "*".

  5. Regular Review: Định kỳ rà soát và cập nhật policies để xóa bỏ quyền không cần thiết.

  6. Use Groups: Gán policies cho groups thay vì từng user để dễ quản lý.

  7. Sử dụng Policy Validator: Sử dụng AWS Policy Validator để kiểm tra cú pháp và logic trước khi triển khai.

  8. Documentation: Thêm description chi tiết và sử dụng "Sid" (Statement ID) để dễ hiểu policy.

  9. Avoid Hard-coded ARNs: Sử dụng biến chính sách khi có thể để dễ bảo trì.

  10. Phân cấp Permissions: Tạo nhiều policies nhỏ chuyên biệt thay vì một policy lớn phức tạp.

Troubleshooting IAM Policies

Vấn đề: Policy không hoạt động như mong đợi

Nguyên nhân phổ biến:

  • Policy syntax không chính xác
  • Một policy khác đang gây conflict (deny luôn thắng allow)
  • Resource ARNs không chính xác
  • Thiếu permissions ở service level
  • IAM limitations và quotas

Cách khắc phục:

  1. Sử dụng Policy Validator để kiểm tra cú pháp
  2. Kiểm tra IAM Policy Simulator để debug permissions
  3. Xem CloudTrail logs để xác định các lỗi access denied
  4. Kiểm tra tất cả policies áp dụng cho entity (user, group, role)

Quản lý IAM Policy ở quy mô lớn

Khi hệ thống phát triển với hàng trăm hay nghìn IAM policies, bạn nên:

  1. Sử dụng AWS Organizations: Để quản lý policy trên nhiều tài khoản AWS
  2. Implement Service Control Policies (SCPs): Cấp quyền ở mức Organization Units
  3. Infrastructure as Code (IaC): Sử dụng AWS CloudFormation hoặc Terraform để quản lý policies
  4. Permission Boundaries: Thiết lập giới hạn cho permissions của một entity
  5. AWS Access Analyzer: Phân tích và tối ưu quyền truy cập dựa trên mẫu sử dụng thực tế

Theo dõi và Audit Permissions

Việc theo dõi và audit các permissions là công việc quan trọng:

  1. AWS CloudTrail: Bật CloudTrail để ghi lại mọi API calls
  2. IAM Access Analyzer: Phân tích resource-based policies để tìm access points không mong muốn
  3. Amazon CloudWatch: Thiết lập alerts cho những thay đổi về policies
  4. AWS Config: Theo dõi thay đổi cấu hình của IAM và các services khác
  5. Regular Reports: Tạo báo cáo định kỳ về permissions và access patterns

Kết luận

IAM Policies là công cụ mạnh mẽ giúp kiểm soát quyền truy cập vào tài nguyên AWS của bạn. Việc hiểu rõ cách tạo và quản lý các policies là một kỹ năng thiết yếu cho bất kỳ ai làm việc với AWS. Bằng cách áp dụng các best practice và luôn tuân theo principle of least privilege, bạn có thể bảo vệ tài nguyên của mình một cách hiệu quả trong khi vẫn cho phép người dùng thực hiện các nhiệm vụ cần thiết.

Hãy nhớ rằng bảo mật là một quá trình liên tục - review định kỳ và điều chỉnh IAM policies là cách tốt nhất để đảm bảo môi trường AWS của bạn luôn được bảo vệ tốt nhất có thể.

Nếu bạn có thắc mắc hoặc cần hỗ trợ thêm về IAM Policy, hãy để lại comment bên dưới. Chúc bạn thành công trong việc quản lý quyền truy cập trên AWS!