应用场景
所有场景。
前提条件
开通对象存储(经典版)Ⅰ型服务。
具体操作
避免密码泄露
当账户密码泄露时,非法用户可能对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为https://www.ctyun.cn/、https://ctyun.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":[
"https://www.ctyun.cn/*",
"https://ctyun.cn/*"
]
},
"Bool": {
"ctyun:SecureTransport": "true"
},
"IpAddress" : {
"ctyun:SourceIp":"192.168.143.0/24"
}
}
}
]
}
示例2:如果example-bucket的权限为公共读写,通过Bucket Policy限制:仅Referer为https://www.ctyun.cn、https://ctyun.cn开头的请求头写入。
{
"Version":"2012-10-17",
"Id":"*",
"Statement":[
{
"Sid":"*",
"Effect":"Deny",
"Principal":{ "CTYUN": ["*"] },
"Action":"oos:*",
"Resource":"arn:ctyun:oos:::example-bucket/*",
"Condition":{
"StringNotLike":{
"ctyun:Referer":[
"https://www.ctyun.cn/*",
"https://ctyun.cn/*"
]
}
}
}
]
}
设置跨域资源共享
跨域资源共享CORS(Cross-Origin Resource Sharing)简称跨域访问,浏览器限制脚本内发起跨源HTTP请求,即同源策略。例如,当来自于A网站的页面中的JavaScript代码希望访问B网站的时候,浏览器会拒绝该访问,因为A、B两个网站是属于不同的域。通过配置CORS,可以解决不同域相互访问的问题,CORS定义了客户端Web应用程序在一个域中与另一个域中的资源进行交互的方式。
OOS支持根据需求灵活配置CORS规则,实现允许或者拒绝相应的跨域请求。例如,您希望仅允许来源为www.ctyun.cn、跨域请求方法为GET的请求,则CORS规则配置如下:
避免使用顺序前缀的方式命名文件
当您上传大量文件时,如果使用顺序前缀(如时间戳或字母顺序)、日期、数字ID等可以被遍历的方式来命名文件,攻击者可通过总结规律以及编写脚本的方式获取全部的文件,最终造成数据泄露。强烈建议您通过向文件名添加十六进制哈希前缀或以反转文件名的方式命名文件,从而有效降低文件名被遍历的风险。