tencent cloud

对象存储

动态与公告
产品动态
产品公告
产品简介
产品概述
功能概览
应用场景
产品优势
基本概念
地域和访问域名
规格与限制
产品计费
计费概述
计费方式
计费项
免费额度
计费示例
查看和下载账单
欠费说明
常见问题
快速入门
控制台快速入门
COSBrowser 快速入门
用户指南
创建请求
存储桶
对象
数据管理
批量处理
全球加速
监控与告警
运维中心
数据处理
内容审核
智能工具箱
数据工作流
应用集成
工具指南
工具概览
环境安装与配置
COSBrowser 工具
COSCLI 工具
COSCMD 工具
COS Migration 工具
FTP Server 工具
Hadoop 工具
COSDistCp 工具
HDFS TO COS 工具
GooseFS-Lite 工具
在线辅助工具
自助诊断工具
实践教程
概览
访问控制与权限管理
性能优化
使用 AWS S3 SDK 访问 COS
数据容灾备份
域名管理实践
图片处理实践
COS 音视频播放器实践
工作流实践
数据直传
内容审核实践
数据安全
数据校验
大数据实践
COS 成本优化解决方案
在第三方应用中使用 COS
迁移指南
本地数据迁移至 COS
第三方云存储数据迁移至 COS
以 URL 作为源地址的数据迁移至 COS
COS 之间数据迁移
Hadoop 文件系统与 COS 之间的数据迁移
数据湖存储
云原生数据湖
元数据加速
数据加速器 GooseFS
数据处理
数据处理概述
图片处理
媒体处理
内容审核
文件处理
文档处理
故障处理
获取 RequestId 操作指引
通过外网上传文件至 COS 缓慢
访问 COS 时返回403错误码
资源访问异常
POST Object 常见异常
API 文档
简介
公共请求头部
公共响应头部
错误码
请求签名
操作列表
Service 接口
Bucket 接口
Object 接口
批量处理接口
数据处理接口
任务与工作流
内容审核接口
云查毒接口
SDK 文档
SDK 概览
准备工作
Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Flutter SDK
Go SDK
iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
React Native SDK
小程序 SDK
错误码
鸿蒙(Harmony) SDK
终端 SDK 质量优化
安全与合规
数据容灾
数据安全
访问管理
常见问题
热门问题
一般性问题
计费计量问题
域名合规问题
存储桶配置问题
域名和 CDN 问题
文件操作问题
日志监控问题
权限管理问题
数据处理问题
数据安全问题
预签名 URL 问题
SDK 类问题
工具类问题
API 类问题
服务协议
Service Level Agreement
隐私政策
数据处理和安全协议
联系我们
词汇表

访问控制

PDF
聚焦模式
字号
最后更新时间: 2025-09-02 10:08:25

简介

本文档提供关于存储桶、对象的访问控制列表(ACL)的相关 API 概览以及 SDK 示例代码。
存储桶 ACL
API
操作名
操作描述
设置存储桶 ACL
设置指定存储桶的访问权限控制列表(ACL)
查询存储桶 ACL
查询指定存储桶的访问权限控制列表(ACL)
对象 ACL
API
操作名
操作描述
设置对象 ACL
设置存储桶中某个对象的访问控制列表
查询对象 ACL
查询对象的访问控制列表

存储桶 ACL

设置存储桶 ACL

功能说明

设置指定存储桶的访问权限控制列表(PUT Bucket acl)。该操作是覆盖操作,会覆盖已有的权限设置。ACL 包括预定义权限策略(CannedAccessControlList)或者自定义的权限控制(AccessControlList)。两类权限当同时设置时将忽略预定义策略,以自定义策略为主。

方法原型

CosResult PutBucketACL(const PutBucketACLReq& request, PutBucketACLResp* response);

请求示例

qcloud_cos::CosConfig config("./config.json");
qcloud_cos::CosAPI cos(config);
std::string bucket_name = "examplebucket-1250000000";

// PutBucketACLReq 的构造函数需要传入 bucket_name
qcloud_cos::PutBucketACLReq req(bucket_name);
qcloud_cos::PutBucketACLResp resp;

// 设置 ACL 配置(可以通过 Body、Header 两种方式,但只能二选一,否则会有冲突)
// 1.通过 header 设置 ACL
req.SetXCosAcl("public-read-write");

// 2.通过 body 设置 ACL
qcloud_cos::Owner owner = {"qcs::cam::uin/00000000001:uin/00000000001", "qcs::cam::uin/00000000001:uin/00000000001" };
qcloud_cos::Grant grant;
req.SetOwner(owner);
grant.m_grantee.m_type = "Group";
grant.m_grantee.m_uri = "http://cam.qcloud.com/groups/global/AllUsers";
grant.m_perm = "READ";
req.AddAccessControlList(grant);

qcloud_cos::PutBucketACLResp resp;
qcloud_cos::CosResult result = cos.PutBucketACL(req, &resp);

if (result.IsSucc()) {
// 请求成功
} else {
// 请求失败,调用 CosResult 的成员函数输出错误信息,例如 requestID 等
}

参数说明

参数
参数描述
类型
是否必填
req
PutBucketACL 操作的请求
PutBucketACLReq
resp
PutBucketACL 操作的响应
PutBucketACLResp
PutBucketACLReq 提供以下成员函数:
// 定义 Bucket 的 ACL 属性,有效值:private,public-read-write,public-read
// 默认值:private
void SetXCosAcl(const std::string& str);

// 赋予被授权者读的权限.格式:x-cos-grant-read: id=" ",id=" ".
// 当需要给子账号授权时,id="qcs::cam::uin/<OwnerUin>:uin/<SubUin>"
// 当需要给主账号授权时,id="qcs::cam::uin/<OwnerUin>:uin/<OwnerUin>"
void SetXCosGrantRead(const std::string& str);

// 赋予被授权者写的权限,格式:x-cos-grant-write: id=" ",id=" "./
// 当需要给子账号授权时,id="qcs::cam::uin/<OwnerUin>:uin/<SubUin>",
// 当需要给主账号授权时,id="qcs::cam::uin/<OwnerUin>:uin/<OwnerUin>"
void SetXCosGrantWrite(const std::string& str);

// 赋予被授权者读写权限.格式:x-cos-grant-full-control: id=" ",id=" ".
// 当需要给子账号授权时,id="qcs::cam::uin/<OwnerUin>:uin/<SubUin>",
// 当需要给主账号授权时,id="qcs::cam::uin/<OwnerUin>:uin/<OwnerUin>"
void SetXCosGrantFullControl(const std::string& str);

// Bucket 持有者 ID
void SetOwner(const Owner& owner);

// 设置被授权者信息与权限信息
void SetAccessControlList(const std::vector<Grant>& grants);

// 添加单个 Bucket 的授权信息
void AddAccessControlList(const Grant& grant);

注意
SetXCosAcl、SetXCosGrantRead、SetXCosGrantWrite、SetXCosGrantFullControl 这类接口与 SetAccessControlList、AddAccessControlList 不可同时使用。因为前者实际是通过设置 HTTP Header 实现,而后者是在 Body 中添加了 XML 格式的内容,二者只能二选一。 SDK 内部优先使用第一类。
该请求涉及到的类定义如下:
struct Owner {
// 存储桶持有者信息
std::string m_id; // owner 的完整 ID,格式为:qcs::cam::uin/<OwnerUin>:uin/<SubUin>
std::string m_display_name; // owner 的描述
};

struct Grantee {
// type 类型可以为 RootAccount, SubAccount
// 当 type 类型为 RootAccount 时,可以在 id 中 uin 填写账号 ID,也可以用 anyone(指代所有类型用户)代替 uin/<OwnerUin> 和 uin/<SubUin>
// 当 type 类型为 RootAccount 时,uin 代表主账号,Subaccount 代表子账号
std::string m_type;
std::string m_id; // qcs::cam::uin/<OwnerUin>:uin/<SubUin>
std::string m_display_name; // 非必选
std::string m_uri;
};

struct Grant {
Grantee m_grantee; // 被授权者资源信息
std::string m_perm; // 指明授予被授权者的权限信息,可选值"READ","WRITE","FULL_CONTROL"
};


查询存储桶 ACL

功能说明

查询指定存储桶的访问权限控制列表。

方法原型

CosResult GetBucketACL(const GetBucketACLReq& req, GetBucketACLResp* resp)

请求示例

qcloud_cos::CosConfig config("./config.json");
qcloud_cos::CosAPI cos(config);
std::string bucket_name = "examplebucket-1250000000";

qcloud_cos::GetBucketACLReq req(bucket_name);
qcloud_cos::GetBucketACLResp resp;
qcloud_cos::CosResult result = cos.GetBucketACL(req, &resp);

if (result.IsSucc()) {
// 请求成功,调用 resp 的成员函数获取返回内容
} else {
// 请求失败,可以调用 CosResult 的成员函数输出错误信息,例如 requestID 等
}


参数说明

参数
参数描述
类型
是否必填
req
GetBucketACL 操作的请求
GetBucketACLReq
resp
GetBucketACL 操作的响应
GetBucketACLResp
GetBucketACLResp 提供以下成员函数:
std::string GetOwnerID();
std::string GetOwnerDisplayName();
std::vector<Grant> GetAccessControlList();

对象 ACL

设置对象 ACL

功能说明

设置存储桶中某个对象的访问控制列表。
注意
当前访问策略条目限制为1000条,如果您不需要进行对象 ACL 控制,请不要设置,默认继承 Bucket 权限。
ACL 包括预定义权限策略(CannedAccessControlList)或者自定义的权限控制(AccessControlList)。两类权限当同时设置时将忽略预定义策略,以自定义策略为主。

方法原型

CosResult PutObjectACL(const PutObjectACLReq& req, PutObjectACLResp* resp)

请求示例

qcloud_cos::CosConfig config("./config.json");
qcloud_cos::CosAPI cos(config);

std::string bucket_name = "examplebucket-1250000000";
std::string object_name = "test";

// 1 设置 ACL 配置(通过 Body, 设置 ACL 可以通过 Body、Header 两种方式,但只能二选一,否则会有冲突)
{
qcloud_cos::PutObjectACLReq req(bucket_name, object_name);
qcloud_cos::Owner owner = {"qcs::cam::uin/xxxxx:uin/xxx", "qcs::cam::uin/xxxxxx:uin/xxxxx" };
qcloud_cos::Grant grant;
req.SetOwner(owner);
grant.m_grantee.m_type = "Group";
grant.m_grantee.m_uri = "http://cam.qcloud.com/groups/global/AllUsers";
grant.m_perm = "READ";
req.AddAccessControlList(grant);

qcloud_cos::PutObjectACLResp resp;
qcloud_cos::CosResult result = cos.PutObjectACL(req, &resp);
if (result.IsSucc()) {
// 请求成功
} else {
// 请求失败,可以调用 CosResult 的成员函数输出错误信息,例如 requestID 等
}
}

// 2 设置 ACL 配置(通过 Header, 设置 ACL 可以通过 Body、Header 两种方式,但只能二选一,否则会有冲突)
{
qcloud_cos::PutObjectACLReq req(bucket_name, object_name);
req.SetXCosAcl("public-read");

qcloud_cos::PutObjectACLResp resp;
qcloud_cos::CosResult result = cos.PutObjectACL(req, &resp);
if (result.IsSucc()) {
// 请求成功
} else {
// 请求失败,可以调用 CosResult 的成员函数输出错误信息,例如 requestID 等
}
}

参数说明

参数
参数描述
类型
是否必填
req
PutObjectACL 操作的请求
PutObjectACLReq
resp
PutObjectACL 操作的响应
PutObjectACLResp
PutObjectACLReq 包含以下成员函数:
// 定义 Object 的 ACL 属性,有效值:private,public-read
// 默认值:private
void SetXCosAcl(const std::string& str);

// 赋予被授权者读的权限。格式:id="[OwnerUin]"
void SetXCosGrantRead(const std::string& str);

// 赋予被授权者所有的权限。格式:id="[OwnerUin]"
void SetXCosGrantFullControl(const std::string& str);

// Object 持有者 ID
void SetOwner(const Owner& owner);

// 设置被授权者信息与权限信息
void SetAccessControlList(const std::vector<Grant>& grants);

// 添加单个 Object 的授权信息
void AddAccessControlList(const Grant& grant);

注意
SetXCosAcl/SetXCosGrantRead/SetXCosGrantWrite/SetXCosGrantFullControl 这类接口与 SetAccessControlList/AddAccessControlList 不可同时使用。因为前者实际是通过设置 HTTP Header 实现,而后者是在Body 中添加了 XML 格式的内容,二者只能二选一。SDK 内部优先使用第一类。
ACLRule 定义如下:
struct Grantee {
// type 类型可以为 RootAccount, SubAccount
// 当 type 类型为 RootAccount 时,可以在 id 中 uin 填写账号 ID,也可以用 anyone(指代所有类型用户)代替 uin/<OwnerUin> 和 uin/<SubUin>
// 当 type 类型为 RootAccount 时,uin 代表主账号账号,Subaccount 代表子账号账号
std::string m_type;
std::string m_id; // qcs::cam::uin/<OwnerUin>:uin/<SubUin>
std::string m_display_name; // 非必选
std::string m_uri;
};

struct Grant {
Grantee m_grantee; // 被授权者资源信息
std::string m_perm; // 指明授予被授权者的权限信息,可选值"READ","WRITE","FULL_CONTROL"
};


查询对象 ACL

功能说明

查询对象的访问控制列表。

方法原型

CosResult GetObjectACL(const GetObjectACLReq& req, GetObjectACLResp* resp)

请求示例

qcloud_cos::CosConfig config("./config.json");
qcloud_cos::CosAPI cos(config);

std::string bucket_name = "examplebucket-1250000000";
std::string object_name = "exampleobject";

// GetObjectACLReq 的构造函数需要传入 Object_name
qcloud_cos::GetObjectACLReq req(bucket_name, object_name);
qcloud_cos::GetObjectACLResp resp;
qcloud_cos::CosResult result = cos.GetObjectACL(req, &resp);

if (result.IsSucc()) {
// 请求成功,调用 resp 的成员函数获取返回内容
} else {
// 请求失败,可以调用 CosResult 的成员函数输出错误信息,例如 requestID 等
}

参数说明

参数
参数描述
类型
是否必填
req
GetObjectACL 操作的请求
GetObjectACLReq
resp
GetObjectACL 操作的响应
GetObjectACLResp
GetObjectACLResp 包含以下成员函数:
std::string GetOwnerID();
std::string GetOwnerDisplayName();
std::vector<Grant> GetAccessControlList();


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈