帮你快速理解、总结文档立即下载

设置存储桶策略

最近更新时间:2026-10-21 18:34:05
我的收藏
为高性能桶设置存储桶策略(PUT Bucket Policy),通过声明式的授权语句控制账号对桶及对象的访问权限。该接口属于控制面,使用基础凭证签名,不走 session。

注意事项

Resource 必须精确匹配当前请求的桶,高性能桶的资源形态为 qcs::cosrapid:<Region>:uid/<APPID>:<BucketName>-x--<APPID>/*;指向其他桶、跨地域或通配 * 均会被拒绝(InvalidArgument)。
Principal 的 key 仅支持 qcs 与 service;qcs 形如 qcs::cam::uin/<主账号uin>:uin/<子账号uin>。
Effect 取值为 allow 或 deny;Action 原样透传 CAM。
put_bucket_policy 会以本次提交的策略整体覆盖桶上原有策略,而非增量合并,需提交完整的目标策略集合。
仅桶所属账号下获得授权的身份可调用。未获授权时返回 403 AccessDenied;请求已获授权但所属账号与桶所属账号不符时,返回 405 MethodNotAllowed。
设置存储桶策略属于控制面接口,使用基础凭证签名,不走 session。

请求

方法原型

def put_bucket_policy(self, Bucket, Policy, **kwargs)

参数说明

参数名称
参数描述
类型
是否必选
Bucket
高性能桶完整名称,格式为 <BucketName>-x--<APPID>
string
是
Policy
桶策略内容,可为 JSON 字符串或 JSON dict
string / dict
是
kwargs
可选请求参数,使用本文列出的参数
dict
否
策略字段:
字段
参数描述
类型
是否必选
Version
策略语法版本,通常为 2.0
string
否
Statement
授权语句列表
list
是
Statement.Principal
被授权者,key 仅支持 qcs 与 service;qcs 形如 qcs::cam::uin/<主账号uin>:uin/<子账号uin>
dict
是
Statement.Action
授权的操作列表,形如 name/cos:CreateSession、name/cos:GetObject
list
是
Statement.Effect
授权效果,取值 allow 或 deny(大小写不敏感)
string
是
Statement.Resource
授权作用的资源,需精确匹配当前请求的桶
list
是
Statement.Condition
生效条件,原样透传 CAM
dict
否
Statement.Sid
语句标识符
string
否

响应

参数名称
参数描述
类型
None
设置成功无返回内容,对应 HTTP 204
None

错误码

本接口遵循统一的错误响应和错误码,详情请参见 错误码文档。

实际案例

# -*- coding=utf-8 -*-
import os
from qcloud_cos import CosConfig, CosS3Client

# 高性能桶经 VPC 内网 HTTP 80 端口接入,SDK 的网关 DNS 负载均衡也仅对 HTTP 请求生效;SDK 默认 https,此处需显式指定 http。
config = CosConfig(
Scheme='http',
Region='ap-guangzhou',
SecretId=os.environ['COS_SECRET_ID'],
SecretKey=os.environ['COS_SECRET_KEY'],
Token=os.environ.get('COS_SECURITY_TOKEN'),
EnableRapidDomain=True)
client = CosS3Client(config)

policy = {
'version': '2.0',
'Statement': [
{
'Sid': 'allow-get-and-session',
'Effect': 'allow',
'Principal': {
'qcs': ['qcs::cam::uin/100000000001:uin/100000000011'],
},
'Action': [
'name/cos:CreateSession',
'name/cos:GetObject',
],
'Resource': [
'qcs::cosrapid:ap-guangzhou:uid/1250000000:examplebucket-x--1250000000/*',
],
},
],
}
client.put_bucket_policy(Bucket='examplebucket-x--1250000000', Policy=policy)
print('bucket policy set')