序
云存储的安全问题主要来源于运维人员对Bucket的配置错误,本文主要从Bucket的权限控制方面谈一下常见的配置错误问题。在权限控制策略方面基本每一家的都是一模一样的,这里主要阿里云oss作为主要对象。
访问权限控制
选择对应的Bucket进去后,点击权限控制就能看到目前该Bucket的访问策略。
Bucket ACL
读写权限ACL用于定义用户或用户组被授予的访问权限。收到某个资源的请求后,OSS会检查相应的ACL以验证请求者是否拥有所需的访问权限。您可以在创建存储空间(Bucket)时设置Bucket ACL,也可以在创建Bucket后根据自身的业务需求修改Bucket ACL。仅Bucket拥有者可以执行修改Bucket ACL的操作。
Bucket包含以下三种读写权限,默认选择private(私有模式)
权限值 | 权限描述 |
---|---|
public-read-write | 公共读写:任何人(包括匿名访问者)都可以对该Bucket内文件进行读写操作。 |
public-read | 公共读:只有该Bucket的拥有者可以对该Bucket内的文件进行写操作,任何人(包括匿名访问者)都可以对该Bucket中的文件进行读操作。 |
private(默认值) | 私有:只有Bucket的拥有者可以对该Bucket内的文件进行读写操作,其他人无法访问该Bucket内的文件。 |
当设置为私有模式的情况下,并且Bucket 访问策略也没有做额外的授权用户的情况下,系统会进行非匿名请求鉴权。
此时我们请求获取对应的Object需要携带和身份相关的签名信息,类似格式如下:
https://xxxx.oss-cn-beijing.aliyuncs.com/1.txt?Expires=1697976135&OSSAccessKeyId=TMP.3KeviPnpW449z4g1c1gpwW6HbRmt5miM78NiRHG9V1ophB8TXDx9Dv7sECgbVGKZ2A5KuwhrnXiT32dBA1KjtZvm5Dz5sf&Signature=yYvz59xzohtfyl8FC%2FhwDnMqt7g%3D&response-content-type=text%2Fplain%3Bcharset%3Dutf-8%3B
本文讨论的安全问题主要还是匿名请求上,即无需鉴权对Object进行操作。
关于非匿名请求和匿名请求可详看OSS鉴权流程_对象存储 OSS-阿里云帮助中心
Bucket 访问策略
默认情况下,为保证存储在OSS中数据的安全性,OSS资源(包括Bucket和Object)默认为私有权限,只有资源拥有者或者被授权的用户允许访问,如果要授权第三方用户访问或使用自己的OSS资源,您可以通过多种权限控制策略向他人授予资源的特定权限,可以简单理解为通过该方式可细化Bucket 访问策略。
值得注意的是:桶策略提供基于各种条件的集中访问控制,可以与ACL共同作用,但是如果授权产生冲突,以桶策略大于桶ACL的优先级决定授权结果。
当用户配置所有账号,并且设置了不安全的授权操作的时候就会出现对应的安全问题。阿里云OSS的官方权限控制文档如下,这里主要挑几个高危的指令。
访问控制的权限控制策略和适用场景介绍_对象存储 OSS-阿里云帮助中心
ListObjects与GetObject
ListObjects接口用于列举存储空间(Bucket)中所有文件(Object)的信息,设置之前无法列出Object
设置之后便可列出所有对象,并且当设置了GETObjects权限后即可通过url拼接key的方式下载对应的对象
ListObjectVersions
前面设置了ListObjects权限直接列出所有的对象当然是最理想的情况,在设置中还有一个接口ListObjectVersions
也同样可以列出对象的key值。
官方文档描述如下:
ListObjectVersions(GetBucketVersions)接口用于列出Bucket中包括删除标记(Delete Marker)在内的所有Object的版本信息。
调用ListObjectVersions(GetBucketVersions)接口返回Bucket中所有Object的所有版本。而调用ListObjects(GetBucket)接口仅返回Object的当前版本,且当前版本不能为删除标记。
请求语法:
1 | GET /?versions HTTP/1.1 |
当目标没有开启ListObjects权限但开启了ListObjectVersions权限的时候可以在链接后使用?versions
获取到所有对象的key值。
但在笔者测试过程中阿里云OSS一直没有成功,即使在本地也没有成功,暂时还不了解原因
但在华为云OBS上是没有问题的,实战也多次遇到过,以下为华为云OBS某次实战例子
PutObject
可调用PUT方法进行文件的上传与覆盖。这里很简单直接贴网图
- 本文作者: EASY
- 本文链接: http://example.com/2023/10/30/云存储桶安全配置问题/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!