Thursday, November 21, 2024

[AWS] S3 Requester Pays, Access Logs và Event Notifications

-

1. S3 – Requester Pays (Người yêu cầu trả tiền).

Thông thường, chủ sở hữu bucket sẽ phải trả chi phí cho toàn bộ lưu trữ và chuyển dữ liệu của Amazon S3 liên quan đến bucket đó. Tuy nhiên, với tính năng Requester Pays, người yêu cầu (requester) sẽ trả chi phí cho các yêu cầu và tải xuống dữ liệu từ bucket thay vì chủ sở hữu bucket. Điều này có thể hữu ích khi bạn muốn chia sẻ các bộ dữ liệu lớn với các tài khoản khác.

Tuy nhiên, yêu cầu này phải được xác thực trong AWS và không được phép ẩn danh. Điều này có nghĩa là, khi một yêu cầu được gửi đến bucket Requester Pays, người yêu cầu sẽ phải cung cấp thông tin đăng nhập để xác thực trước khi yêu cầu được xử lý.

Chú ý rằng, việc sử dụng tính năng này sẽ tăng chi phí cho người yêu cầu và tùy thuộc vào cách tính phí của AWS cho dịch vụ S3. Bạn nên tìm hiểu kỹ trước khi sử dụng tính năng này và đảm bảo rằng bạn đã cấu hình đúng cách để tránh mất phí không đáng có.

2. S3 Access Logs.

S3 Access Logs (Nhật ký truy cập S3) là tính năng của Amazon S3 cho phép lưu trữ các nhật ký liên quan đến các hoạt động truy cập vào các đối tượng (objects) trong một bucket S3. Những hoạt động này có thể bao gồm các yêu cầu truy cập, tải xuống, sửa đổi, xóa và phân quyền truy cập vào các đối tượng trong bucket S3.

Việc thu thập nhật ký truy cập S3 là hữu ích để kiểm tra, giám sát và phân tích các hoạt động truy cập đối với mục đích tuân thủ quy định, pháp lý và bảo mật. Tất cả các yêu cầu truy cập, bao gồm cả các yêu cầu được cho phép và bị từ chối, sẽ được ghi vào một bucket S3 khác. Người dùng có thể sử dụng các công cụ phân tích dữ liệu để phân tích các nhật ký này và lọc ra thông tin quan trọng.

Các bucket logging S3 phải được đặt trong cùng một khu vực với bucket cần ghi nhật ký. Định dạng nhật ký được mô tả chi tiết tại đường dẫn https://docs.aws.amazon.com/AmazonS3/latest/dev/LogFormat.html.

Mình tạo 1 bucket s3-access-logs-stephane-v3 để lưu log, với bucket này không cần thiết lập gì nhiều, bạn đặt tên cho bucket xong, chọn region và hãy kéo xuống dưới và bấm Create bucket.

Giờ hãy vào Amazon S3 › Buckets › demo-stephane-v3-event-notifications (là bucket sẽ sinh ra logs và gửi đến lưu tại bucket s3-access-logs-stephane-v3). Tại bucket này chọn tab Properties và kéo xuống Server access logging bạn sẽ thấy Server access logging đang được tắt (Disabled), giờ bạn hãy vào Edit để bật tính năng Server access logging cho bucket này.

Tại Server access logging chọn Enable và bấm vào Browse S3 chọn bucket lưu log.

Trường hợp của mình là bucket s3-access-logs-stephane-v3.

Bây giờ hãy bấm lưu lại nhé.

Khi chúng ta thiết lập xong các bước trên, hãy quay lại phần Bucket policy của bucket lưu log s3-access-logs-stephane-v3 bạn sẽ thấy có 1 chính sách đã được cập nhật vào đây cho phép ghi logs S3 vào bucket này.

Việc chúng ta cần làm bây giờ là hãy upload 1 file vào bucket đã bật tính năng gửi logs.

Và hãy quay lại bucket lưu log, bấm reload như hình để xem log.

Mình phải chờ tới vài giờ để nhận được logs.

Muốn xem log nào bạn hãy bấm vào log đó và bấm vào Open.

Bạn sẽ thấy log như dưới.

-S3 Access Logs Warning.

Trong S3 Access Logs, khi bạn bật tính năng logging cho một bucket, AWS sẽ tạo ra một bucket mới để lưu trữ những log của các truy cập vào bucket được bật tính năng logging. Điều cần lưu ý là không nên thiết lập bucket lưu trữ log này trùng với bucket được bật tính năng logging vì điều này sẽ tạo ra một vòng lặp ghi log không đáng có giữa hai bucket này. Điều này sẽ dẫn đến việc tăng kích thước của bucket lưu trữ log theo cấp số nhân và cuối cùng sẽ làm cho bucket lưu trữ log và bucket được bật tính năng logging không thể sử dụng được nữa. Do đó, bạn cần phải thiết lập một bucket khác để lưu trữ log của bucket được bật tính năng logging.

3. S3 Event Notifications.

S3 Event Notifications là chức năng cho phép bạn tạo các thông báo sự kiện tự động trong Amazon S3 khi có các sự kiện nhất định xảy ra trên bucket S3 của bạn. Các sự kiện này bao gồm S3:ObjectCreated, S3:ObjectRemoved, S3:ObjectRestore, S3:Replication và nhiều sự kiện khác nữa. Bạn có thể tạo nhiều sự kiện S3 tùy ý, mỗi sự kiện có thể được cấu hình để xử lý một loại sự kiện cụ thể, ví dụ như tạo ra các hình thu nhỏ của các hình ảnh được tải lên bucket S3 của bạn.

Khi một sự kiện được kích hoạt trên bucket S3, S3 sẽ đưa thông tin về sự kiện đó cho hệ thống thông báo sự kiện của bạn. Bạn có thể cấu hình thông báo sự kiện để gửi email hoặc tin nhắn văn bản, kích hoạt một AWS Lambda function, hoặc đẩy thông tin sự kiện vào một queue của Amazon Simple Queue Service (SQS). Bạn cũng có thể thiết lập các điều kiện lọc tên đối tượng (Object name filtering) để chỉ nhận thông báo cho các đối tượng nhất định.

Các thông báo sự kiện thường được gửi đến người dùng trong vài giây sau khi sự kiện xảy ra. Tuy nhiên, trong một số trường hợp, thông báo có thể mất nhiều hơn một phút để đến được người dùng.

– Event Notifications with Amazon EventBridge.

S3 Event Notifications cung cấp các tùy chọn lọc nâng cao với các quy tắc JSON, cho phép lọc theo metadata, kích thước đối tượng, tên đối tượng và nhiều hơn nữa. Bạn có thể tạo nhiều sự kiện S3 theo mong muốn và định tuyến chúng đến nhiều đích khác nhau như Step Functions, Kinesis Streams / Firehose và nhiều hơn nữa. Ngoài ra, EventBridge cũng có thể được sử dụng để lưu trữ các sự kiện, phát lại sự kiện và đảm bảo giao hàng tin cậy. Việc sử dụng các tính năng này giúp bạn có thể xử lý dữ liệu theo các cách khác nhau và tăng tính linh hoạt cho hệ thống của mình.

Để tạo S3 Event Notifications thì tương tự bạn hãy tạo 1 bucket mới để lưu log demo-stephane-v3-event-notifications

Vào bucket vừa tạo, vào tab Properties kéo xuống dưới và tìm đến Event notifications hoặc Amazon EventBridge. Lần này mình chọn Amazon EventBridge và bấm Edit nó.

Chọn On để Enable tính năng Amazon EventBridge, như vậy mình đã có thể sử dụng Amazon EventBridge để nắm bắt được các sự kiện xảy ra trong Bucket S3 của tôi.

Nhưng mình sẽ chỉ cho bạn cách đơn giản hơn là chỉ cần tạo 1 thông báo sự kiện bằng cách bấm vào Create event notification.

Tại đây chúng ta hãy đặt tên cho sự kiện này.

Kéo xuống Event types bạn có thể tuỳ chọn tất cả các loại sự kiện ở (1) hoặc chọn 1 loại sự kiện nào đó ở (2). Trường hợp này mình sẽ lựa chọn All object create events. Ở dưới còn rất nhiều tuỳ chọn nữa nhưng do mình chỉ demo nên mình chỉ sử dụng 1 tuỳ chọn All object create events cho đơn giản.

Kéo xuống dưới tìm tới phần Destination chúng ta có 1 số tuỳ chọn sau:

Lambda function là một hàm được thực thi bởi dịch vụ Lambda của AWS, nó có thể được kích hoạt dựa trên sự kiện S3 như file được tạo hoặc xóa khỏi bucket S3. Ví dụ, bạn có thể sử dụng Lambda function để xử lý hình ảnh và tạo ra các bản thu nhỏ khi một file hình ảnh được tải lên bucket S3.

SNS (Simple Notification Service) là một dịch vụ thông báo đơn giản của AWS, cho phép bạn gửi thông báo đến email, tin nhắn SMS hoặc một địa chỉ HTTP/HTTPS. SNS có thể được kết hợp với S3 Event Notifications để gửi thông báo đến các địa chỉ email hoặc điện thoại di động khi một sự kiện xảy ra trong bucket S3.

SQS (Simple Queue Service) là một dịch vụ xếp hàng đơn giản của AWS, cho phép bạn gửi và nhận các thông điệp từ một hàng đợi. Bạn có thể sử dụng SQS để xử lý các thông báo được gửi bởi S3 Event Notifications. Ví dụ, bạn có thể sử dụng SQS để lưu trữ các file đã tải lên bucket S3 để xử lý chúng sau này.

Do mình chọn SQS Queue nên mình sẽ có thêm lựa chọn Specify SQS queue. Trong AWS, Amazon Simple Queue Service (SQS) là một dịch vụ xếp hàng phân tán, cho phép các ứng dụng khác nhau gửi và nhận các tin nhắn hoặc các message trong một môi trường khác nhau. SQS queue ARN (Amazon Resource Name) là một chuỗi định danh độc nhất được sử dụng để xác định một queue trong AWS. Nó bao gồm cả tên region của queue và tên của queue đó. Ví dụ: arn:aws:sqs:us-east-2:123456789012:my-queue. Ở đây, us-east-2 là region của queue, 123456789012 là AWS account ID và my-queue là tên của queue.

Giờ chúng ta hãy tạo Simple Queue Service

Để tạo SQS Queue hãy bấm vào Create queue.

Đặt tên cho nó và kéo xuống dưới, bấm vào Create queue.

Có 1 thông báo “Queue DemoS3 Notification created successfully” cho thấy Simple Queue Service đã tạo thành công.

Qua tab Access policy và kéo xuống dưới, tại phần Access policy (Permissions) của bucket này chưa chấp nhận cho các bucket khác gửi sự kiện vào.

Mình sẽ chứng minh điều đó bằng cách tạo 1 bucket mới.

Lựa chọn SQS queue › Choose from your SQS queues › tại phần SQS queue lựa chọn DemoS3Notification và bấm Save changes, bạn sẽ thấy lỗi xuất hiện, lỗi này báo cho bạn biết bạn không thể truy cập vào DemoS3Notification vì chính sách của DemoS3Notification chưa cho phép bạn lưu các sự kiện từ các Bucket S3.

Và như vậy chúng ta phải thay đổi chính sách của DemoS3Notification bằng cách bấm vào Policy generator.

Thực hiện các thay đổi như hình dưới.

Tại phần Amazon Resource Name (ARN) bạn copy phần resource ở hình trên, ví dụ ‘ Resource”: “arn:aws:sqs:eu-west-1:783768293452:DemoS3Notification” chúng ta sẽ lấy arn:aws:sqs:eu-west-1:783768293452:DemoS3Notification và bỏ vào Amazon Resource Name (ARN) sau đó bấm Add Statement.

Bấm Generate Policy.

Thực hiện copy nội dung json.

Bỏ vào Access policy và bấm lưu lại.

Sau khi chính sách được cập nhật bạn hãy quay lại bảng thông báo lỗi lúc trước và bấm Save changes như hình.

Một thông báo Successfully created event notification “DemoS3Event” cho biết bạn đã thiết lập thành công.

Giờ chúng ta hãy bấm vào Send and receive messages.

Bấm vào Poll for messages và bạn sẽ thấy sự kiện xuất hiện ở phần Messages.

Nếu bấm vào sự kiện đó, bạn sẽ xem được nội dung của sự kiện.

Chúng ta có thể vào Amazon S3 › Buckets › demo-stephane-v3-event-notifications › Properties. Kéo xuống phần Event notifications bạn sẽ thấy Destination type hiện tại đang lại SQS queue, bạn cũng có thể gửi tới SNS và Lambda. Chúng ta sẽ tìm hiểu ở các phần sau.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories