在默认情况下,腾讯云对象存储(Cloud Object Storage,COS)中的资源(存储桶和对象)都是私有的。只有腾讯云主账号(资源拥有者)才可以访问、修改存储桶和对象,其他用户(子账号、匿名用户等),在未授权的情况下都无法直接通过 URL 访问对象。
创建腾讯云子账号后,您可以通过访问策略为子账号授权;若需要将资源开放给非腾讯云用户,可以通过设置资源(存储桶、对象、目录)的公共权限(公有读)实现。
授予访问权限,指的是用户可以决定什么人、在何种条件下、对哪些资源、执行具体操作的控制能力组合。因此描述一个访问权限行为,通常包括四个元素:身份、资源、操作、条件(可选)。
用户申请腾讯云账号时,系统会创建一个用于登录腾讯云服务的主账号身份。腾讯云主账号可通过用户管理功能对具有不同职责的分类用户进行管理。用户类型包括 协作者、消息接收人、子用户和角色 等,具体定义请参见访问管理的 用户类型 和 词汇表 文档。
说明:假设您希望为企业的某位同事进行授权,首先需要在 访问管理控制台 创建一个子用户,选择 存储桶策略、ACL 或 用户策略 中的一个或多个途径为子用户设置具体的权限。
存储桶 Bucket 和对象 Object 是对象存储的基本资源,其中文件夹是一种特殊的对象,您可以通过文件夹对文件夹下的对象进行授权,详情请参见 设置文件夹权限。
此外,存储桶和对象都有与之相关的子资源。
存储桶的子资源包括:
对象的子资源包括:
对象存储提供了一系列针对资源的 API 操作,详情请参见 操作列表 文档。
可选项,权限生效的条件,例如 vpc、vip 等,详情请参见访问管理的 生效条件。
说明:在默认情况下,腾讯云对象存储 COS 中的资源都是私有的。
COS 提供多种设置权限的方式实现访问控制,包括存储桶策略、用户策略(CAM 策略)、存储桶 ACL 和对象 ACL。
按照策略设置的出发点,可以分为基于资源和基于用户两种方式;按照授权方式,可以分为策略和 ACL 两种方式。
分类方法一:基于资源 vs 基于用户
分类方法二:策略 vs ACL
基于资源的策略包括存储桶策略、存储桶 ACL 和对象 ACL 三类,支持在存储桶和对象维度分别进行访问控制,具体请参照下表:
维度 | 类型 | 描述方式 | 支持的身份 | 支持的资源粒度 | 支持的操作 | 支持的效力 |
---|---|---|---|---|---|---|
Bucket | 访问策略语言(Policy) | JSON | 子账号、角色、腾讯云服务、其他主账号、匿名用户等 | 存储桶、对象、前缀等 | 每一个具体的操作 | 允许/显式拒绝 |
Bucket | 访问控制列表(ACL) | XML | 其他主账号、匿名用户 | 存储桶 | 经过整理的读写权限 | 仅允许 |
Object | 访问控制列表(ACL) | XML | 其他主账号、匿名用户 | 对象 | 经过整理的读写权限 | 仅允许 |
存储桶策略(Bucket Policy)使用 JSON 语言描述,支持向匿名身份或腾讯云任何 CAM 账户授予对存储桶、存储桶操作、对象或对象操作的权限,在腾讯云 COS 中存储桶策略可以用于管理该存储桶内的几乎所有操作,推荐您使用存储桶策略来管理通过 ACL 无法表述的访问策略。更多内容可参考 存储桶策略 文档。
注意:腾讯云主账号具备对其名下资源(包括存储桶)的最大权限,您虽然可以在存储桶策略中限制几乎所有操作,但主账号始终具备 PUT Bucket Policy 操作的权限,主账号调用该操作不检查存储桶策略。
以下是一个许可匿名用户访问位于广州的存储桶examplebucket-1250000000中所有对象的策略,无需签名校验即可下载存储桶中的所有对象(GetObject),即任何知晓 URL 的匿名用户都可以下载对象(类似于公有读方式):
{
"Statement": [
{
"Principal": "*",
"Effect": "Allow",
"Action": ["cos:GetObject"],
"Resource": ["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]
}
],
"Version": "2.0"
}
访问控制列表(ACL)使用 XML 语言描述,是与资源关联的一个指定被授权者和授予权限的列表,每个存储桶和对象都有与之关联的 ACL,支持向匿名用户或其他腾讯云的主账号授予基本的读写权限。更多内容可参考 ACL 文档。
注意:资源的拥有者始终对资源具备 FULL_CONTROL 权限,而无论下发的 ACL 中是否描述了此项。
以下是一个存储桶 ACL 的示例,描述了存储桶拥有者(用户 UIN:100000000001)的完全控制权限:
<AccessControlPolicy>
<Owner>
<ID>qcs::cam::uin/100000000001:uin/100000000001</ID>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="RootAccount">
<ID>qcs::cam::uin/100000000001:uin/100000000001</ID>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
以下是一个对象 ACL 的示例,描述了对象拥有者(用户 UIN:100000000001)的完整控制权限,并授予了所有人可读(匿名用户公有读)的权限:
<AccessControlPolicy>
<Owner>
<ID>qcs::cam::uin/100000000001:uin/100000000001</ID>
</Owner>
<AccessControlList>
<Grant>
<Grantee>
<ID>qcs::cam::uin/100000000001:uin/100000000001</ID>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
<Grant>
<Grantee>
<URI>http://cam.qcloud.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
用户可以在 CAM 中,对于主账号名下的不同类型用户,授予不同的权限。
用户策略与存储桶策略的最大差别是:用户策略只描述效力(Effect)、操作(Action)、资源(Resource)和条件(Condition,可选),不描述身份(Principal)。因此用户策略需要撰写完成后,再对子用户、用户组或角色执行关联操作,以及用户策略不支持将操作和资源权限授予匿名用户。
您可以 使用预设策略进行关联授权,也可以 自行撰写用户策略 后关联到指定的身份,来实现对名下用户的访问管理。更多内容可参考 用户策略 文档。
以下是一个授权位于广州的存储桶 examplebucket-1250000000 所有 COS 操作的策略,您需要将策略保存后再关联到 CAM 子用户、用户组或角色方可生效:
{
"Statement": [
{
"Effect": "Allow",
"Action": ["cos:*"],
"Resource": [
"qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*",
"qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/"
]
}
],
"Version": "2.0"
}
本页内容是否解决了您的问题?