什么是 Amazon S3? - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南Amazon S3 控制台用户指南Amazon S3 入门指南

什么是 Amazon S3?

这个 Amazon Simple Storage Service (Amazon S3) 简介提供了此 Web 服务的详细摘要。在阅读本部分之后,您应当对 Web 服务提供的内容及其如何适应您的业务有比较深入的了解。

Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据。

本指南介绍如何发送请求以创建存储桶、如何存储和检索对象,以及如何管理资源的权限。本指南还介绍访问控制和身份验证过程。访问控制定义哪些人可以访问 Amazon S3 中的对象和存储桶以及访问类型(例如,READ 和 WRITE)。身份验证过程验证尝试访问 Amazon Web Services (AWS) 的用户的身份。

如何...?

信息 相关章节

一般产品概述和定价

Amazon S3

如何使用存储桶?

存储桶概述

如何使用访问点? 使用 Amazon S3 访问点管理数据访问

如何使用对象?

Amazon S3 对象概述

如何进行请求?

提出请求

如何管理对我的资源的访问权限?

Amazon S3 中的 Identity and Access Management

使用 Amazon S3 的优势

Amazon S3 特意内置了着重于简易性和稳健性的最小功能集。以下是使用 Amazon S3 的一些优势:

  • 创建存储桶 – 创建和命名存储数据的存储桶。存储桶是 Amazon S3 中用于数据存储的基础容器。

  • 存储数据 – 在存储桶中存储无限量的数据。可将所需数量的对象上传到 Amazon S3 存储桶。每个对象可包含最多 5 TB 的数据。使用开发人员分配的唯一键值存储和检索每个对象。

  • 下载数据 – 下载您的数据或允许其他人进行下载。随时下载您的数据或允许其他人进行下载。

  • 权限 – 对于要在您的 Amazon S3 存储桶中上传或下载数据的其他人员,您可以授予其访问权限或拒绝其访问。将上传和下载的许可授予三种类型的用户。身份验证机制可帮助确保数据安全,以防未授权访问。

  • 标准接口 – 使用基于标准的 REST 和 SOAP 接口,它们可与任何 Internet 开发工具包搭配使用。

    注意

    HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。不支持将新 Amazon S3 功能用于 SOAP。我们建议您使用 REST API 或 AWS 开发工具包。

Amazon S3 概念

本节介绍了有效使用 Amazon S3 必需了解的主要概念和术语。这些概念和术语是按照您最有可能遇到它们的顺序显示的。

存储桶

存储桶是 Amazon S3 中用于存储对象的容器。每个数据元都储存在一个存储桶中。例如,如果名为 photos/puppy.jpg 的对象存储在美国西部(俄勒冈)区域的 awsexamplebucket1 存储桶中,则可使用 URL https://awsexamplebucket1.s3.us-west-2.amazonaws.com/photos/puppy.jpg 对该对象进行寻址。

存储桶可用于多种用途:

  • 它们在最高级别组织 Amazon S3 命名空间。

  • 它们标识负责存储和数据传输费用的账户。

  • 它们在访问控制中发挥作用。

  • 它们用作使用情况报告的聚合单元。

您可以配置存储桶,以便在特定 AWS 区域进行创建。有关更多信息,请参阅访问存储桶。您也可以配置存储段,以便在每次向它添加数据元时,Amazon S3 都会生成一个唯一的版本 ID 并将其分配给数据元。有关详细信息,请参阅使用版本控制

有关存储桶的更多信息,请参阅 存储桶概述

对象

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

在存储桶中,对象将由键 (名称) 和版本 ID 进行唯一地标识。有关详细信息,请参阅使用版本控制

键是指存储桶中对象的唯一标识符。存储桶内的每个对象都只能有一个键。存储桶、键和版本 ID 的组合唯一标识各个对象。因此,您可以将 Amazon S3 看作“存储桶 + 键 + 版本”与对象本身之间的基本数据映射。将 Web 服务终端节点、存储段名、密钥和版本(可选)组合在一起,可唯一地寻址 Amazon S3 中的每个数据元。例如,在 URL https://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl 中,“doc”是存储桶的名称,“2006-03-01/AmazonS3.wsdl”是键。

有关对象键的更多信息,请参阅创建对象键名称

区域

您可以选择一个 AWS 区域供 Amazon S3 存储您创建的存储桶。您可以选择一个区域,以便优化延迟、尽可能降低成本或满足法规要求。在某一区域存储的数据元将一直留在该区域,除非您特意将其传输到另一区域。例如,在欧洲(爱尔兰)区域存储的对象将一直留在欧洲。

注意

您只能在已为您账户启用的 AWS 区域中访问 Amazon S3 及其功能。

有关 Amazon S3 区域和终端节点的列表,请参阅《AWS 一般参考》中的区域和终端节点

Amazon S3 数据一致性模型

Amazon S3 为所有 AWS 区域中 Amazon S3 存储桶中对象的 PUT 和 DELETE 提供了强大的先写后读一致性。这既适用于到新对象的写入,也适用于覆盖现有对象的 PUT 和 DELETE。此外,针对 Amazon S3 Select、Amazon S3 访问控制列表、Amazon S3 对象标签和对象元数据(例如 HEAD 对象)的读取操作具有严格一致性。

单个键的更新是原子更新。例如,如果您从一个线程对现有密钥执行 PUT 操作,并同时从另一个线程对同一密钥执行 GET 操作,则您将获得旧数据或新数据,但绝不会获得部分或损坏的数据。

Amazon S3 通过在 AWS 数据中心内的多个服务器之间复制数据,从而实现高可用性。如果 PUT 请求成功,则数据已安全存储。在收到成功的 PUT 响应之后启动的任何读取(GET 或 LIST)都将返回 PUT 写入的数据。以下是此行为的示例:

  • 这是一个过程,会将一个新数据元写入 Amazon S3,并立即列出其存储段内的密钥。新对象将显示在列表中。

  • 这是一个过程,会替换一个现有的对象,并立即尝试读取此对象。Amazon S3 将返回新数据。

  • 这是一个过程,会删除一个现有的对象,并立即尝试读取此对象。Amazon S3 不会返回任何数据,因为对象已被删除。

  • 这是一个过程,会删除一个现有的对象,并立即列出其存储桶内的键。该对象不会显示在列表中。

注意
  • Amazon S3 不支持对并发写入器进行对象锁定。如果同时对同一键发出两个 PUT 请求,则以带有最新时间戳的请求为准。如果这会导致问题,您需要在应用程序中创建对象锁定机制

  • 更新是基于键的。无法跨键值实现原子更新。例如,无法根据一个键值的更新对另一个键值进行更新,除非将此功能设计到应用程序中。

存储桶配置具有最终一致性模型。具体来说:

  • 如果您删除存储桶,然后立即列出所有存储桶,则所删除的存储桶可能仍会显示在列表中。

  • 如果您首次对存储桶启用版本控制,则可能需要很短的时间即可完全传播更改。我们建议您在启用版本控制后等待 15 分钟,然后再对存储桶中的对象发出写入操作(PUT 或 DELETE)。

并发应用程序

本部分提供了当多个客户端向同一项目写入时,Amazon S3 应采取的行为示例。

在本示例中,W1 (写入 1) 和 W2 (写入 2) 会在 R1 (读取 1) 和 R2 (读取 2) 启动之前完成。由于 S3 具有严格一致性,因此 R1 和 R2 都会返回 color = ruby

在下一个示例中,W2 不会在 R1 启动之前完成。因此,R1 可能会返回 color = rubycolor = garnet。但是,由于 W1 和 W2 在 R2 开始之前完成,因此 R2 会返回 color = garnet

在上一个示例中,W2 在 W1 收到确认之前开始。因此,这些写入被视为并发写入。Amazon S3 在内部使用 last-writer-wins 语义来确定哪个写入优先。但是,由于网络延迟等因素,无法预测 Amazon S3 接收请求的顺序和应用程序接收确认的顺序。例如,W2 可能由同一区域中的 Amazon EC2 实例启动,而 W1 可能由距离更远的主机启动。确定最终值的最佳方法是在确认两次写入操作后执行读取。

Amazon S3 功能

本节描述了重要的 Amazon S3 功能。

存储类

Amazon S3 提供一系列适合不同使用案例的存储类。这包括适用于频繁访问数据的通用型存储 Amazon S3 STANDARD、适用于长期需要但访问频率不太高的数据的 Amazon S3 STANDARD_IA,以及适用于长期存档的 S3 Glacier。

有关更多信息,请参阅 使用 Amazon S3 存储类

存储桶策略

基于各种条件,包括 Amazon S3 操作、请求者、资源和请求的其他方面(例如,IP 地址),存储桶策略可提供对存储桶和对象的集中访问控制。这些策略使用访问策略语言 进行描述并且允许对许可进行集中管理。附加到存储桶的权限适用于存储桶拥有者账户拥有的所有存储桶对象。

个人和公司都可以使用存储桶策略。在公司注册 Amazon S3 时,他们会创建一个账户。然后,该公司即等同于此账户。账户在财务上承担支付公司(及其员工)所创建的 AWS 资源的责任。账户有权基于各种条件,授予存储桶策略许可以及分配员工许可。例如,账户可以创建一个策略,授予用户对以下内容的写入权限:

  • 特殊的 S3 存储桶

  • 从账户的企业网络

  • 在工作时间

账户不仅可以授予用户有限的读写访问权限,还可以允许其他人创建和删除存储桶。一个账户可以让多个地域的办公室将其每日报告存储在一个存储桶中。它可以允许每个办公室仅将报告写入一组特定名称(例如,“Nevada/*”或“Utah/*”),并且仅允许来自该办公室的 IP 地址范围的写入。

与仅可以为单个对象添加(授予)许可的访问控制列表(如下文所述)不同,策略可以为存储桶内的所有对象(或子集)添加或拒绝许可。在一个请求中,账户可以为存储桶内任意数量的对象设置权限。账户可以在 Amazon 资源名称 (ARN) 和其他值上使用通配符(类似于正则表达式运算符)。然后,账户可以对以通用前缀开头或者以指定扩展名结尾(例如 .html)的对象组进行访问控制。

仅允许存储桶拥有者将策略与存储桶关联。策略(采用访问策略语言编写)将基于以下条件允许拒绝 请求:

  • Amazon S3 存储桶操作(例如,PUT ?acl)和对象操作(例如,PUT ObjectGET Object

  • 请求者

  • 在策略中指定的条件

账户可以基于特定的 Amazon S3 操作(例如,GetObjectGetObjectVersionDeleteObjectDeleteBucket)控制访问权限。

这些条件可以是 IP 地址、以 CIDR 法表示的 IP 地址范围、日期、用户代理、HTTP 引用站点和传输(HTTP 和 HTTPS)。

有关更多信息,请参阅 存储桶策略和用户策略

AWS Identity and Access Management

您可以使用 AWS Identity and Access Management (IAM) 来管理 Amazon S3 资源的访问权限。

例如,您可以将 IAM 用于 Amazon S3,控制用户或用户组对您的 AWS 账户所拥有 Amazon S3 存储桶的具体部分的访问类型。

有关 IAM 的更多信息,请参阅以下文档:

访问控制列表

您可使用访问控制策略 (ACL) 控制对每个存储桶和对象的访问。有关更多信息,请参阅 使用 ACL 管理访问

版本控制

您可使用版本控制 功能将对象的多个版本保留在同一存储桶中。有关更多信息,请参阅在 S3 存储桶中使用版本控制

操作

下面是您将通过 API 运行的最常见操作。

常见的操作

  • 创建存储桶 – 创建和命名要在其中存储对象的您自己的存储桶。

  • 写入对象 – 通过创建或覆盖对象存储数据。在编写对象时,在存储桶的命名空间中指定唯一键值。此时,也适合为对象指定任何您想要的访问控制。

  • 读取对象 – 读回数据。您可以通过 HTTP 或 BitTorrent 下载数据。

  • 删除对象 – 删除您的某些数据。

  • 列出键 – 列出包含在某个存储桶中的键。您可以基于前缀筛选键列表。

这些操作以及其他所有功能在本指南中有详细介绍。

Amazon S3 应用程序编程接口 (API)

Amazon S3 架构的设计与编程语言无关,它使用 AWS 支持的接口来存储和检索对象。

Amazon S3 提供 REST 和 SOAP 接口。它们非常相似,但也有某些不同。例如,在 REST 接口中,元数据在 HTTP 标头中返回。由于我们仅支持最大 4 KB 的 HTTP 请求 (不包括正文),因此您能提供的元数据量是受限的。

注意

HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。不支持将新 Amazon S3 功能用于 SOAP。我们建议您使用 REST API 或 AWS 开发工具包。

REST 接口

REST API 是面向 Amazon S3 的 HTTP 接口。借助 REST,您可以使用标准的 HTTP 请求创建、提取和删除存储桶和对象。

您可以借助任何支持 HTTP 的工具包来使用 REST API。只要对象是匿名可读的,您甚至可以使用浏览器来提取它们。

REST API 使用标准的 HTTP 标头和状态代码,以使标准的浏览器和工具包按预期工作。在某些区域中,我们向 HTTP 添加了功能 (例如,我们添加了标头来支持访问控制)。在这些情况下,我们已尽最大努力使添加的新功能与标准的 HTTP 使用样式相匹配。

SOAP 接口

注意

HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。不支持将新 Amazon S3 功能用于 SOAP。我们建议您使用 REST API 或 AWS 开发工具包。

SOAP API 使用文档文字编码来提供 SOAP 1.1 接口。使用 SOAP 的最常见方法是下载 WSDL(请参阅 https://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl),使用 SOAP 工具包(例如,Apache Axis 或 Microsoft .NET)创建绑定,然后编写代码以使用这些绑定调用 Amazon S3。

为 Amazon S3 支付费用

Amazon S3 定价的设计可让您不必为应用程序的存储需求制定计划。大多数存储提供商会强迫您购买预定量的存储和网络传输容量:如果超过此容量,就会关闭您的服务或对您收取高额的超容量费用。如果没有超过此容量,又要按全部容量支付使用费用。

Amazon S3 仅按照您的实际使用容量收费,没有任何隐性收费和超容量收费。这为开发人员提供了一种可变成本服务,这种服务可以伴随他们的业务共同发展,同时还可以享受 AWS 的基础设施成本优势。

在 Amazon S3 中存储任何内容之前,您必须注册该服务并提供在每个月月底付费时使用的付款方式。开始使用服务没有安装费。月底时,将自动通过您的付款方式扣除当月使用费。

有关为 Amazon S3 存储付费的信息,请参阅 Amazon S3 定价

相关服务

将数据加载到 Amazon S3 中之后,您可以将数据用于其他 AWS 服务。以下是您可能最常用使用的服务:

  • Amazon Elastic Compute Cloud (Amazon EC2) – 此服务提供云中的虚拟计算资源。有关更多信息,请参阅 Amazon EC2 产品详细信息页面

  • Amazon EMR – 此服务可让企业、研究人员、数据分析师和开发人员轻松、经济实惠地处理海量数据。它使用 Amazon EC2 和 Amazon S3 的 Web 规模基础设施上运行的托管 Hadoop 框架。有关更多信息,请参阅 Amazon EMR 产品详细信息页面

  • AWS Snowball – 此服务可加快通过物理存储设备(绕过 Internet)将大量数据传入和传出 AWS 的速度。每个 AWS Snowball 设备类型均能以快于 Internet 的速度传输数据。可通过区域承运商传送设备中的数据以完成传输。有关更多信息,请参阅 AWS Snowball 产品详细信息页面