【AWS 安全系列】Amazon S3 配置错误(上)

本文章先发表在我公众号 “我的安全专家之路”上了~

打算出一个系列文章,分几篇讲解 AWS 的安全问题,本篇先介绍 Amazon S3 基本概念,并且搭建一个实验环境。

近年来云平台上的数据泄漏经常发生,其中经常听到的就是 aws s3 数据泄漏,今天就来详细介绍此漏洞的形成原因、怎样复现漏洞及修复建议。

1. 什么是 Amazon S3 ?

Amazon S3 全称 Amazon Simple Storage Service 是互联网存储解决方案。该服务旨在降低开发人员进行网络规模级计算的难度。

Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据。此服务让所有开发人员都能访问同一个具备高扩展性、可靠性、安全性和快速价廉的数据存储基础设施, Amazon 用它来运行其全球的网站网络。此服务旨在为开发人员带来最大化的规模效益。
简单来说,Amazon S3 就是亚马逊提供的云存储服务,开发人员可以上传文件到 Amazon S3 上进行管理。同时,还可以在Amazon S3 上托管静态网站。
Amazon S3 上面存储文件有很多好处,它的计费方式是按文件大小来计费的,也就是用多少容量就收多少钱,十分经济。它容量是无限的,不会出现硬盘容量不够需要扩容等问题。

2. Amazon S3 的一些概念

我们先来了解下一些基本概念,先放上一个图帮助理解下面的概念,图中是一个桶,桶里面装着对象。
aws s3 bucket

存储桶(bucket)

存储桶是 Amazon S3 中用于存储对象的容器。每个对象都储存在一个存储桶中。例如,如果名为 photos/puppy.jpg 的对象存储在 johnsmith 存储桶中,则可使用 URL http://johnsmith.s3.amazonaws.com/photos/puppy.jpg 对该对象进行寻址。

对象(object)

对象是 Amazon S3 中存储的基本实体。对象由对象数据和元数据组成。数据部分对 Amazon S3 不透明。元数据是一组描述对象的名称-值对。其中包括一些默认元数据 (如上次修改日期) 和标准 HTTP 元数据 (如 Content-Type)。您还可以在存储对象时指定自定义元数据。

简单来说,对象由数据和元数据组成,其中数据是文件内容,元数据是一些信息,如创建时间、权限信息和对象拥有者信息等。

区域

您可以选择一个地理区域供 Amazon S3 存储您创建的存储桶。您可以选择一个区域,以便优化延迟、尽可能降低成本或满足法规要求。在某一区域存储的对象将一直留在该区域,除非您特意将其传输到另一区域。例如,在 欧洲(爱尔兰) 区域存储的对象将一直留在该区域。
区域这个概念还是要关注下,在不同区域创建的存储桶,其URL访问方式是不一样的,比如在 ap-northeast-1 创建了名为 johnsmith 的存储桶,并且在上面上传了一个名名为 index.html 的文件,则访问方式为(前提是该文件是公开的):
https://johnsmith.s3-ap-northeast-1.amazonaws.com/index.html
小结Amazon S3 用存储桶来存储对象,对象中的数据就是文件。要使用 aws 云存储服务就需要创建一个存储桶,然后才能上传文件到云上去使用。

3. 搭建实验环境

我们先搭建一个实验环境,然后开始测试 Amazon S3 错误配置的问题。先创建一个 aws 账号,创建账号时,需要绑定一张信用卡,所以要准备一张信用卡。最好能创建两个账号来做实验。

在以下地址点击注册,并绑定信用卡
https://amazonaws-china.com/cn/console/
注册会后,会扣除信用卡的一美元,用来验证信用卡是否可用,一周后会自动退款。然后我们会获得一年的免费体验套餐,用来体验各种 aws 服务,也就是说,在一年内我们可以免费创建和使用存储桶。
使用注册的账号在以下地址登录
https://console.aws.amazon.com/console/home
这里是使用根用户登录,也就是用我们注册的邮箱和密码登录:
在这里插入图片描述
登录控制台后,在搜索框里输入 s3 , 然后点击进入 s3 控制台
aws 控制台
接下来创建一个存储桶,直接在 s3 控制台上点击创建存储桶
创建存储桶
存储桶的名称必须符合DNS命名规范,这一点主要是因为可能通过URL来访问,所以需要符合DNS命令规范。

在这里插入图片描述
下一步的配置选项按默认就行,点下一步
在这里插入图片描述
设置权限这里默认是阻止公有访问的,所以默认是安全的,而 s3 的配置错误会导致存储桶的公有访问,这里后面会介绍到,直接点下一步。
在这里插入图片描述
最后直接点创建存储桶就行了。
在这里插入图片描述
如下图所示,成功创建了名为 timeshatter 的存储桶了,并且存储桶默认不是公有的。

在这里插入图片描述
接来点击存储桶,随便上传一个文件
在这里插入图片描述
其它选择按默认就行了。

在这里插入图片描述
上传后,直接点击上传的文件,会进入详情
在这里插入图片描述
可以看到,上传的文件可以通过红框中的URL来访问。直接访问该URL会出现 403 拒绝访问。

在这里插入图片描述
如果点击打开按钮,会携带个token来打开,这样相当于授权访问,可以打开文件。
在这里插入图片描述
接下来安装 aws cli 工具来访问创建的存储桶。

AWS Command Line Interface (AWS CLI) 是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。仅需最少的配置,您就可以从常用终端程序中的命令提示符开始使用基于浏览器的 AWS 管理控制台提供的相同功能。

如果在 kali 上,可以直接通过 apt 工具安装

apt install awscli

mac 上如果安装了 brew ,也可以通过以下命令安装

brew install awscli

如果您已经有 pip 和支持的 Python 版本,则可以使用以下命令安装 AWS CLI:如果您安装了 Python 3+ 版本,建议您使用 pip3 命令。

pip3 install awscli --upgrade --user

安装完后,输入下面命令查看是否安装成功

aws --version

aws cli 安装
现在可以尝试下用未认证的用户访问下新创建的存储桶,命令如下:

aws s3 ls s3://timeshatter --no-sign-request

在这里插入图片描述
其中的 s3 用于指定访问的是 s3 服务, ls 参数用于列出存储桶中的目录,类似 linux 上的 ls , s3://timeshatter 是指访问名为 timeshatter 的存储桶。 --no-sign-request 参数指定该请求不进行认证,也就是在未登录的情况下发出此请求,或者说未授权的情况下发送请求。

从下图可以看到,对于不是公开访问的存储桶,我们是无法列出存储桶里面的内容的,因为 aws s3 有严格的权限控制。

接下来,我们来设置下 aws cli 的认证信息。点击账号 - 我的安全凭证
在这里插入图片描述
接着会进入 aws 的 iam 管理界面,这里主要是管理账号有关资源的,会出现以下提醒,直接点 Continue 就行了,这是个安全问题,后面的文章再讨论。

aws 创建访问密钥
点击访问密钥,接着点击创建新的访问密钥
在这里插入图片描述
创建完后,你可以点击显示访问密钥,或者下载密钥文件,注意,访问密钥需要妥善保管,不要发送给其它人,否则其它人在获取你的密钥后,可以完全访问你的 aws 资源。

获取访问密钥后,通过以下命令配置 aws cli 的认证信息。

aws configure --profile timeshatter

其中的 --profile 参数指定该认证信息的名字,随便填个有意义的名字就行,一般输入用户名。

接下来按要求把访问 ID 和私有访问密钥复制进去就行,后面的区域和格式可以不填
aws configure
配置完后,我们再次使用 ls 命令来列出存储桶的内容,使用 --profile 指定使用的认证信息。

在这里插入图片描述

配置完后,我们再次使用 ls 命令来列出存储桶的内容,使用 --profile 指定使用的认证信息。

由于是使用自己的 aws 根账号的访问密钥来请求存储桶,所以可以拥有列出存储桶内容的权限。

我们还可以尝试上传、下载和删除存储桶的操作

上传文件到存储桶

aws s3 cp test.txt s3://timeshatter/ --profile timeshatter

在这里插入图片描述
从存储桶上下载文件

aws s3 cp s3://timeshatter/test.txt test.txt --profile timeshatter

在这里插入图片描述
同步存储桶上的所有文件,这条命令会把存储桶上的所有文件同步到本地,执行这条命令时,要先创建一个文件夹专门用于存放这个存储桶,然后cd到该文件夹来运行命令,其中的 . 代表当前路径,也可以指定绝对路径。

aws s3 sync s3://timeshatter/ . --profile timeshatter

aws sync

删除存储桶上的文件

aws s3 rm s3://timeshatter/test.txt --profile timeshatter

aws rm

到这里,实验环境已经搭建好了。

4.总结

目前,我们已经了解完了基本概念以及实验环境的搭建,下一篇文章会介绍 aws s3 的错误配置问题以及漏洞利用。

感兴趣的表哥们赶紧关注公众号啦~

我的安全专家之路

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: software.amazon.awssdk s3 api文档是Amazon Web Services的S3服务的官方API文档。该文档提供了详细的S3 API操作指南和使用示例,包括对象存储、桶(Bucket)管理、访问控制、CORS配置等方面的内容。 该文档主要面向S3服务的开发者,通过对API操作指南的阅读,开发者可以熟悉S3服务的基本操作和使用方式,从而能够更加高效地开发S3相关应用。 除了操作指南之外,该文档还提供了代码示例和API参考,方便开发者编写和调试S3应用程序。所有API都有详细的参数说明和使用示例,以及方法的返回值。 总之,software.amazon.awssdk s3 api文档是S3开发者必备的宝典之一,对于想要了解和掌握S3服务的开发者来说,这本文档会极大地提高他们的开发效率和成果。 ### 回答2: software.amazon.awssdk s3 api文档是AWS S3 SDK的官方文档,其中包括了S3 SDK中所有的API方法和参数说明,以及示例代码。AWS S3 SDK是Amazon Web Services(AWS)提供的用于连接和操作AWS S3存储桶的软件开发工具包(SDK)。通过这个SDK,开发人员可以快速地将S3存储桶集成到他们的应用程序中,也可以在应用程序中增加对S3存储桶的功能。文档中描述了各种操作S3存储桶的API方法,如创建、读取、更新和删除存储桶、管理S3存储桶中的对象、设置存储桶权限等等。此外,文档还提供了详细的参数说明,让用户可以了解每个API方法的输入参数、返回参数、请求响应、异常处理等内容。对于想要使用AWS S3 SDK进行开发的用户,软件.amazon.awssdk s3 api文档是必备的参考资料,它能够帮助开发人员更好地了解S3 SDK的使用,提高开发效率和开发成功率。 ### 回答3: Software.amazon.awssdk s3 api文档是亚马逊AWS Java 开发工具包中用于与亚马逊S3存储服务交互的应用程序接口(API)文档。该文档提供了详细的开发指南和API文档,帮助开发人员在Java语言下使用AWS S3服务。 该文档的开发指南分为三个部分,即入门、开发和高级。入门部分涵盖了如何设置开发环境、创建AWS S3存储桶以及基本的对象和桶操作。开发部分着重介绍了如何上传和下载大文件、实现上传和下载进度监控和使用加密功能。高级部分则进一步讲解了如何使用对象标记、复制对象和批量操作等高级应用。 在API文档部分,开发人员可以快速了解每个API的用途、入参和出参的具体信息,并可查看示例代码和错误代码,以便更好地理解和运用API。此外,文档还提供了完整的SDK参考文档和一些常见问题的解决方案。 总的来说,软件.amazon.awssdk s3 api文档提供了非常详细的开发指南和API文档,加上丰富的示例代码和SDK文档,极大地方便了开发人员在Java语言下使用AWS S3服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值