Public toàn bộ files trong một S3 bucket
Có nhiều khách hàng sử dụng S3 của Bizfly Cloud và khách hàng đang lầm tưởng rằng việc thực hiện set ACL Public cho bucket thì toàn bộ objects/files trong bucket đó sẽ public theo.
Bản chất việc thiết lập ACL Public cho 1 Bucket cho phép public danh sách các object có trong bucket đó, nên khi người dùng thực hiện truy cập vào một file thì không thể truy cập được và thông báo như sau
Mặc dù Bucket này đã public như thiết lập sau
Do vậy, để có thể truy cập vào file trong bucket trên ta có 2 cách:
- Thực hiện set public đối với toàn bộ file khi thực hiện upload
- Hoặc sử dụng bucket policy để thiết lập bucket.
Trong bài này, tôi sẽ sử dụng bucket policy để thiết lập public cho toàn bộ file trong bucket.
Để thực hiện điều này, ta sử dụng lệnh s3cmd. Xem thêm hướng dẫn cấu hình s3cmd tại [1].
Tạo file `policy.json` như sau
{ "Version":"2012-10-17", "Statement":[{ "Sid":"AddPerm", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::sapd-test-bucket-private/*" ] } ] }
Với sapd-test-bucket-private đây là tên bucket của bạn, bạn cần thay thế tương ứng với bucket mà bạn muốn public toàn bộ file trong bucket đó.
Thiết lập policy cho bucket bằng lệnh sau
s3cmd setpolicy policy.json s3://sapd-test-bucket-private
Kiểm tra lại thông tin policy
sapd@sapd ~/WORK/VC/s3 $ s3cmd info s3://sapd-test-bucket-private s3://sapd-test-bucket-private/ (bucket): Location: hn Payer: BucketOwner Expiration Rule: none Policy: b'{\n "Version":"2012-10-17",\n "Statement":[{\n "Sid":"AddPerm",\n "Effect":"Allow",\n "Principal": "*",\n "Action":["s3:GetObject"],\n "Resource":["arn:aws:s3:::sapd-test-bucket-private/*"\n ]\n }\n ]\n}\n' CORS: none ACL: *anon*: READ ACL: sapd@vccloud.vn: FULL_CONTROL URL: http://sapd-test-bucket-private.ss-hn-1.vccloud.vn/
Thực hiện truy cập vào file trong bucket.
Tada