Amazon S3 Access Control - IAM Policies, Bucket Policies and ACLs

Posted by MinhHungTrinh on 2021-08-28
Estimated Reading Time 7 Minutes
Words 1.2k In Total
Viewed Times

Mình thấy có nhiều bạn có sự nhầm lẫn giữa các AWS S3 Access Control là IAM Policies, Bucket Policies, ACLs. Nhiều bạn còn thắc mắc tại sao lại sinh ra cái này vì đã có cái kia. Mình cũng từng dành khá khá time để giải thích cho đồng nghiệp nhưng có vẻ do không note ra rõ dàng, do nói chay nên vấn đề diễn đạt trở nên khó hiểu.
Tiện thể thấy video của bác Neal Davis publish thấy rất clear. https://www.youtube.com/watch?v=xFzJw6wJ8eY . Ngày trước, mình rất hay xem những khoá học của Bác, giảng rất chi tiết và clear, hỗ trợ rất tốt cho người mới bắt đầu hoặc có 1 chút kinh nghiệm. Mình suggest ae nên mua khoá học của Bác nhé :D
Trong link có cả thực hành khá là chi tiết đấy. Ae nào lười xem video thì có thể đọc notes của mình nhé. Ngoài ra mình cũng bổ sung một số nội dung để clear hơn vài khái niệm.

1. What?

a. IAM Policies:

main

b. Bucket Policies:

main

  • Bucket Policies => Resource-based policies
  • Chỉ có thể attach tới AWS S3 Buckets
  • Cũng sử dụng AWS access policy language
  • Có thể thấy Bucket Policy có chỉ rõ pricinpal là ai, vậy nên phải được cho phép ở principal thì mới thao tác được các permissions đã allow.

c. S3 Access Control Lists (ACLs)

  • Kiểm soát truy cập, cái này có trước IAM
  • AWS thường recommends sử dụng S3 Bucket policies hoặc IAM policies hơn là ACLs
  • Có thể attach tới bucket hoặc trực tiếp 1 object nào đó.
  • Bị giới hạn về việc cấp phát grantees hay Permission. Ví dụ như chỉ giới hạn cấp cho Account nào, Read, Write, Delete. => hạn chế

2. Usecase

a. S3 Access Control Lists (ACLs)

ACLs thì không được recommend để sử dụng nữa và cũng vì nhưng hạn chế của nó khi thao tác control access. Nên mình sẽ bỏ qua

b. When use IAM Policies:

  • Bạn cần control access tới các AWS Services khác ngoài việc chỉ control access S3. Chúng ta có thể viết 1 policy cho phép thao tác cùng lúc tới nhiều services như: S3, EC2, RDS,…
  • Bạn có vài S3 Buckets và muốn có các permission khác nhau. IAM Policies dễ dàng quản lý nó.
  • Bạn thích kiểm soát access control policies trong dịch vụ IAM

c. When use Bucket Policies:

  • Bạn muốn đơn giản việc cấp quyền truy cập cross-account access tới môi trường S3 mà không cần IAM Roles
  • IAM policies đang bị giới hạn size limits (Ở đây có thể hiểu là việc attach policies đã đạt tới 10 rồi, hoặc custom policies của bạn đã viết dài quá 4096 ký tự)
  • Bạn thích quản lý control access bằng dịch vụ S3

3. Authorization Process

Vậy khi chúng ta sử dụng cả Bucket Policies và IAM Policies thì nó sẽ kết hợp như thế nào? Vì việc cấp permission có thể khác nhau.
Chỗ này các bạn có thể tham khảo: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics
Như các bạn thấy thì IAM Policies và Bucket Policies có tính cộng:
main

Để rõ ràng hơn thì ae cần hiểu rõ hơn về explicit deny và implicit deny, cụ thể:
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplay

  • Explicit deny (deny rõ ràng) khi bạn viết các rule deny trực tiếp permissions nào đó
  • Implicit deny (deny ngầm) hay explicit allow được hiểu khi bạn allow permissions nào đó thì thực ra bạn đang deny ngầm các permission còn lại.

Vậy tính cộng của IAM policies và Bucket Policies là cộng tất cả các explicit deny và implicit deny của cả 2.
Như flow dưới, Explicit deny thì ưu tiên hơn implicit deny (explicit allow).
main

  • Bắt đầu với việc deny
  • Đánh giá tất cả các policies của cả IAM Policies và Bucket Polies
  • Kiểm tra xem có explicit deny nào không? nếu có thì quyết định cuối cùng là deny
  • Kiểm tra xem có vi phạm implicit deny, tức là explicit allow có allow permissions đó không? nếu có thì quyết định cuối cùng là cho phép
  • Mặc định nếu không khớp policies nào thì sẽ Default Deny

4. Kết

Đa số các trường hợp mình đề sử dụng IAM Policies cho việc truy cập S3. Kể cả việc truy cập Cross Account tới S3 thì sử dụng Bucket Policies thì làm đơn giản hoá. Nhưng thực sự mình quen thao tác tập trung việc phân quyền trên IAM rồi, mình không muốn phân tán ra thì sẽ khó quản lý, nhất là với hệ thống lớn quá nhiều resources mình còn chẳng nhớ đã cấu hình S3 những gì và rất lười kiểm tra từng cái. Và IAM Policies thực sự linh động cho việc cấu hình permissions đó.
Mọi người hãy đưa ra đánh giá bổ sung nhé!


Đây là Blog cá nhân của MinhHungTrinh, nơi mình chia sẻ, lưu giữ kiến thức. Nếu các bạn có góp ý, thắc mắc thì vui lòng comment bên dưới cho mình biết nhé. Mình luôn là người lắng nghe và ham học hỏi. Các vấn đề đặc biệt hoặc tế nhị mọi người có thể gửi email tới minhhungtrinhvn@gmail.com. Cảm ơn Mọi Người đã đọc Blog của mình. Yolo!