[Dành cho Beginner] IAM trong AWS

2020.05.26

Xin chào mọi người. Hôm nay chúng ta sẽ cùng tìm hiểu về IAM (Identity and Access Management) trong AWS.

Chắc hẳn khi mới bắt đầu tìm hiểu về Amazon Web Services, IAM là một trong những khái niệm mà chúng ta tiếp xúc đầu tiên. Cùng bắt đầu thôi!

1. IAM (Identity and Access Management) là gì?

IAM (Identity and Access Management) tạm dịch là "Quản lý truy cập và nhận dạng" là một dịch vụ web giúp bạn kiểm soát truy cập an toàn vào các tài nguyên AWS. Bạn sử dụng IAM để kiểm soát ai được xác thực (đăng nhập) và được ủy quyền (có quyền) để sử dụng tài nguyên.

IAM cung cấp cho bạn một số tính năng sau:

  • Chia sẻ quyền truy cập vào tài khoản AWS của bạn: Bạn có thể cấp cho người khác quyền quản trị và sử dụng tài nguyên trong tài khoản AWS của bạn mà không phải chia sẻ mật khẩu hoặc khóa truy cập.
  • Cấp phép chi tiết: Bạn có thể cấp các quyền khác nhau cho những người khác nhau sử dụng các tài nguyên khác nhau.
  • Truy cập an toàn vào tài nguyên AWS cho các ứng dụng chạy trên Amazon EC2 Bạn có thể cung cấp thông tin đăng nhập an toàn cho các ứng dụng chạy trên các phiên bản EC2
  • Xác thực đa yếu tố (MFA): Bạn có thể thêm xác thực hai yếu tố vào tài khoản của mình và cho từng người dùng để bảo mật hơn
  • Thông tin nhận dạng để đảm bảo: Nếu bạn sử dụng AWS CloudTrail, bạn sẽ nhận được các bản ghi nhật ký bao gồm thông tin về những người đã yêu cầu tài nguyên trong tài khoản của bạn. Thông tin đó dựa trên danh tính IAM.
  • Sử dụng miễn phí: IAM được cung cấp miễn phí. Bạn chỉ phải trả phí cho việc sử dụng các dịch vụ của AWS trên tài khoản của bạn.

2. User, Group, Role, Policy

IAM là khái niệm vô cùng quan trọng trong bảo mật của AWS. Hiểu về cách IAM hoạt động chính là hiểu về việc xác thực, cấp phép và uỷ quyền trong AWS.

Khi đăng kí và truy cập tài khoản, đầu tiên, bạn sẽ đăng nhập với tư cáh là người dùng gốc (Tài khoản root)

Tuy nhiên, khi bạn sử dụng thông tin đăng nhập tài khoản root, bạn có quyền truy cập đầy đủ, không hạn chế vào tất cả các tài nguyên trong tài khoản AWS của bạn, bao gồm quyền truy cập vào thông tin thanh toán và khả năng thay đổi mật khẩu của bạn. Mức truy cập này là cần thiết khi bạn lần đầu tiên thiết lập tài khoản của mình. Tuy nhiên, vì lý do bảo mật cho cả bản thân và những người khác cần làm việc với tài nguyên AWS của bạn, AWS khuyên bạn không nên sử dụng thông tin xác thực người dùng root để truy cập và sử dụng AWS, thay vào đó là việc sử dụng tài khoản IAM User. Đó cũng là lý do vì sao chúng ta cần hiểu rõ các khái niệm tiếp sau đây về User, Group, Role, Policy.

Chúng ta hãy nhìn vào sơ đồ dưới đây để hiểu từng khái niệm.

User

Là tài khoản với sự uỷ nhiệm (Credentials) vĩnh viễn, được tạo và cấp quyền bời tài khoản root. Chúng ta đăng nhập vào User bằng. 1 User bao gồm user name, console password, accesskey,...

Group

Là 1 nhóm bao gồm nhiều user. Đồng thời, 1 user cũng có thể thuộc về nhiều group.

Role

Là 1 tập các quyền mà bạn có thể sử dụng để truy cập các tài nguyên AWS mà bạn cần. Tuy nhiên, bạn không đăng nhập vào role, role không có password or access keys mà bạn có thể switch sang role sau khi đăng nhập bằng user của bạn. Có thể hiểu role là một tài khoản với sự uỷ nhiệm (Credentials) tạm thời để giải quyết những cồng việc khác nhau với vai trò khác nhau.

Policy

Là 1 đối tượng khi liên kết với user, group hay role thì sẽ định nghĩa quyền của chúng.

Mọi thứ trong AWS đều là API, điều này rất quan trọng, nó cũng có nghĩa là để thực thi API, trước hết chúng ta phải xác thực, nhưng sau đó chúng ta phải ủy quyền. Đó chính là lý do vì sao chúng ta cần có Policy.

Policy là những file JSON được đính kèm trực tiếp vào User, Group hoặc Role. 1 Policy sẽ có dạng cấu trúc cơ bản như sau:

 {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "Stmt1571671788500",
         "Action": [
           "ec2:CreateImage",
           "ec2:CreateNetworkAcl",
           "ec2:CreateNetworkAclEntry",
           "ec2:CreateVpc"
         ],
         "Effect": "Allow",
         "Resource": "*"
       },
       {
         "Sid": "Stmt1571717009297",
         "Action": [
           "s3:CreateBucket",
           "s3:CreateJob",
           "s3:DeleteBucket",
           "s3:DeleteBucketPolicy",
           "s3:DeleteBucketWebsite",
           "s3:DeleteObject"
         ],
         "Effect": "Allow",
         "Resource": "*"
       }
     ]
   }

Version: Phiên bản của ngôn ngữ policy

Statement: Là thành phần chính cho một Policy. Phần tử này là bắt buộc. Statement có thể chứa một câu lệnh hoặc một mảng các câu lệnh riêng lẻ. Mỗi khối câu lệnh riêng lẻ phải được đặt trong dấu ngoặc nhọn {}. Nhiều câu lệnh, mảng phải được đặt trong dấu ngoặc vuông [].

    • Sid: (statement ID) là một ID tuỳ chọn bạn cung cấp cho mỗi câu lệnh trong statement,
    • Effect: Là 1 thành phần bắt buộc và chỉ định kết quả statement được chấp nhận hoặc từ chối (Alllow/Deny)
    • Action: Mô tả hành động hoặc hành động cụ thể sẽ được phép hoặc bị từ chối.
    • Resource: Chỉ định những tài nguyên AWS được áp dụng trong các Action.
    • Condition: Chỉ định các điều kiện bắt buộc để policy có hiệu lực

Với Policy, chúng ta có thể quy định rõ User, Group hay Role có quyền hạn sử dụng những tài nguyên nào.

Bạn có thể dễ dàng quản lý User, Group cũng như Role trong tài khoản AWS của mình tại mục Identity and Access Management (IAM) trên giao diện AWS Management Console.

Tóm tắt

Vậy những điều chúng ta cần hiểu một cách ngắn gọn về IAM đó là:

  • IAM giúp chúng ta xác thực và uỷ quyền khi sử dụng tài nguyên AWS.
  • Tài khoản root tạo ra các tài khoản user. Các user này thuộc về các group nhất định.
  • Chúng ta đăng nhập vào user, switch sang role với 1 vai trò nhất định đi kèm với các quyền sử dụng tài nguyên được quy định dựa vào policy.

Hy vọng có thể giúp mọi người hiểu về IAM.

Cảm ơn các bạn đã theo dõi blog! Hẹn gặp lại vào những blog tiếp theo!

Tài liệu tham khảo:

https://docs.aws.amazon.com/iam/index.html

https://www.aws.training/Details/eLearning?id=29703