应用场景
在存储桶(Bucket)为私有情况下,只有根用户或有权限的子用户能够读取存储桶内的全部文件(Object),如果其他用户想访问存储桶内文件,例如:
- 某一子用户需要访问存储桶下某一前缀下的全部文件。
- 匿名用户需要临时访问存储桶内的某一文件。
- 限定某一根用户只有在使用某Referer头时才可以访问某一存储桶内的全部文件。
在存储桶为公共读的情况下,任何人(包括匿名)可以访问存储桶中的文件。除通过直接访问外,也可以通过分享链接的模式:通过共享链接或url访问存储桶内文件的场景。
前提条件
开通对象存储(经典版)Ⅰ型服务。
具体操作
存储桶(Bucket)为私有
存储桶(Bucket)为私有时,可以通过以下方式授权他人访问存储桶中的文件:
生成共享链接
- 在自服务控制台,点击需要分享的文件后的分享按钮。
在文件分享弹窗中输入过期时间,取值[1, 9999999]。可以选择开启限制下载速度和限制下载并发数,取值[1,2147483647]。点击生成,然后点击复制即可分享给他人。 - 通过API分享,详见生成共享链接。
设置Bucket Policy
如果某用户需要访问私有Bucket内的全部文件或某一前缀下的文件,通过设置Bucket Policy可以实现。可以通过控制台,在存储桶属性-安全策略中修改,或者通过API接口PUT Bucket Policy实现。
示例1:授权某一子用户(a1为账户a的子用户,账户a的用户ID为aaa11111111)访问example-bucket下以1为前缀的全部文件:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"Usera1GetObject",
"Effect":"Allow",
"Principal":{
"CTYUN":"arn:ctyun:iam::aaa11111111:user/a1"
},
"Action":"oos:GetObject",
"Resource":"arn:ctyun:oos:::example-bucket/1*"
}
]
}
示例2:example-bucket为账户a的Bucket,授权天翼云账户c(用户ID为ccc11111111),仅Referer为https://www.ctyun.cn、https://ctyun.cn开头的请求头可以访问example-bucket内的全部文件。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"UsercGetObject",
"Effect":"Allow",
"Principal":{
"CTYUN":"arn:ctyun:iam::ccc11111111:root"
},
"Action": "oos:GetObject",
"Resource":"arn:ctyun:oos:::example-bucket/*",
"Condition":{
"StringLike":{
"ctyun:Referer":[
"https://www.ctyun.cn/*",
"https://ctyun.cn/*"
]
}
}
}
]
}
存储桶(Bucket)为公共读
存储桶(Bucket)为公共读情况下,任何人(包括匿名)均可访问存储桶内的文件。
除上述通过生成共享链接的分享方式,在Bucket为公共读的情况下,可以通过文件的url地址直接访问文件,构造方式如下:
- https://BucketName.oos-cn.ctyunapi.cn/objectname
- https://oos-cn.ctyunapi.cn/BucketName/objectname
如果存储桶(Bucket)名中包含“.”,则必须使用https://oos-cn.ctyunapi.cn/BucketName/objectname。
示例:为禁止除根账户外的任何人(包括匿名)列举存储桶(Bucket)内文件,仅可下载已知文件名的文件:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ListAllObjects",
"Effect":"Deny",
"Principal":{ "CTYUN": "*" },
"Action":"oos:ListBucket",
"Resource":"arn:ctyun:oos:::example-bucket"
}
]
}