IAM là gì? Tìm hiểu và hướng dẫn cài đặt IAM user, group và policy

IAM viết tắt của Identity and Access Management) cho phép bạn quản lý quyền người dùng truy cập vào các dịch vụ và tài nguyên AWS đảm bảo bảo mật cho tổ chức phân cấp nhiều người dùng sử dụng chung tài khoản.

Mặc định AWS khuyến nghị không sử dụng trực tiếp account root để đăng nhập. Thay vào đó từ account root, chúng ta có thể tạo các account user cho các nhóm và các thành viên để đảm bảo tính bảo mật. Trong bài viết này sẽ hướng dẫn các bạn tìm hiểu về IAM và cách tạo user, group & policy tương ứng.

Tương quan giữa user, group và policy

Khi sử dụng IAM, bạn có thể tạo, quản lý người dùng và group, đồn thời sử dụng các quyền để cho phép hay từ chối quyền truy cập vào tài nguyên AWS của họ. Mối tương quan của các đối tượng user, group, role và policy như sau:

IAM user

IAM user có khái niệm giống với định nghĩa user trong LDAP, DB hay Facebook, Google…

IAM user mặc định không có quyền, tương ứng với trạng thái DENY.

Trong AWS có 02 phương thức IAM user sử dụng để xác thực:

  • API Access key/secret: sử dụng trong AWS CLI hoặc SDK thiết lập trong máy chủ của người dùng.
  • Login/Password: chỉ sử dụng khi truy cập AWS Console.

Ngoài ra, IAM user cũng có thông tin bảo mật được sử dụng với AWS CodeCommit (SSH / HTTPS). Bạn có thể gán IAM policy hoặc tạo Inline Policy dùng riêng cho user.

Việc tạo user cũng rất đơn giản. Thay vì sử dụng AWS Console thao tác từng bước, tôi quen với cách sử dụng AWS CLI:

aws iam create-user --user-name Ivan

Trường hợp cần sử dụng cấu trúc phân cấp logic, bạn có thể sử dụng đường dẫn path kèm theo các tham số:

aws iam create-user --user-name Ivan --path /developers/

Điểm khác biệt trong ví dụ trên là ARN. Nếu bạn tạo user không có path thì giá trị ARN của user là arn:aws:iam::accoint_id:user/Ivan trong khi với tham số path sẽ là arn:aws:iam::account_id:user/developers/Ivan

Lưu ý là phần tử path không giống nhau trong IAM group, do đó bạn không thể gán policy cho tất cả các user theo path nào đó.

Inline Policy

Như đã đề cập ở bên trên Inline Policy là chính sách được gán trực tiếp cho user và được cấp quyền hạn cho chính xác một người dùng. Policy này không thể được chia sẻ với các user, group hoặc với roles khác.

Lấy ví dụ một policy như bên dưới:

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

Lưu lại trong text file trong ổ local của bạn, sau đó chạy lệnh để tạo inline policy và gán vào user:

aws iam put-user-policy --user-name Ivan --policy-name InlineIsBad --policy-document file://policy.json

IAM User Limits

  • IAM user thuộc tối đa là 10 group
  • Tối đa 5000 IAM user trong 1 account. Lưu ý bạn cần phải sử dụng IAM user riêng nếu dùng Git auth và CodeCommit. Điều này đồng nghĩa bạn có tối đa 5000 developer cùng làm việc trong CodeCommit

IAM group

Một đối tượng khác trong IAM là IAM group. Giống vơi chức năng LDAP, IAM group để nhóm và xác thực tập trung các user theo mô hình ma trận.

IAM group tương tự với IAM user nhưng chúng có thể gán thêm managed policy ngoài inline policy.

Group có thể gán trực tiếp với các policy, khi đó các user trong Group sẽ được áp dụng quyền truy cập của Group

aws iam create-group --group-name SuperStars
aws iam put-group-policy --group-name SuperStars --policy-document file://policy.json --policy-name InlinePolicyIsStillBad

Policy khi gán vào Group không giơi hạn quyền của user thay vào đó mở rộng bổ sung thêm quyền cho user. Ví dụ khi user có quyền Full Access to S3 và được gán vào group có quyền Full Access to EC2, thì user này sẽ có cả 02 quyền này.

IAM roles

Là khái niệm được tạo ra nhằm giảm thiểu rủi ro bảo mật khi phải lưu các thông tin xác thực trên trực tiếp máy chủ truy cập vào tài nguyên AWS thông qua secret key.

IAM role là thực thể trong IAM mà bạn tạo trong account có các quyền hạn cụ thể. IAM role giống với IAM user ở chỗ được cung cấp các quyền hạn theo policy để xác định 1 thực thể được và không được làm trong AWS. Điểm khác biệt ở chỗ thay vì chỉ giới hạn trong 01 user duy nhất thì các role có thể gán với nhiều user.

Ngoài ra, các role cũng gán với việc xác thực credential lâu dài như password hay access key, thay vào đó khi bạn đảm nhận một role, nó sẽ cung cấp thông tin bảo mật tạm thời cho bạn.

Ví dụ để nhận được quyền hạn cung cấp trong IAM roles,một thực thể (IAM user, Lambda function, ECS task cần được gán đảm nhận quyền đó (Assume Role).

Policies và Permission

Policy là đối tượng trong AWS nhằm định nghĩa quyền hạn. Theo đó AWS sẽ đánh giá các policy được áp dụng lên user hoặc group khi thực hiện quyền truy cập tài nguyên. Policy được định dạng theo JSON hoặc YAML và AWS định nghĩa 06 dạng Policy:

  • Identity base policy: gán quyền nhận thực cho user, group hoặc roles
  • Resource base policy: Gán quyền sử dụng resource, ví dụ điển hình là S3 bucket policy.
  • Permission boudaries: định nghĩa quyền hạn tối đa mà để gán cho đối tượng thay vì định nghĩa quyền hạn.
  • Organization SCPs: sử dụng dịch vụ kiếm soát AWS Organization để định nghĩa quyền hạn tối đa một tài khoản trong Organization hoặc đơn vị OU. SCP giới hạn quyền mà Identity base policy hoặc Resource base policy gán cho thực thể (user hoặc roles) trong account chứ không định nghĩa quyền hạn.
  • Access Control List (ACL): tương tự Resource base policy tuy nhiên không định dạng JSON.
  • Session Policy: Sử dụng cho trường hợp dùng AWS CLI hay API. Policy này giới hạn quyền tạo session chứ không gán quyền hạn.

Access Level trong Policy

Bảng tóm tắt Policy bao gồm Access Level mô tả quyền thao tác của các service được đề cập đến trong policy.

Bảng tóm tắt Access Level xác định các quyền ( ListReadWrite, and Permissions management có quyền Full hay Limited.

  • Full access: Chính sách cung cấp quyền truy cập được tất cả các hành động đối với service
  • Limited: Chính sách này cung cấp quyền truy cập vào một hoặc nhiều nhưng không phải tất cả các hành động trong phân loại cấp truy cập được chỉ định.
  • None: Chính sách không có quyền truy cập

https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html

Các policy truy cập EC2

AWS sử dụng 02 loại chính sách IAM user tạo mới để tạo và thực thi trên EC2:

  • AmazonEC2FullAccess
  • IAMReadOnlyAccess

Các bước triển khai

  • Tạo user mới (lưu ý tạo Access key)
  • Tạo Group và add user mới vào trong Group
  • Gán các policy vào trong user và group đã tạo.
  • Các role là tập hợp danh sách các quyền của user truy cập các tài nguyên

Chi tiết thực hiện

1. Đăng nhập vào tài khoản AWS, lựa chọn IAM Console

2. Show User Security Credentials

3. Hoàn thành tạo user

4. Tạo mới group

Gán Policy cho group

5. Gán user vào group

Hoan thành quá trình tạo tài khoản user, group và gán policy cho group.

Tham khảo

https://www.koding.com/docs/setup-aws-iam-user

https://medium.com/@thomas.storm/aws-iam-deep-dive-chapter-2-users-groups-roles-policies-330bfac3b505

Leave a Reply

Your email address will not be published. Required fields are marked *