亚马逊 S3 和上传到云中
亚马逊 S3 和上传到云中
原文:https://medium.com/hackernoon/amazon-s3-and-uploading-into-the-cloud-76a030be6686
在我们的一个应用程序中,我们为用户开发了上传他们想要注册的文件的可能性。在第一阶段,我们将它们存储在我们的文件系统中,但迟早,越早越好,因为用户上传越来越多的文件,我们需要将它们存储在一些专门的文件系统中。考虑到这一点,我们得出结论,一个好办法是将文件上传到 S3 的亚马逊网站。这是这篇博客文章将关注的新功能,但首先让我们穿上羊皮,参与向您销售亚马逊 S3。
为什么是 S3?
亚马逊 S3 的设计让开发人员不必担心他们将如何存储他们的数据,数据是否安全,或者他们是否有足够的存储空间。有了这个 S3,开发者就不用为设置他们自己的对象存储解决方案花费成本,也不用为维护 T5 和扩展他们的服务器花费 T4 的成本。现在,开发人员可以将时间集中在对他们拥有的数据进行创新上,而不是考虑如何存储这些数据。
亚马逊 S3 旨在满足这些设计要求:
- 安全的
它让客户能够完全控制谁可以访问他们的数据。客户也有可能在传输中或静止时保护他的数据。
- 可靠的
您可以存储具有 99.99999999%持久性和 99.99%可用性的数据。必须容忍系统中的所有故障,或者在没有任何停机时间的情况下进行修复。
- 可攀登的
亚马逊 S3 可以以不同的形式扩展。您可以根据存储、请求率和用户进行扩展。
- 快的
它必须足够快,使得服务器端的延迟与互联网延迟相比微不足道。
最重要的设计问题之一是,亚马逊 S3 必须支持亚马逊内部应用程序和任何类型的外部开发者应用程序的所有功能请求。有了这个目标,这意味着它必须足够快,足够可靠,足以运行亚马逊的网站,同时足够灵活,任何开发人员都可以使用它进行任何所需的数据存储。
部分规格
在亚马逊 S3,你可以存储从 1 字节到 5 兆字节的数据,你可以存储无限数量的对象。在存储对象的地方称为存储桶,从这个存储桶中,您只能通过开发人员分配的唯一键来检索对象。一个存储桶可以存储在全球多个地区,因此您可以选择最适合您的地区,以优化延迟并最大限度地降低成本。
Amazon 提供认证机制,确保您的数据不会受到未经授权的访问,您可以将某个对象设为私有或公共,甚至授予或撤销特定用户对该对象的权限。
你可以选择在一个安全的渠道从亚马逊上传或下载,也可以加密你的数据作为额外的保护。对于开发者来说,亚马逊 S3 使用 REST 和 SOAP 标准,因此它可以与任何互联网开发工具包一起工作。
好了,现在我们谈了一点 S3 的内部,让我们看一些小猫试图抓住一个红点…啊哈哈哈哈该死的猫。Ups 很抱歉在那分心了,我们说到哪了?哦,是的…所以现在我们要保护你的数据。
保护您的数据
在亚马逊 S3,只有桶和对象所有者可以访问他们创建的数据,它支持多种访问控制机制和加密,以实现安全传输和磁盘上的安全存储。您有几种机制可以控制谁可以访问您的数据,以及他们可以如何、何时甚至在哪里访问数据。在亚马逊 S3,你有四种不同的访问控制机制:
- 身份和访问管理(IAM)
通过这种机制,拥有多名员工的组织能够在一个 AWS 帐户下创建和管理多个用户。有了这种机制,您可以授予用户对您的亚马逊 S3 桶或对象的细粒度控制。
- 访问控制列表(ACL)
这种机制用于授予对单个对象的某些权限。
- 木桶策略
存储桶策略用于添加或拒绝对某个存储桶的权限,将这些权限应用于该存储桶中的所有或某些对象。
- 查询字符串验证
拥有这种机制将使您共享的 URL 只在预定义的过期时间内有效。
在您保护了对您数据的访问后,您可能想要保护您和亚马逊 S3 之间的通信,为此,您可以使用 HTTPS 协议通过 SSL 加密的端点发出上传/下载文件的请求。作为额外的安全措施,您可以使用亚马逊 S3 管理数据的加密和解密,如果您喜欢亚马逊 S3 管理您的加密密钥,您可以使用亚马逊 S3 服务器端加密(SSE)。相反,如果你喜欢管理自己的加密密钥,你可以使用亚马逊 S3 服务器端加密和客户提供的密钥(SSE-C)。在这两个选项中,亚马逊 S3 将在写入时加密您的数据,并在检索时解密您的数据。
这样我们就结束了销售部分,所以让我们用一些代码弄脏我们的 gads!
上传到亚马逊 S3
当我们开始搜索如何上传到亚马逊 S3 时,我们发现了一个 Railscasts 视频(“第 383 集-上传到亚马逊 S3”),作者正是这样做的,但他使用 carrierwave gem 来上传文件,我们使用 dropzone javascript 插件和回形针 gem 来完成图像处理部分。尽管如此,我们还是使用了 Ryan Bates 创建的助手来帮助上传表单。
对亚马逊 S3 来说重要的字段是“字段”方法中的字段,这些字段作为隐藏字段放在表单中,亚马逊 S3 将使用它们来验证、处理和响应您的请求。它们如下:
- 访问控制列表
该字段代表对象的 ACL 机制。
- 政策
策略字段是一个加密的散列,其中组成它的字段表示将应用于将要发出的请求的一些限制。例如,您有一个“到期”字段,它指示该表单发出请求的有效时间。
- 水桶
标识将在哪个存储桶中发出请求。
- 成功 操作 状态
表示将在响应中使用的 HTTP 状态代码。
- 键
在这里,您可以指定存储文件的路径。
您只需执行以下操作即可使用该助手:
需要记住的一点是,您需要用正确的 CORS 配置来配置您的亚马逊 S3 桶,以便能够针对该桶发出请求。所述配置的一个例子如下所述。
成功地将文件上传到亚马逊 S3 后,您可能希望直接从代码中访问您的 bucket 和 object。为此,您拥有“AWS-SDK”gem,其用法示例如下:
正如你所看到的,用这个 gem 你可以很容易地在你的桶中进行操作,比如删除你的对象或者从一个路径复制你的对象到另一个路径。
这并不难,不是吗?通过这个简单的介绍,你可以将你的文件上传到亚马逊 S3,并且你可以自豪地说你正在使用云。



