應用場景
在存儲桶(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為//www.daliqc.cn、//daliqc.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":[
"//www.daliqc.cn/*",
"//daliqc.cn/*"
]
}
}
}
]
}
存儲桶(Bucket)為公共讀
存儲桶(Bucket)為公共讀情況下,任何人(包括匿名)均可訪問存儲桶內的文件。
除上述通過生成共享鏈接的分享方式,在Bucket為公共讀的情況下,可以通過文件的url地址直接訪問文件,構造方式如下:
- //BucketName.oos-cn.ctyunapi.cn/objectname
- //oos-cn.ctyunapi.cn/BucketName/objectname
如果存儲桶(Bucket)名中包含“.”,則必須使用//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"
}
]
}