Skip to content

Tài liệu giúp bạn quản lý bucket khi sử dụng tính năng Object Storage tại OMZ Cloud.

Trước khi tương tác với bucket, hãy đảm bảo rằng bạn đã kết nối với object storage thành công tại đây

1. Chọn bucket

  • Lấy danh sách tên:
    for bucket in s3.buckets.all():
    print(bucket.name)
    
  • Dùng dòng lệnh sau để chọn bucket với BUCKET_NAME của bạn:
    bucket = s3.Bucket('BUCKET_NAME')
    

2. Danh sách file

  • Lấy ra danh sách các file có trong bucket, mặc định sẽ trả về tối đa 1000 kết quả.
    result = s3client.list_objects( Bucket="BUCKET_NAME" )
    print(result)
    

3. 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:

    acl = s3client.get_bucket_acl(Bucket='BUCKET_NAME')
    print(acl)
    
  • SET:

    bucket = s3.Bucket('BUCKET_NAME')
    bucket.Acl().put(ACL='ACCESS')
    
  • Trong đó, ACCESS là 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 cần đăng nhập để đọc (WRITE)

4. 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 Object Storage của OMZCloud.

  • 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 POLICY:

    bucket_policy = s3client.get_bucket_policy(Bucket='BUCKET_NAME')
    print(bucket_policy)
    
  • SET POLICY:

    bucket_name = 'BUCKET_NAME'
    bucket_policy = {
        'Version': '2012-10-17',
        'Statement': [
            {
                'Effect': 'Allow',
                'Principal': {
                    'AWS': ['arn:aws:iam:::user/USER_UID']
                },
                'Action': [
                    's3:ACTION_NAME',
                ],
                'Resource': [
                    'arn:aws:s3:::BUCKET_NAME',
                    'arn:aws:s3:::BUCKET_NAME/*'
                ]
            },
            {
                'Effect': 'Deny',
                'Principal': {
                    'AWS': ['arn:aws:iam:::user/USER_UID']
                },
                'Action': [
                    's3:ACTION_NAME',
                    's3:ACTION_NAME'
                ],
                'Resource': [
                    'arn:aws:s3:::BUCKET_NAME',
                    'arn:aws:s3:::BUCKET_NAME/*'
                ]
            }
        ]
    }
    bucket_policy = json.dumps(bucket_policy)
    s3client.put_bucket_policy(Bucket=BUCKET_NAME, Policy=bucket_policy)
    

    Trong policy sẽ có các thuộc tính sau:

  • Version: Đây là xác định version của policy, phần này không thể thay đổi.

  • Statement: Đâ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 thành phần con của Statement sẽ có những phần sau:

    • Effect: giá trị là Allow (Cho phép) hoặc Deny (Từ chối), quyết định quyền truy cập vào tài nguyên

    • Principal: là định danh của người dùng được phân quyền, trong đó USER_UID là ID của người dùng được phân quyền

    • Action: 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. Các Action có thể là một 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ác

      • arn: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
  • DELETE POLICY:

    s3client.delete_bucket_policy(Bucket='BUCKET_NAME')
    

    Trong đó BUCKET_NAME là tên của bucket

5. 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
  • GET CORS:
    bucket_cors = s3client.get_bucket_cors(Bucket='BUCKET_NAME')
    print(bucket_cors)
    
  • SET CORS: ví dụ với trang https://resources.omzcloud.vn
    bucket = s3.Bucket('BUCKET_NAME')
    bucket_cors = bucket.Cors()
    config = {
        'CORSRules': [
            {
                'AllowedMethods': ['GET'],
                'AllowedOrigins': ['https://resources.omzcloud.vn'],
                'AllowedHeaders': ['*'],
                'MaxAgeSeconds': 300
            }
        ]
    }
    bucket_cors.put(CORSConfiguration=config)
    
  • DELETE CORS:
    bucket = s3.Bucket('BUCKET_NAME')
    bucket_cors = bucket.Cors()
    bucket_cors.delete()
    
    Trong đó BUCKET_NAME là tên của bucket

6. Quản lý Bucket Versioning

  • Bucket Versioning: khi được bật Object 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 đó.

  • version hiện tại:

    bucket_versioning = s3.BucketVersioning('BUCKET_NAME')
    print(bucket_versioning.status)
    
  • Bật/Tắt bucket versioning:

    bucket_versioning = s3.BucketVersioning('BUCKET_NAME')
    bucket_versioning.enable()
    bucket_versioning.suspend()