访问控制
在默认情况下,腾讯云对象存储(Cloud Object Storage,COS)中的资源(存储桶和对象)都是私有的,只有腾讯云主账号(资源拥有者)才可以访问、修改存储桶和对象,其他用户(子账号、匿名用户等)在未授权的情况下都无法直接通过URL访问对象。创建腾讯云子账号后,您可以通过访问策略为子账号授权,若需要将资源开放给非腾讯云用户,可以通过设置资源(存储桶、对象、目录)的公共权限(公有读)实现
控制元素
授予访问权限指的是用户可以决定什么人、在何种条件下、对哪些资源、执行具体操作的控制能力组合,因此描述一个访问权限行为,通常包括四个元素:身份、资源、操作、条件(可选)
权限元素
A、腾讯云的身份(Principal)
用户申请腾讯云账号时,系统会创建一个用于登录腾讯云服务的主账号身份,腾讯云主账号可通过用户管理功能对具有不同职责的分类用户进行管理,用户类型包括协作者、消息接收人、子用户和角色等
B、对象存储的资源(Resource)
存储桶Bucket和对象Object是对象存储的基本资源,其中文件夹是一种特殊的对象,您可以通过文件夹对文件夹下的对象进行授权,此外存储桶和对象都有与之相关的子资源,存储桶的子资源包括
-
acl和policy:存储桶的访问控制信息
-
website:存储桶的静态网站托管配置
-
tagging:存储桶的标签信息
-
cors:存储桶的跨域配置信息
-
lifecycle:存储桶的生命周期配置信息
对象的子资源包括:
-
acl:对象的访问控制信息
-
restore:归档类型对象的恢复配置
C、对象存储的操作(Action)
对象存储提供了一系列针对资源的API操作,具体可以参考API操作文档:
https://cloud.tencent.com/document/product/436/10111
D、对象存储的条件(Condition,可选)
可选项,权限生效的条件,例如:vpc、vip等,详情请参见访问管理的生效条件:
https://cloud.tencent.com/document/product/598/10608
私有原则
在默认情况下,腾讯云对象存储COS中的资源都是私有的:
-
使用腾讯云访问管理(Cloud Access Management,CAM)账号创建存储桶或上传对象时,其父级主账号就是资源拥有者
-
存储桶拥有者的主账号可以授予其他腾讯云主账号上传对象的权限(即跨账号上传),这种情况下对象的拥有者仍然是存储桶拥有者的主账号
-
资源拥有者(创建存储桶资源的腾讯云主账号)具备对该资源的最高权限,资源拥有者可以编辑和修改访问策略,为其他人或匿名用户授予访问权限
控制途径
COS提供多种设置权限的方式实现访问控制,包括存储桶策略、用户策略(CAM策略)、存储桶ACL和对象ACL,具体有以下两种划分方式:
-
按照授权方式:策略、ACL
-
按照策略设置的出发点:基于资源、基于用户
分类方法一:基于资源 vs 基于用户
-
以资源为出发点:将权限关联在具体的资源上,包括存储桶策略、存储桶ACL和对象ACL,在COS控制台或通过COS API配置
-
以用户为出发点:用户策略(CAM 策略),将权限关联在用户上,填写策略时不需要填写用户,需要指定资源、操作、条件等,在CAM控制台 配置
分类方法二:策略 vs ACL
-
策略:用户策略(CAM策略)和存储桶策略都是基于完整的策略语法进行授权的,授权的动作细化到了每个API对应的动作,支持指定允许/拒绝效力
-
ACL:存储桶ACL和对象ACL都是基于访问控制列表(ACL)实现的,ACL是与资源关联的一个指定被授权者和授予权限的列表,对应经过整理和抽象的权限,仅支持指定允许效力
资源策略
基于资源的策略包括存储桶策略、存储桶ACL和对象ACL三类,支持在存储桶和对象维度分别进行访问控制,具体请参照下表:
A、存储桶策略(Bucket Policy)
存储桶策略(Bucket Policy)使用JSON语言描述,支持向匿名身份或腾讯云任何CAM账户授予对存储桶、存储桶操作、对象或对象操作的权限,在腾讯云COS中存储桶策略可以用于管理该存储桶内的几乎所有操作,推荐您使用存储桶策略来管理通过ACL无法表述的访问策略,以下是一个许可匿名用户访问位于广州的存储桶examplebucket-1250000000中所有对象的策略,无需签名校验即可下载存储桶中的所有对象(GetObject),即任何知晓URL的匿名用户都可以下载对象(类似于公有读方式):
{
\\\"Statement\\\": [
{
\\\"Principal\\\": \\\"*\\\",
\\\"Effect\\\": \\\"Allow\\\",
\\\"Action\\\": [\\\"cos:GetObject\\\"],
\\\"Resource\\\": [\\\"qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*\\\"]
}
],
\\\"Version\\\": \\\"2.0\\\"
}
B、访问控制列表(ACL)
访问控制列表(ACL)使用XML语言描述,是与资源关联的一个指定被授权者和授予权限的列表,每个存储桶和对象都有与之关联的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>
C、用户策略
用户可以在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\\\"
}
COS授权
默认情况下对象存储(Cloud Object Storage,COS)的资源(存储桶、对象)都是私有读写,即使获取了对象URL,匿名用户由于未携带签名也无法通过url访问您的资源内容
认证步骤
从注册腾讯云账号开始COS的授权与身份认证流程需要经过这五步:
-
注册腾讯云账号
-
开通COS服务
-
创建授权身份
-
为身份设置权限
-
开始访问与身份认证
认证方式
默认情况下COS存储桶为私有的,无论是通过密钥(永久密钥、临时密钥)访问COS,还是使用预签名URL访问,都要经过身份认证的环节,出于特殊需要,您也可以将存储桶开放为公有读,这是一种有风险的操作,任何用户都可以通过对象URL直接下载对象,不需要经过身份认证
A、使用永久密钥访问
密钥(SecretId/SecretKey)是用户访问腾讯云API进行身份验证时需要用到的安全凭证,可在API密钥管理中获取,每个主账号和子账号都可以创建多个密钥,永久密钥包括SecretId和SecretKey,每个主张号和子账号都可以生成两对永久密钥,永久密钥代表了账号的永久身份,如果不删除则长期有效。
B、使用临时密钥访问
临时密钥包括SecretId、SecretKey和Token,每个主账号和子账号都可以生成多个临时密钥,相比永久密钥,临时密钥具有有效期(默认1800秒),主账号最长可设定有效期为7200秒,子账号最长可设定有效期为129600秒,临时密钥适用于前端直传等临时授权场景,相比永久密钥,分发临时密钥给不受信任的用户,安全性更高
C、使用临时URL访问
对象存储(Cloud Object Storage,COS)支持使用预签名URL进行对象的上传、下载,原理是将签名嵌入URL生成签名链接,您可以通过签名的有效期控制预签名 URL的生效时间
D、使用匿名方式访问
-
将存储桶开放为公有读:您可以在控制台将整个存储桶设置为公有读,这种情况下存储桶中的每个对象都可以通过对象URL被直接下载
-
将对象开放为公有读:您可以在控制台将单个对象设置为公有读,这种情况下,只有该对象可以直接通过URL被下载,其他对象不受影响
-
将文件夹开放为公有读:您可以在控制台将文件夹设置公有读,这种情况下,该文件夹下的所有对象都可以直接通过URL被下载,文件夹之外的对象不受影响
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34177.html