You need to enable JavaScript to run this app.
对象存储

对象存储

复制全文
管理桶配置
管理桶策略(Python SDK)
复制全文
管理桶策略(Python SDK)

桶(Bucket)是 TOS 的全局唯一的命名空间,相当于数据的容器,用来储存对象(Object)数据。TOS 中权限控制通过 IAM Policy、Bucket Policy、桶和对象ACL实现,其中桶策略和 ACL 都是基于 TOS 资源的权限控制策略,桶策略相较于桶 ACL 具备更灵活的权限配置。本文介绍如何设置、获取和删除桶的授权策略(Policy)。

设置桶策略

注意

  • 设置桶策略,您必须具备 tos:PutBucketPolicy 权限,具体操作请参见权限配置指南
  • 设置桶策略,拥有此权限的用户可以任意更改桶策略,并可以通过此权限获取其他权限,建议您谨慎配置。

示例代码

以下代码用于设置桶 bucket-test 的桶策略。

import json

import os
import tos

# 从环境变量获取 AK 和 SK 信息。
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
# your endpoint 和 your region 填写Bucket 所在区域对应的Endpoint。# 以华北2(北京)为例,your endpoint 填写 tos-cn-beijing.volces.com,your region 填写 cn-beijing。
endpoint = "your endpoint"
region = "your region"
bucket_name = "bucket-test"

try:
    # 创建 TosClientV2 对象,对桶和对象的操作都通过 TosClientV2 实现
    client = tos.TosClientV2(ak, sk, endpoint, region)
    # 配置所有用户具备ListBucket的Policy权限
    policy = {
        "Statement": [
            {
                "Sid": "internal public",
                "Effect": "Allow",
                "Action": ["tos:ListBucket"],
                "Principal": "*",
                "Resource": [
                    "trn:tos:::{}/*".format(bucket_name),
                    "trn:tos:::{}".format(bucket_name),
                ],
            }
        ]
    }
    client.put_bucket_policy(bucket_name, policy=json.dumps(policy))
except tos.exceptions.TosClientError as e:
    # 操作失败,捕获客户端异常,一般情况为非法请求参数或网络异常
    print('fail with client error, message:{}, cause: {}'.format(e.message, e.cause))
except tos.exceptions.TosServerError as e:
    # 操作失败,捕获服务端异常,可从返回信息中获取详细错误信息
    print('fail with server error, code: {}'.format(e.code))
    # request id 可定位具体问题,强烈建议日志中保存
    print('error with request id: {}'.format(e.request_id))
    print('error with message: {}'.format(e.message))
    print('error with http code: {}'.format(e.status_code))
    print('error with ec: {}'.format(e.ec))
    print('error with request url: {}'.format(e.request_url))
except Exception as e:
    print('fail with unknown error: {}'.format(e))

获取桶策略

注意

获取桶策略,您必须具备 tos:GetBucketPolicy 权限,具体操作请参见权限配置指南

示例代码

以下代码用于获取桶 bucket-test 的桶策略。

import json

import os
import tos

# 从环境变量获取 AK 和 SK 信息。
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
# your endpoint 和 your region 填写Bucket 所在区域对应的Endpoint。# 以华北2(北京)为例,your endpoint 填写 tos-cn-beijing.volces.com,your region 填写 cn-beijing。
endpoint = "your endpoint"
region = "your region"
bucket_name = "bucket-test"

try:
    # 创建 TosClientV2 对象,对桶和对象的操作都通过 TosClientV2 实现
    client = tos.TosClientV2(ak, sk, endpoint, region)

    resp = client.get_bucket_policy(bucket_name)
    policy_json = json.loads(resp.policy)
    print('Get policy text: {}'.format(policy_json))
except tos.exceptions.TosClientError as e:
    # 操作失败,捕获客户端异常,一般情况为非法请求参数或网络异常
    print('fail with client error, message:{}, cause: {}'.format(e.message, e.cause))
except tos.exceptions.TosServerError as e:
    # 操作失败,捕获服务端异常,可从返回信息中获取详细错误信息
    print('fail with server error, code: {}'.format(e.code))
    # request id 可定位具体问题,强烈建议日志中保存
    print('error with request id: {}'.format(e.request_id))
    print('error with message: {}'.format(e.message))
    print('error with http code: {}'.format(e.status_code))
    print('error with ec: {}'.format(e.ec))
    print('error with request url: {}'.format(e.request_url))
except Exception as e:
    print('fail with unknown error: {}'.format(e))

删除桶策略

注意

删除桶策略,您必须具备 tos:DeleteBucketPolicy 权限,具体操作请参见权限配置指南

示例代码

以下代码用于删除桶 bucket-test 的桶策略。

import json

import os
import tos

# 从环境变量获取 AK 和 SK 信息。
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
# your endpoint 和 your region 填写Bucket 所在区域对应的Endpoint。# 以华北2(北京)为例,your endpoint 填写 tos-cn-beijing.volces.com,your region 填写 cn-beijing。
endpoint = "your endpoint"
region = "your region"
bucket_name = "bucket-test"

try:
    # 创建 TosClientV2 对象,对桶和对象的操作都通过 TosClientV2 实现
    client = tos.TosClientV2(ak, sk, endpoint, region)
    client.delete_bucket_policy(bucket_name)
except tos.exceptions.TosClientError as e:
    # 操作失败,捕获客户端异常,一般情况为非法请求参数或网络异常
    print('fail with client error, message:{}, cause: {}'.format(e.message, e.cause))
except tos.exceptions.TosServerError as e:
    # 操作失败,捕获服务端异常,可从返回信息中获取详细错误信息
    print('fail with server error, code: {}'.format(e.code))
    # request id 可定位具体问题,强烈建议日志中保存
    print('error with request id: {}'.format(e.request_id))
    print('error with message: {}'.format(e.message))
    print('error with http code: {}'.format(e.status_code))
    print('error with ec: {}'.format(e.ec))
    print('error with request url: {}'.format(e.request_url)) 
except Exception as e:
    print('fail with unknown error: {}'.format(e))

相关文档

关于存储桶策略的更多信息,请参见存储桶授权策略管理

最近更新时间:2024.02.04 18:31:03
这个页面对您有帮助吗?
有用
有用
无用
无用