Tuesday, October 22, 2024

[AWS] S3 Security Bucket Policy

-

1. Amazon S3 – Security.

Amazon S3 – Security là các cơ chế bảo mật để bảo vệ các tài nguyên (bucket và objects) trong Amazon S3 khỏi việc truy cập trái phép hoặc sử dụng sai mục đích. Các thành phần chính của bảo mật Amazon S3 gồm:

  • User-Based (dựa trên người dùng):
    • IAM Policies – cung cấp quyền truy cập vào S3 cho người dùng từ IAM
  • Resource-Based (dựa trên tài nguyên):
    • Bucket Policies – quy định quyền truy cập vào bucket và object từ cấu hình bucket trên giao diện S3
    • Object Access Control List (ACL) – quy định quyền truy cập chi tiết cho từng object trong bucket
    • Bucket Access Control List (ACL) – quy định quyền truy cập chi tiết cho toàn bộ bucket
  • Lưu ý: một principal IAM có thể truy cập vào một object S3 nếu:
    • Quyền truy cập của người dùng được phép truy cập hoặc chính sách tài nguyên cho phép truy cập đó
    • Và không có sự từ chối cụ thể nào
  • Mã hóa: mã hóa các object trong Amazon S3 sử dụng các khóa mã hóa để bảo vệ dữ liệu của bạn.

2. S3 Bucket Policies.

S3 Bucket Policies là các chính sách dựa trên định dạng JSON, được sử dụng để quản lý quyền truy cập đến các tài nguyên (resources) trong S3 bucket. Chúng được thiết lập tại cấp bucket và có thể cho phép hoặc từ chối truy cập đến tài nguyên theo các API cụ thể của S3. Các thành phần của chính sách bao gồm:

  • Resources: Danh sách các tài nguyên (buckets hoặc objects) mà chính sách áp dụng.
  • Effect: Cho phép hoặc từ chối truy cập đến tài nguyên.
  • Actions: Danh sách các API của S3 được phép hoặc từ chối truy cập.
  • Principal: Tài khoản hoặc người dùng được áp dụng chính sách.

Sử dụng S3 Bucket Policies, người dùng có thể thiết lập quyền truy cập vào bucket S3 một cách linh hoạt, bao gồm cho phép truy cập công khai đến bucket, bắt buộc mã hóa các object khi tải lên, hay cho phép truy cập từ một tài khoản khác (Cross Account).

Ví dụ về cách sử dụng Bucket Policy trong việc cấp quyền truy cập công khai cho một bucket trên AWS S3:

Giả sử bạn có một bucket trên AWS S3 chứa các tài liệu công khai và bạn muốn cho phép tất cả mọi người truy cập vào bucket này để xem và tải xuống các tài liệu đó. Để làm được điều này, bạn có thể sử dụng Bucket Policy để cấp quyền truy cập công khai cho bucket của mình.

Bước 1: Tạo Bucket Policy

Đầu tiên, bạn cần tạo một Bucket Policy mới cho bucket của mình. Ví dụ sau đây sẽ cho phép tất cả mọi người truy cập vào bucket của bạn:

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

Bước 2: Áp dụng Bucket Policy

Sau khi tạo Bucket Policy, bạn cần áp dụng nó vào bucket của mình. Để làm điều này, bạn có thể sử dụng AWS Management Console hoặc AWS CLI để thực hiện các thao tác sau:

  • Đăng nhập vào tài khoản AWS của bạn.
  • Mở trang AWS S3 Console.
  • Chọn bucket mà bạn muốn cấp quyền truy cập công khai.
  • Chọn tab “Permissions”.
  • Chọn “Bucket Policy”.
  • Dán nội dung Bucket Policy bạn đã tạo vào ô văn bản.
  • Lưu lại Bucket Policy của bạn.

Sau khi áp dụng Bucket Policy, tất cả mọi người đều có thể truy cập vào bucket của bạn để xem và tải xuống các tài liệu công khai được chia sẻ.

3. User Access to S3-IAM permissions.

IAM Permissions trong S3 là tính năng của AWS Identity and Access Management (IAM) cho phép bạn quản lý quyền truy cập cho người dùng, nhóm người dùng, vai trò (roles), hoặc các tài khoản khác trên Amazon S3.

Với IAM Permissions, bạn có thể tạo ra các quyền truy cập tùy chỉnh cho các người dùng, nhóm người dùng, vai trò, và tài khoản trên S3, bao gồm cả quyền truy cập vào các bucket và object trong bucket. Bạn có thể xác định những tài nguyên nào trên S3 mà người dùng có thể truy cập và loại truy cập nào được phép như đọc, ghi hoặc xóa.

Tại sao phải sử dụng IAM Permissions trong S3?

  • Bảo mật

IAM Permissions cho phép bạn kiểm soát việc truy cập vào các tài nguyên của Amazon S3, giúp bảo vệ các dữ liệu của bạn tránh khỏi các mối đe dọa bảo mật. Bạn có thể tạo ra các quyền truy cập tùy chỉnh cho từng người dùng, nhóm người dùng, vai trò, và tài khoản trên S3, từ đó đảm bảo rằng các tài nguyên chỉ được truy cập bởi các đối tượng đã được ủy quyền.

  • Quản lý

IAM Permissions cho phép bạn quản lý việc truy cập vào các tài nguyên trên Amazon S3 một cách dễ dàng và có tổ chức. Bạn có thể tạo ra các nhóm người dùng và gán các quyền truy cập tương ứng cho từng nhóm đó, từ đó giảm thiểu công việc quản lý tài khoản cho mỗi người dùng. Bạn cũng có thể sử dụng các policy đã có sẵn để tạo các quyền truy cập nhanh chóng.

  • Tính linh hoạt

IAM Permissions cho phép bạn tạo ra các quyền truy cập tùy chỉnh cho các tài nguyên của Amazon S3 một cách linh hoạt. Bạn có thể tạo ra các quyền truy cập tùy chỉnh cho từng người dùng, nhóm người dùng, vai trò, và tài khoản trên S3, bao gồm cả quyền truy cập vào các bucket và object trong bucket. Bạn có thể xác định những tài nguyên nào trên S3 mà người dùng có thể truy cập và loại truy cập nào được phép như đọc, ghi hoặc xóa, từ đó đảm bảo rằng các tài nguyên chỉ được truy

4. EC2 instance access – Use IAM Roles.

Trong trường hợp sử dụng IAM Roles trong S3, bạn có thể tạo một IAM Role cho EC2 instance để cho phép nó truy cập vào một bucket S3 cụ thể mà không cần sử dụng Access Key hoặc Secret Key.

Tại sao phải sử dụng IAM Roles?

  • Bảo mật

Khi sử dụng IAM Roles thay vì sử dụng Access Key hoặc Secret Key, bạn giảm thiểu các rủi ro bảo mật liên quan đến quản lý và bảo vệ các thông tin xác thực như là Access Key hoặc Secret Key. Các thông tin này có thể bị lộ hoặc bị đánh cắp và sử dụng để truy cập vào các tài nguyên trên AWS, nhưng khi sử dụng IAM Roles thì các thông tin này được quản lý và bảo vệ bởi IAM.

  • Quản lý

Sử dụng IAM Roles giúp bạn quản lý quyền truy cập cho các dịch vụ AWS một cách dễ dàng hơn. Thay vì phải quản lý từng Access Key hoặc Secret Key cho các EC2 instance, bạn có thể tạo một IAM Role và gán nó cho nhiều EC2 instance cùng lúc.

  • Tính linh hoạt

Sử dụng IAM Roles cho phép bạn thay đổi quyền truy cập của các dịch vụ AWS một cách nhanh chóng và dễ dàng hơn. Nếu bạn muốn thay đổi quyền truy cập của một EC2 instance vào một bucket S3, bạn chỉ cần thay đổi policy của IAM Role và tất cả các EC2 instance đã được gán IAM Role đó sẽ được áp dụng các thay đổi này mà không cần phải cập nhật từng Access Key hoặc Secret Key.

5. Cross-Account Access Use Bucket Policy.

Cross-Account Access Use Bucket Policy là một tính năng của Amazon S3 cho phép bạn chia sẻ tài nguyên S3 của một tài khoản với các tài khoản khác, đảm bảo tính bảo mật và quản lý tài nguyên trong việc chia sẻ giữa các tài khoản khác nhau.

Cụ thể, khi sử dụng tính năng này, bạn có thể cho phép các tài khoản AWS khác truy cập vào tài nguyên S3 của bạn, bao gồm cả bucket và object trong bucket, từ đó giúp các tài khoản khác có thể chia sẻ, đồng bộ và lưu trữ dữ liệu.

Để thực hiện chia sẻ tài nguyên S3 với các tài khoản khác, bạn có thể sử dụng Bucket Policy để xác định các quyền truy cập cho các tài khoản khác nhau. Cụ thể, bạn có thể sử dụng các điều kiện để xác định tài khoản và quyền truy cập tương ứng. Sau đó, bạn có thể cho phép hoặc từ chối các hành động như đọc, ghi và xóa tài nguyên S3.

Tuy nhiên, khi chia sẻ tài nguyên S3 giữa các tài khoản khác nhau, bạn cần lưu ý một số vấn đề liên quan đến tính bảo mật, như:

  • Xác thực và ủy quyền: Bạn cần xác định rõ danh tính của người dùng và xác thực và ủy quyền họ trước khi cho phép truy cập vào tài nguyên S3.
  • Quản lý quyền truy cập: Bạn cần đảm bảo rằng các tài khoản khác chỉ được truy cập vào các tài nguyên S3 cần thiết và không có quyền truy cập không cần thiết hoặc quyền truy cập bất hợp pháp.
  • Quản lý truy cập: Bạn cần quản lý việc theo dõi và ghi nhật ký cho các hoạt động truy cập vào tài nguyên S3 để có thể phát hiện và giải quyết các vấn đề bảo mật.

6. Bucket settings for Block Public Access.

Bucket settings for Block Public Access là một tính năng của Amazon S3 cho phép bạn ngăn chặn truy cập công khai đến các tài nguyên S3 của bạn. Khi tính năng này được kích hoạt, bạn có thể đảm bảo tính bảo mật cho các dữ liệu, tài liệu và tài nguyên khác lưu trữ trong bucket của mình.

Khi Block Public Access được bật, tất cả các yêu cầu truy cập công khai đến các tài nguyên S3 sẽ bị từ chối, bao gồm cả các yêu cầu từ người dùng không xác định, điều này giúp ngăn chặn các truy cập trái phép và giữ cho dữ liệu của bạn an toàn.

Các thiết lập của Block Public Access bao gồm:

  • Block Public Access for buckets and objects: Chặn truy cập công khai đến tất cả các buckets và đối tượng S3 trong tài khoản của bạn.
  • Block Public Access for buckets: Chỉ chặn truy cập công khai đến các buckets trong tài khoản của bạn.
  • Block Public Access for ACLs: Chặn các yêu cầu sử dụng Access Control Lists (ACLs) để cho phép truy cập công khai đến các tài nguyên S3 trong tài khoản của bạn.
  • Block Public Access for bucket policies: Chặn các yêu cầu sử dụng Bucket Policy để cho phép truy cập công khai đến các tài nguyên S3 trong tài khoản của bạn.

Ngoài ra, Block Public Access còn cung cấp cho bạn các lựa chọn để tắt chức năng này cho một số tài khoản hoặc cho các trường hợp cụ thể mà bạn muốn cho phép truy cập công khai đến các tài nguyên S3. Tuy nhiên, bạn nên sử dụng tính năng này với cẩn thận và chỉ cho phép truy cập công khai đến các tài nguyên S3 khi thật sự cần thiết.

7. Thực hành.

Tiếp ở phần trước, hãy vào Amazon › S3 Buckets › stephane-demo-$3 › Permissions. Bạn để ý ở phần Access có 1 thông báo Bucket and objects not public có nghĩa là stephane-demo-53 của bạn chưa có quyền truy cập trên internet. Tại Block public access (bucket settings), hãy bấm vào Edit.

Theo mặc định tại phần Block all public access sẽ được đánh dấu. Vậy Block all public access là gì?

Block All Public Access là tính năng của Amazon S3 cho phép bạn ngăn chặn tất cả các yêu cầu truy cập công khai đến các tài nguyên S3 trong tài khoản của bạn. Khi tính năng này được bật, bất kỳ yêu cầu truy cập nào từ bên ngoài tài khoản S3 của bạn đều sẽ bị từ chối.

Block All Public Access được thiết kế để giúp bảo vệ dữ liệu của bạn bằng cách đảm bảo rằng không có bất kỳ tài nguyên nào trong tài khoản của bạn được truy cập công khai. Khi bạn bật tính năng này, không ai có thể truy cập các tài nguyên S3 của bạn bằng cách sử dụng cách thức truy cập công khai, bao gồm cả người dùng AWS khác trong hoặc ngoài tài khoản của bạn.

Tuy nhiên, khi bạn bật tính năng này, bạn cần phải chắc chắn rằng các chính sách IAM, ACL và bucket policy của bạn được cấu hình chính xác để cho phép các yêu cầu truy cập đúng từ các nguồn đáng tin cậy. Nếu không, các yêu cầu truy cập của bạn sẽ bị từ chối và dữ liệu của bạn sẽ không thể truy cập được.

Block All Public Access là một tính năng rất hữu ích để đảm bảo tính bảo mật của dữ liệu S3 của bạn. Nó được khuyến khích sử dụng để bảo vệ dữ liệu nhạy cảm và đảm bảo tuân thủ các quy định về bảo mật.

Giờ mình sẽ bỏ nó và sử dụng Bucket Policy để quản lý quyền truy cập bucket.

Đây là thay đổi quan trọng nên bạn phải nhập confirm tại tuỳ chọn To confirm the settings, enter confirm in the field sau đó bấm Confirm.

Sau khi lưu lại bạn có thể thấy tại Access đã chuyển sang Objects can be public có nghĩa là các object (đối tượng) trong Amazon S3 có thể được cấu hình để có quyền truy cập công khai. Khi một object trong S3 được cấu hình là “public”, nó có thể được truy cập bởi bất kỳ ai trên internet mà không cần cung cấp bất kỳ thông tin xác thực nào.

Việc cho phép các object trong S3 truy cập công khai có thể có ý nghĩa trong một số trường hợp như chia sẻ dữ liệu với công chúng hoặc để dễ dàng tải xuống các tài liệu không cần xác thực. Tuy nhiên, nó cũng có thể tạo ra một vấn đề bảo mật nếu các object chứa thông tin nhạy cảm hoặc dữ liệu quan trọng được cấu hình là public mà không được kiểm soát.

Tại phần Block all public access đã chuyển sang off.

Giờ hãy kéo xuống phần Bucket Policy, bấm vào Edit.

Bạn có thể vào Policy examples để xem các ví dụ về Bucket Policy nhé.

Tại đây bạn sẽ có rất nhiều ví dụ để tham khảo.

Mình sẽ sử dụng tính năng Policy generator để tạo Bucket Policy.

Tại Select Type of Policy hãy chọn S3 Bucket Policy, phần Principal mình để * với ý nghĩa là cho phép hoặc chặn tất cả người dùng truy cập vào, tại phần Effect chọn allow có nghĩa là cho phép, tại AWS Service chọn Amazon S3 nhé, tại Amazon Resource Name (ARN) bạn điền thông tin Bucket ARN và đường dẫn mà bạn muốn công khai (ví dụ Bucket ARN của mình là arn:aws:s3::stephane-demo-s3, mình cho phép truy cập tất cả các file và folder của mình nên mình sẽ để đường dẫn là arn:aws:s3::stephane-demo-s3/*). Bấm Add Statement và chúng ta xuống tiếp phần dưới.

Bạn bấm vào Generate Policy để tạo ra file mẫu json của Bucket Policy nhé.

Copy file mẫu và bấm Close.

Dán nội dung json vào Policy.

Sau khi lưu lại, bạn nhật được kết quả như dưới.

Hãy quay lại url bài hôm trước chúng ta thấy https://stephane-demo-s3.s3.eu-west-1.amazonaws.com/coffee.jpg không được công khai lý do là bạn chưa cho phép người dùng ở ngoài truy cập vào.

Và sau khi cấu hình xong Bucket Policy, chúng ta bấm tải lại trang và bạn có kết quả như dưới.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories