本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
如果因個人或者企業賬號密碼泄露引發了未經授權的訪問,可能會出現非法用戶對OSS資源進行違法操作,或者合法用戶以未授權的方式對OSS資源進行各類操作,這將給數據安全帶來極大的威脅。為此,OSS提供了在實施數據安全保護時需要考慮的多種安全最佳實踐。
以下最佳實踐遵循一般準則,并不等同完整的安全解決方案。這些最佳實踐可能不適合您的環境或不滿足您的環境要求,僅建議將其視為參考因素。請您在日常使用中提高數據安全意識并時刻做好內容安全防范措施。
修改ACL為私有訪問權限
除非您明確要求包括匿名訪問者在內的任何人都能讀寫您的OSS資源,包括存儲空間(Bucket)以及文件(Object),否則請勿將Bucket或者Object的讀寫權限ACL設置為公共讀(public-read)或者公共讀寫(public-read-write)。設置公共讀或者公共讀寫權限后,對訪問者的權限說明如下:
公共讀寫:任何人(包括匿名訪問者)都可以對該Bucket內的Object進行讀寫操作。
警告互聯網上任何用戶都可以對該Bucket內的Object進行訪問,并且向該Bucket寫入數據。這有可能造成您數據的外泄以及費用激增,若被人惡意寫入違法信息還可能會侵害您的合法權益。除特殊場景外,不建議您配置公共讀寫權限。
公共讀:只有該Bucket的擁有者可以對該Bucket內的Object進行寫操作,任何人(包括匿名訪問者)都可以對該Bucket內的Object進行讀操作。
警告互聯網上任何用戶都可以對該Bucket內的Object進行訪問,這有可能造成您數據的外泄以及費用激增,請謹慎操作。
鑒于公共讀或者公共讀寫權限對OSS資源帶來的數據安全風險考慮,強烈建議您將Bucket或者Object的讀寫權限設置為私有(private)。設置為私有權限后,只有該Bucket擁有者可以對該Bucket以及Bucket內的Object進行讀寫操作,其他人均無訪問權限。因此,在修改ACL為私有訪問權限之前,請自行確認業務本身不受影響。
您可以通過多種方式將Bucket或者Object的讀寫權限設置為私有,具體步驟請參見設置存儲空間讀寫權限ACL和設置文件讀寫權限ACL。
避免代碼明文使用AccessKey或本地加密存儲AccessKey
代碼中明文使用AccessKey會由于各種原因的代碼泄露導致AccessKey泄露。而本地加密存儲AccessKey也并不安全,原因是數據的加解密內容會存放在內存中,而內存中的數據可以被轉儲。尤其是移動App和PC桌面應用極易出現此類問題,攻擊者只需要使用某些注入、API HOOK、動態調試等技術,就可以獲取到加解密后的數據。
服務端可以通過阿里云SDK托管憑據插件的方式規避代碼明文使用AccessKey,解決因源碼或編譯產物泄露而導致的AccessKey泄露問題。有關阿里云SDK托管憑據插件的工作原理及使用方式的更多信息,請參見多種阿里云SDK的托管憑據插件。
此方案不適用于客戶端,請不要以任何方式在客戶端內置任意形式的AccessKey。
以RAM用戶的方式訪問OSS
阿里云賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM用戶進行API訪問或日常運維。
創建RAM用戶后,您可以控制這些RAM用戶對資源的操作權限。當您的企業存在多用戶協同操作資源的場景時,可以讓您避免與其他用戶共享阿里云賬號密鑰,按需為用戶分配最小權限,從而降低企業的信息安全風險。創建RAM用戶的具體步驟,請參見創建RAM用戶。
RAM用戶創建完成后,您可以通過RAM Policy為RAM用戶授權的方式來集中管理您的用戶(例如員工、系統或應用程序),以及控制用戶可以訪問您名下哪些資源的權限。例如,您可以通過以下RAM Policy阻止指定RAM用戶訪問目標存儲空間examplebucket及examplebucket內的文件或目錄。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:examplebucket",
"acs:oss:*:*:examplebucket/*"
]
}
]
}
您還可以通過RAM Policy拒絕RAM用戶刪除某個Bucket下任意文件、或者授權RAM用戶僅擁有讀取某個Bucket資源的權限等。有關RAM Policy常見場景的授權示例,請參見RAM Policy常見示例。
啟用多因素認證
多因素認證MFA(Multi Factor Authentication)是一種簡單有效的最佳安全實踐。啟用MFA后,登錄阿里云控制臺時需要輸入賬號密碼和MFA設備實時生成的動態驗證碼,在賬號密碼泄露時也可以阻止未授權訪問,提高賬號安全性。
您可以選擇為阿里云賬號啟用MFA,具體步驟請參見為阿里云賬號綁定多因素認證設備。您還可以選擇為RAM用戶啟用MFA,具體步驟請參見為RAM用戶綁定多因素認證設備。
STS臨時授權訪問OSS
您可以通過STS服務給其他用戶頒發一個臨時訪問憑證。該用戶可使用臨時訪問憑證在規定時間內訪問您的OSS資源。臨時訪問憑證無需透露您的長期密鑰,使您的OSS資源訪問更加安全。
有關STS臨時授權訪問OSS的具體步驟,請參見開發指南中的使用STS臨時訪問憑證訪問OSS。
Bucket Policy
Bucket Policy是阿里云OSS推出的針對Bucket的授權策略,您可以通過Bucket Policy授權其他用戶訪問您指定的OSS資源。通過Bucket Policy,您可以授權另一個賬號訪問或管理整個Bucket或Bucket內的部分資源,或者對同賬號下的不同RAM用戶授予訪問或管理Bucket資源的不同權限。
配置Bucket Policy時,請遵循以下權限最小化原則,從而降低數據安全風險。
避免授權整個Bucket
資源授權過大容易導致其他用戶數據被非法訪問,所以在實際生產業務中請限制指定資源途徑,避免授權整個Bucket。
不授權匿名訪問
允許匿名訪問意味著用戶只需要知道Endpoint和Bucket名稱就可以正常訪問OSS,而EndPoint是可以枚舉的,Bucket名稱也可以從已授權的訪問文件URL中提取。由此可見,授權允許匿名訪問會帶來極大的安全風險。
設置合理的Action
通過控制臺的圖形化配置Bucket Policy時,簡單設置中的四類授權操作(Action)僅為用戶提供了一種便捷的Policy設置方法,每類Action并不一定完全符合您的業務需求,建議您結合業務需求并通過高級設置的方式給予授權用戶最小的權限。例如,生成只讀權限往往會包含
oss:ListObjects
、oss:GetObject
等。但是一般場景下的文件下載只需要oss:GetObject
權限即可。啟用HTTPS訪問
啟用HTTPS訪問可以解決網絡中間人攻擊以及域名劫持等問題。另外Chrome瀏覽器也對HTTP協議進行干預,例如HTTPS站點默認無法加載HTTP資源。基于以上原因,請務必開啟HTTPS,以最低成本解決多種風險問題。
限定來源的IP地址
如果訪問OSS資源的IP地址是固定可枚舉的,強烈建議配置IP地址。
例如,通過Bucket Policy授予名為Test的RAM用戶通過SDK或者命令行工具ossutil下載目標存儲空間examplebucket下指定目錄log下所有文件的權限: