應用場景
所有場景。
前提條件
開通對象存儲(經典版)Ⅰ型服務。
具體操作
避免密碼泄露
當賬戶密碼泄露時,非法用戶可能對OOS資源進行違法操作,或者合法用戶以未授權的方式對OOS資源進行各類操作,這樣會使數據外泄或費用激增,給數據安全帶來極大的威脅。
注意任何時候,都需要保存好自己的密碼不泄露。
阻止公共訪問權限
- 公共讀寫(Public-Read-Write):任何人(包括匿名訪問)都可以對該存儲桶內的文件進行讀/寫/刪除操作(包括Get、Put和Delete Object)。這有可能造成您數據的外泄以及費用激增,若被人惡意寫入違法信息還可能會侵害您的合法權益,除特殊場景外,不建議您配置公共讀寫權限。
注意
如果想使用訪問權限為公共讀寫的存儲桶,請聯系天翼云客服評估審核后開通此功能。
- 公共讀(Public-Read):只有根用戶和具有相應權限的子用戶可以對該Bucket內的Object進行寫操作(包括Put和Delete Object)。任何人(包括匿名訪問)都可以對該Bucket內的Object進行讀操作,這有可能造成您數據的外泄以及費用激增,請慎用該權限。
鑒于公共讀或者公共讀寫權限對OOS資源帶來的數據安全風險和費用考慮,強烈建議您將Bucket權限設置為私有(private)。設置為私有權限后,只有根用戶和具有相應權限的子用戶可以對該Bucket內的文件進行讀寫操作(包括Put、Delete和Get Object),其他人(包括匿名訪問)只有通過Bucket Policy授權或分享鏈接才可訪問該Bucket內的文件。
您可以通過多種方式將Bucket的讀寫權限設置為私有,詳見查看/修改存儲桶屬性或PUT Bucket。
以IAM用戶的方式訪問OOS
一個賬戶可以建立多個子用戶,您可以通過IAM為不同的操作人員創建獨立的IAM子用戶。根據操作人員的職能范圍,授予相應的管理權限。同時建議您也為根用戶創建子用戶,并授予該子用戶管理權限,使用該用戶進行日常管理工作,保護賬戶安全。
創建IAM用戶后,您可以根據IAM用戶進行分組及附加權限,可以參考用戶管理。
對子用戶啟用多因子認證(MFA)
多因子認證(Multi-Factor Authentication,簡稱MFA)是一種簡單安全的二次認證方式,為用戶增加了一層安全保護。
啟用多因子認證可以參考MFA。
STS臨時授權訪問OOS
STS(Security Token Service)是為云計算用戶提供臨時訪問令牌的Web服務。通過STS,可以為第三方應用或用戶頒發一個自定義時效的訪問憑證。第三方應用或用戶可以使用該訪問憑證直接調用OOS API,或者使用OOS提供的SDK來訪問OOS API。
OOS可以為用戶提供臨時訪問密鑰,詳見GetSessionToken。
Bucket Policy
Bucket Policy用于定義OOS資源的訪問權限。通過Bucket Policy,您可以授權另一個賬號訪問或管理整個Bucket或Bucket內的部分資源,或者對同賬號下的不同IAM用戶授予訪問或管理Bucket資源的不同權限。
配置Bucket Policy時,建議遵循權限最小化原則,降低數據的安全風險:
-
避免授權整個Bucket
資源授權過大容易導致用戶數據被非法訪問,所以請避免授權整個Bucket。
-
不授權匿名訪問
允許匿名訪問意味著用戶只需要知道Endpoint和Bucket名稱就可以訪問OOS數據,而Endpoint是可以枚舉的,Bucket名稱也可以從已授權的訪問文件URL中提取。由此可見,授權允許匿名訪問會帶來極大的安全風險。
-
設置合理的Action
通過控制臺Bucket“屬性”>“安全策略”配置Bucket Policy,在Action中授權您業務需求中必須的接口權限,給予授權用戶最小的權限。
-
使用HTTPS訪問
使用HTTPS訪問可以解決網絡中間人攻擊以及域名劫持等問題,使訪問更加安全。
-
限定源IP
如果訪問OOS資源的IP地址是固定的,強烈建議配置Condition中IP Address的ctyun:SourceIp條件鍵,設置訪問IP的白名單/黑名單。
-
對Bucket設置防盜鏈
通過對訪問來源設置白名單/黑名單的機制,避免OOS資源被其他人盜用。
防盜鏈通過請求Header中的Referer地址判斷訪問來源。當瀏覽器向Web服務器發送請求的時候,請求Header中將包含Referer,用于告知Web服務器該請求的頁面鏈接來源。OOS根據瀏覽器附帶的Referer與用戶配置的Referer規則來判斷允許或拒絕此請求,如果Referer一致,則OOS將允許該請求的訪問;如果Referer不一致,則OOS將拒絕該請求的訪問。
示例1:example-bucket的權限為私有,通過Bucket Policy授予名為user-name1的IAM用戶,僅能使用IP地址192.168.143.0/24、Referer為//www.daliqc.cn/、開頭、使用SSL發送的請求可以下載目標存儲空間example-bucket中以1為前綴的文件。
{
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"*",
"Effect":"Allow",
"Principal":{ "CTYUN":"arn:ctyun:iam::accountId:user/user-name1"},
"Action":"oos:GetObject",
"Resource":"arn:ctyun:oos:::example-bucket/1*",
"Condition":{
"StringLike":{
"ctyun:Referer":[
"//www.daliqc.cn/*",
"//daliqc.cn/*"
]
},
"Bool": {
"ctyun:SecureTransport": "true"
},
"IpAddress" : {
"ctyun:SourceIp":"192.168.143.0/24"
}
}
}
]
}
示例2:如果example-bucket的權限為公共讀寫,通過Bucket Policy限制:僅Referer為//www.daliqc.cn、開頭的請求頭寫入。
{
"Version":"2012-10-17",
"Id":"*",
"Statement":[
{
"Sid":"*",
"Effect":"Deny",
"Principal":{ "CTYUN": ["*"] },
"Action":"oos:*",
"Resource":"arn:ctyun:oos:::example-bucket/*",
"Condition":{
"StringNotLike":{
"ctyun:Referer":[
"//www.daliqc.cn/*",
"//daliqc.cn/*"
]
}
}
}
]
}
設置跨域資源共享
跨域資源共享CORS(Cross-Origin Resource Sharing)簡稱跨域訪問,瀏覽器限制腳本內發起跨源HTTP請求,即同源策略。例如,當來自于A網站的頁面中的JavaScript代碼希望訪問B網站的時候,瀏覽器會拒絕該訪問,因為A、B兩個網站是屬于不同的域。通過配置CORS,可以解決不同域相互訪問的問題,CORS定義了客戶端Web應用程序在一個域中與另一個域中的資源進行交互的方式。
OOS支持根據需求靈活配置CORS規則,實現允許或者拒絕相應的跨域請求。例如,您希望僅允許來源為www.daliqc.cn、跨域請求方法為GET的請求,則CORS規則配置如下:

避免使用順序前綴的方式命名文件
當您上傳大量文件時,如果使用順序前綴(如時間戳或字母順序)、日期、數字ID等可以被遍歷的方式來命名文件,攻擊者可通過總結規律以及編寫腳本的方式獲取全部的文件,最終造成數據泄露。強烈建議您通過向文件名添加十六進制哈希前綴或以反轉文件名的方式命名文件,從而有效降低文件名被遍歷的風險。