Tích hợp Object Storage với Go
Giới thiệu
Tài liệu hướng dẫn sử dụng SDKs
Trong trang này sẽ bao gôm những ví dụ đơn giản nhất để tìm hiểu về chức năng của s3.
Các chức năng khi kết hợp với nhau sẽ giúp người dùng có được tính năng hay và thú vị.
Cài đặt
Khởi tạo kết nối
API: https://s3.xorcloud.net
Trong đó <ACCESS_KEY_ID>
và <SECRET_KEY_ID>
được lấy từ giao diện quản lý API key
Tính năng Secure Token
Mô tả : tính năng này giúp người dùng tạo ra các cặp key, secret đi kèm session token có thời hạn sử dụng (tối đa là 24 giờ). Việc sử dụng key, secret và session token có thể thực hiện tất cả các thao tác với bucket và file như sử dụng cặp key, secret bình thường.
Chức năng này rất có ích trong việc sử dụng frontend upload nhiều file liên tiếp hoặc đưa cho các ứng dụng sử dụng trong thời gian ngắn.
Tạo các cặp key, secret tạm
Thực hiện việc tạo các cặp key, secret tạm.
Sử dụng các cặp key, secret tạm
Sử dụng các cặp key, secret tạm
Quản lý bucket
Lấy, tạo mới, xoá
Tham số
<BUCKET-NAME>
: tên bucket chỉ nên có các ký tự số (0->9), chữ thường (a->z), gạch ngang "-" để các bucket có thể truy cập từ đường link url không bị lỗi và các thao tác config không bị lỗi trong quá trình sử dụng.
Lấy danh sách
Ví dụ lấy bucket có tên là
bucket-01
Tạo mới bucket
Xoá
Danh sách file
Lấy ra danh sách các file có trong bucket, mặc định sẽ trả về 1000 kết quả.
Ví dụ lấy danh sách file trong thư mục
gach/
trong bucketbucket-01
Quản lý Bucket ACL
ACL - Access Control List: cho phép bạn quản lý truy cập vào bucket. Mỗi bucket có một ACL, nó định nghĩa người dùng hoặc nhóm người dùng nào có quyền truy cập gì vào bucket của bạn.
Khi tạo một bucket, một ACL mặc định (FULL_CONTROL
) được đính vào bucket cho phép chủ sở hữu bucket có toàn quyền trên bucket đó.
Get
Set
Tham số
<CANNED_ACL>
thuộc một trong các giá trị sau:
private
Chủ sở hữu có toàn quyền (FULL_CONTROL), không ai khác có quyền truy cập (mặc định)
public-read
Chủ sở hữu có toàn quyền (FULL_CONTROL), Tất cả người dùng khác có quyền đọc (READ)
public-read-write
Chủ sở hữu có toàn quyền (FULL_CONTROL), Tất cả người dùng khác có quyền đọc (READ) và ghi (WRITE)
authenticated-read
Chủ sở hữu có toàn quyền (FULL_CONTROL), Tất cả người dùng đăng nhập khác có quyền đọc (READ)
Quản lý Bucket Policy
Bucket Policy: cho phép phân quyền chi tiết cho từng người dùng cụ thể ở trong hệ thống S3 Storage của X-OR Cloud.
Chức năng này được sử dụng để thực hiện chia sẻ tài nguyên dùng chung giữa nhiều tài khoản khác nhau.
Kết hợp chức năng này với chức năng Payment Requester sẽ được sử dụng như là tính năng phân quyền cho từng người dùng và tính toán chi phí cho từng dự án (hay người) khác nhau.
Get
Set
Tham số
Ví dụ về policy
Trong policy ở trên sẽ có phần
'Version': '2012-10-17'
: Đây là xác định version của policy, phần này không thể thay đổiStatement
Đây là danh sách quyền truy cập vào các tài nguyên của bucket , ví dụ như được truy cập vào bucket A và không được truy cập vào bucket B, có thể có nhiều quyền truy cập trong 1 Statement
Trong 1 thành phần Statement thì sẽ có cách thành phần con như sau:
Effect
có thể là 1 trong 2 giá trị làAllow
hoặcDeny
sẽ quyết định có quyền truy cập vào tài nguyênPrincipal
là định danh của người dùng được phân quyền trong phầnEffect
trong đó<USER-UID>
là ID của người dùng được phân quyềnAction
là danh sách các thao tác được cho phép hoặc bị cấm tác động lên bucket hoặc file bởi người dùng ở phầnPrincipal
Các action này có thể là 1 hoặc kết hợp nhiều action dưới đây :
AbortMultipartUpload
, CreateBucket
, DeleteBucketPolicy
, DeleteBucket
, DeleteBucketWebsite
, DeleteObject
, DeleteObjectVersion
, DeleteReplicationConfiguration
, GetAccelerateConfiguration
, GetBucketAcl
, GetBucketCORS
, GetBucketLocation
, GetBucketLogging
, GetBucketNotification
, GetBucketPolicy
, GetBucketRequestPayment
, GetBucketTagging
, GetBucketVersioning
, GetBucketWebsite
, GetLifecycleConfiguration
, GetObjectAcl
, GetObject
, GetObjectTorrent
, GetObjectVersionAcl
, GetObjectVersion
, GetObjectVersionTorrent
, GetReplicationConfiguration
, ListAllMyBuckets
, ListBucketMultiPartUploads
, ListBucket
, ListBucketVersions
, ListMultipartUploadParts
, PutAccelerateConfiguration
, PutBucketAcl
, PutBucketCORS
, PutBucketLogging
, PutBucketNotification
, PutBucketPolicy
, PutBucketRequestPayment
, PutBucketTagging
, PutBucketVersioning
, PutBucketWebsite
, PutLifecycleConfiguration
, PutObjectAcl
, PutObject
, PutObjectVersionAcl
, PutReplicationConfiguration
, RestoreObject
Resource
là tài nguyên được chỉ định để thao tácarn:aws:s3:::<BUCKET-NAME>
resource là bucket thường đi kèm với các thao tác tác động tới Bucket như ListBucket, PutBucketAcl, PutBucketCORS ...arn:aws:s3:::<BUCKET-NAME>/*
resource này là tất cả các file trong bucket, ngoài ra có thể định cho một prefix nhất định của bucket như làarn:aws:s3:::<BUCKET-NAME>/prefix1/*
, khi đó thì resource sẽ là những bucket có prefix là prefix1. Resource này thường được đi kèm với cả các action như GetObject, PutObject, PutBucketAcl, GetObjectAcl
Một số ví dụ cụ thể về bucket policy
Policy cho phép user
a7d1e56edcac40d0896d2b97f414afc5
download file từ bucketbucket-dev
Policy cho phép user
a7d1e56edcac40d0896d2b97f414afc5
upload file từ bucketbucket-dev
, bao gồm cả các thao tác liên quan đến multi-part upload
Delete
Quản lý Bucket CORS
Bucket CORS - Cross-Origin Resource Sharing: là cơ chế cho phép các website với các tên miền khác nhau truy cập cùng một bucket và các resource bên trong. Xem thêm CORS - Wikipedia
Get
Ví dụ set bucket CORS cho trang
http://mysite.com
, với phương thức là GET, cho phép gửi và nhận bất cứ header nào, đồng thời set thời gian cache preflight response là 300 giây.
Delete
Quản lý Bucket Versioning
Bucket Versioning: khi được bật VCCloud Simple Storage sẽ tự động tạo một phiên bản lưu trữ mỗi khi file bị ghi đè hoặc xoá, cho phép người dùng có thể khôi phục file về các trạng thái trước đó.
Trạng thái hiện tại
Bật/Tắt bucket versioning
Tham số
<STATUS>
là True
hoặc False
tương ứng với trạng thái Bật
hoặc Tắt
Quản lý Bucket Website
Bucket Website: khi được bật VCCloud Simple Storage sẽ biến bucket đó thành 1 static hosting để chứa các file static (html,css,js,image ...).
Tính năng này rất phù hợp với các dạng trang làm landing page, các dạng code frontend generate ra HTML, CSS, JS.
Kiểm tra cấu hình hiện tại
Sửa cấu hình
Xoá
Quản lý Bucket Lifecycle
Bucket Lifecycle là tính năng giúp người dùng thực hiện các thao tác như sau :
Tự động xóa các file sau một khoảng thời gian nhất định (ví dụ là 3 ngày, 1 tuần ), có thể sử dụng tính năng này biến bucket thành backup
Tự động di chuyển object tới một storage class khác, nhằm đưa object vào archive hay đưa tới những storage class nơi yêu cầu truy suất cao hơn
Tự động Abort Incomplete MultiPart Upload (tự động hủy các multi-part upload mà chưa hoàn thành), giúp dọn dẹp các object upload bị lỗi trong quá trình upload
Tự động xóa các object version mà không phải object version mới nhất (NoncurrentVersionExpiration) sau n ngày
Với tât cả các tính năng trên, người dùng có thể sử dụng để làm giảm bớt dung lượng không cần thiết.
Kiểm tra cấu hình hiện tại
Sửa cấu hình
Tham số
<PREFIX>
tiền tố xác định một hoặc nhiều object được áp dụng, ví dụ: test.txt
hoặc thumuc/
hoặc ScreenShots/ScreenShot2018-
.
<STATUS>
Trạng thái của lifecycle, thuộc một trong hai giá trị: Enabled
(Bật) hoặc Disabled
(Tắt)
<EXPIRATION-IN-DAYS>
số ngày object đó sẽ được đánh dấu là hết hạn tính theo ngày ví dụ 5 (5 ngày).
<NONCURRENT-VERSION-EXPIRATION-IN-DAYS>
khi bật tính năng versioning, tham số này sẽ set cho các object không phải là mới nhất sẽ hết hạn sau bao nhiêu ngày.
<DAYS-AFTER-INITIATION>
khi sử dụng chức năng multi-part upload, các part upload mà không complete sẽ bị xóa xóa sau bao nhiêu ngày.
Lưu ý
Các config sau : Expiration, AbortIncompleteMultipartUpload, NoncurrentVersionExpiration không bắt buộc phải đi cùng nhau, một bucket có thể có 1 hoặc tất cả các config trên.
Có thể có nhiều rule (> 1) cho một bucket
Khi bucket có nhiều rule, nếu 1 rule trong đó có prefix là rỗng khi config bucket lifecycle sẽ bị lỗi 400 (bad request)
Xoá cấu hình
Quản lý Bucket Payer
Về cơ bản chủ sở hữu bucket sẽ trả tiền cho việc lưu trữ và transfer dữ liệu bucket đó. Tuy nhiên chủ sở hữu có thể cài đặt bucket trở thành Requester Pays Bucket, tức là để cho người truy cập bucket trả tiền cho các request và transfer dữ liệu do họ sử dụng, chủ sở hữu bucket sẽ chỉ trả tiền cho việc lưu trữ dữ liệu.
Thông thường, Requester Pays Bucket được sử dụng khi bạn muốn chia sẻ dữ liệu , người được chia sẻ dữ liệu sẽ trả phí cho tất cả những gì mà người đó dùng.
Ví dụ sử dụng tài tính năng này. - Có 2 loại tài khoản dành cho 2 mục đích khác nhau: - Loại tài khoản đầu tiên sử dụng để lưu toàn bộ các file - Loại tài khoản thứ 2 được sử dụng để thực hiện thao tác health check hoặc dọn dẹp tài nguyên mà không bị lẫn sang việc download hay upload của tài khoản chính - Khi thực hiện payment request các tài nguyên thống kê sẽ được tính vào người thực hiện request.
Kiểm tra cấu hình hiện tại
Set bucket trở thành Requester Pays Bucket
Set bucket trở về mặc định Owner Pays Bucket
Quản lý object (file)
Upload
Upload file lên bucket.
Trong quá trình upload người dùng thể thêm vào metadata, tag cho object.
Multipart upload
Chức năng này giúp người dùng quản lý việc upload các file lớn. Các file lớn sẽ được upload lên theo từng part, sau khi tất cả các part đã được upload lên file đó sẽ được nối lại.
Size của 1 part tối thiểu là 5MB.
Tham số
<PATH-TO-LOCAL-FILE>
là đường dẫn đến file cần upload
<KEY-NAME>
là đường dẫn lưu file trong bucket
Download
Download object từ bucket thành file.
Tham số
<PATH-TO-LOCAL-FILE>
là đường dẫn lưu file
<KEY-NAME>
là đường dẫn đến file trong bucket
Lấy thông tin một object theo đường dẫn
Ví dụ lấy thông tin file
smile.png
tại thư mụcemoji
Lấy các thông tin của object như: name, content-type, last_modified ...
Danh sách phiên bản của một object
Khi bucket bật chức năng versioning, người dùng có thể list ra tất cả các version của object.
Xoá
1. Xoá file thông thường
2. Xoá một version của file
Áp dụng trong trường hợp bucket versioning được bật
3. Xoá file sử dụng xác thực nhiều bước (Multi-Factor Authentication)
Sử dụng trong trường hợp tính năng MFA Authentication được cài đặt. Khi thực hiện xoá file, cần cung cấp một MFA token hợp lệ được sinh ra bởi trình quản lý MFA token đã được cài đặt trên thiết bị của bạn trước đó.
Xoá file thông thường
Xoá một version của file
Xoá file sử dụng xác thực nhiều bước
Tham số
<VERSION-ID>
là version_id của object
<MFA-TOKEN>
là multi-factor token hợp lệ tại thời điểm xoá
Sao chép
Tham số
<DST_BUCKET>
là bucket đích muốn copy tới, bạn có thể copy file tới bucket khác hoặc cùng một bucket
<DST_OBJECT>
là đường dẫn file đích muốn copy tới
<SRC_OBJECT>
là đường dẫn file nguồn
<SRC_BUCKET>
là tên bucket nguồn
giá trị preserve_acl
là True
để chỉ định file đích có ACL giống với file nguồn.
Quản lý object ACL
Get
Set
Tham số
<CANNED_ACL>
thuộc một trong các giá trị sau:
private
Chủ sở hữu có toàn quyền (FULL_CONTROL), không ai khác có quyền truy cập (mặc định)
public-read
Chủ sở hữu có toàn quyền (FULL_CONTROL), Tất cả người dùng khác có quyền đọc (READ)
public-read-write
Chủ sở hữu có toàn quyền (FULL_CONTROL), Tất cả người dùng khác có quyền đọc (READ) và ghi (WRITE)
authenticated-read
Chủ sở hữu có toàn quyền (FULL_CONTROL), Tất cả người dùng đăng nhập khác có quyền đọc (READ)
Tagging
Với tagging, người dùng có thể sủ dụng gán các tag (thẻ) cho object. Khi cần có thể lọc, tìm kiếm, phần quyền dựa theo tag.
Get tags hiện có
Đặt tags
Chia sẻ
Ví dụ tạo link chia sẻ file emoji/smile.png có hiệu lực trong 1 giờ (3600 giây)
Tạo link file để client upload file
Người dùng sử dụng tính năng này để generate ra url trên server, sau đó client sử dụng link để thực hiện tao thác upload object lên SimpleStorage.
Khi đã có được link tạo ra từ server, các client có thể sử dụng thư viện hoặc câu lệnh để thực hiện việc upload. Ví dụ dưới đây sử dụng câu lệnh curl trên linux.
Với link không có metadata thì sử dụng lệnh duới đây
Với link có metadata thì cần thêm header để đẩy thêm header lên server.
Chú ý
Khi sử dụng tính năng này, cần chú ý khi sử dụng presigned-url, số lượng header được sinh ra ở trong câu lệnh presigned-url sẽ phải có tương ứng với cả lượng header khi sử dựng các client để upload file lên server.
Ví dụ ở dưới khi gen code server, có 2 header là Content-Type và x-amz-acl thì khi sử dụng các client, ví dụ như ở trên là sử dụng lệnh curl thì cũng phải có 2 header đó là Content-Type và x-amz-acl.
Nếu không có header tương ứng giữa presigned-url và client khi upload lên sẽ có thể xảy ra 1 trong 2 trường hợp sau:
Sinh ra lỗi 400 bad request khi sử dụng 1 các tool client như curl
Sinh ra lỗi báo CORS ở trình duyệt đến domain s3.xorcloud.net khi sử dụng các sdk như javascript, nodejs
Object Lock
Đây là tính năng giúp bảo vệ dữ liệu trên hệ thống Simple Storage, tính năng này sẽ chống lại việc xóa dữ liệu. Kể cả trong trường hợp cố tình hay vô ý.
Simple Storage cung cấp 2 cách để quản lý thời gian khóa Object
Retention period : là việc tạm thời khóa dữ liệu trong 1 khoảng thời gian chỉ định, khi qua khoảng thời gian này thì object sẽ có thể được xóa. Khoảng thời gian này có thể theo số lượng ngày hoặc năm
Legal hold : là việc khóa dữ liệu giống với retention period chỉ khác là không có giới hạn thời gian, trừ khi là muốn tự tay xóa retention
Simple Storage cung cấp 2 mode để thực hiện object Lock trong Retention period
Governance : ở mode này có thể bảo vệ dữ liệu khỏi phần lớn người sử dụng khỏi việc xóa dữ liệu, tuy nhiên vẫn sẽ có một số người sử dụng với đặc quyền có thể xóa với việc cho phép người có quyền s3:BypassGovernanceRetention
Compliance : mở mode này không một ai có thể xóa được dữ liệu trong khoảng thời gian được chỉ định, kể cả với user có quyền cao nhất
Điều kiện để sử dụng tính năng
Phải enable tính năng bucket versioning
Phải enable tính năng Object Lock khi tạo bucket , các bucket đã tạo rồi không thể enable tính năng này nữa
Last updated