什么是 Amazon S3? - Amazon Simple Storage Service

什么是 Amazon S3?

Amazon Simple Storage Service(Amazon S3)是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。各种规模和行业的客户都可以使用 Amazon S3 存储和保护任意数量的数据,用于数据湖、网站、移动应用程序、备份和恢复、存档、企业应用程序、IoT 设备和大数据分析。Amazon S3 提供了管理功能,使您可以优化、组织和配置对数据的访问,以满足您的特定业务、组织和合规性要求。

Amazon S3 的功能

存储类

Amazon S3 提供一系列适合不同使用案例的存储类。例如,您可以将任务关键型生产数据存储在 S3 Standard 中以便频繁访问,通过将不经常访问的数据存储在 S3 Standard-IA 或 S3 One Zone-IA 中以最低的成本存档数据来节省成本,并在 S3 Glacier 和 S3 Glacier Deep Archive 中以最低的成本存档数据。

您可以在 S3 Intelligent-Tiering 中存储具有不断变化或未知访问模式的数据,该分层可在访问模式发生变化时自动在四个访问层之间移动数据,从而优化存储成本。这四个访问层包括两个低延迟访问层(针对频繁和不频繁访问进行了优化),以及两个为异步访问很少访问的数据而设计的 opt-in archive 访问层。

有关更多信息,请参阅使用 Amazon S3 存储类。有关 S3 Glacier 的更多信息,请参阅 Amazon S3 Glacier 开发人员指南

存储管理

Amazon S3 具有存储管理功能,您可以使用这些功能来管理成本、满足法规要求、减少延迟并保存数据的多个不同副本以满足合规性要求。

  • S3 生命周期 - 配置生命周期策略以管理您的对象,并在其整个生命周期内经济高效地存储。您可以将对象转换为其他 S3 存储类,也可以使其生命周期结束的对象过期。

  • S3 对象锁定 - 可以在固定的时间段内或无限期地阻止删除或覆盖 Amazon S3 对象。可以使用对象锁定来帮助您满足需要一次写入多次读取 (WORM) 存储的法规要求,或只是添加另一个保护层来防止对象被更改和删除。

  • S3 复制 - 将对象及其各自的元数据和对象标签复制到同一或不同的 AWS 区域 目标存储桶中的一个或多个目标存储桶,以减少延迟、合规性、安全性和其他使用案例。

  • S3 批处理操作 - 通过单个 S3 API 请求或在 Amazon S3 控制台中单击几次,大规模管理数十亿个对象。您可以使用批处理操作来执行诸如复制调用 AWS Lambda 函数, 和恢复数百万或数十亿对象。

访问管理

Amazon S3 提供了用于审核和管理对存储桶和数据元的访问的功能。默认情况下,S3 存储桶和对象都是私有的。您只能访问您创建的 S3 资源。要授予支持您特定使用案例的细粒度资源权限或审核 Amazon S3 资源的权限,您可以使用以下功能。

  • S3 阻止公有访问 - 阻止对 S3 存储桶和对象的公有访问。默认情况下,在账户和存储桶级别打开 “阻止公共访问” 设置。

  • AWS Identity and Access Management (IAM) - 为您的 AWS 账户 管理对 Amazon S3 资源的访问。例如,您可以将 IAM 用于 Amazon S3,控制用户或用户组对您的 AWS 账户 所拥有 S3 存储桶的访问类型。

  • 存储桶策略 - 使用基于 IAM 的策略语言为 S3 存储桶及其中的对象配置基于资源的权限。

  • 访问控制列表 (ACL) - 向授权用户授予单个存储桶和对象的读写权限。作为一般规则,我们建议您使用基于 S3 资源的策略(存储桶策略和访问点策略)或 IAM 策略进行访问控制,而不是 ACL。ACL 是一种访问控制机制,早于基于资源的策略和 IAM。有关何时使用 ACL 而不是基于资源的策略或 IAM 策略的更多信息,请参阅访问策略指南.

  • S3 访问分析器 - 评估和监控您的 S3 存储桶访问策略,确保这些策略仅提供对 S3 资源的预期访问。

数据处理

要转换数据并触发工作流以大规模自动执行各种其他处理活动,您可以使用以下功能。

  • S3 Object Lambda - 您可以将自己的代码添加到 S3 GET 请求中,以便在数据返回到应用程序时修改和处理数据。筛选行、动态调整图像大小、编辑机密数据等。

  • 事件通知 - 当您的 S3 资源进行更改时,触发使用 Amazon Simple Notification Service (Amazon SNS)、Amazon Simple Queue Service (Amazon SQS) 和的工作流程和 AWS Lambda。

存储日志记录和监控

Amazon S3 提供日志记录和监控工具,您可以使用这些工具来监控和控制 Amazon S3 资源的使用情况。更多信息,请参阅监控工具

自动监控工具

  • Amazon S3 的 Amazon CloudWatch 指标- 跟踪 S3 资源的运行状况,并在估计费用达到用户定义的阈值时配置计费警报。

  • AWS CloudTrail - 在 Amazon S3 中记录用户采取的行动、角色或 AWS 服务 。CloudTrail 日志为您提供了 S3 存储桶级别和对象级操作的详细 API 跟踪。

手动监控工具

  • 服务器访问日志- 详细地记录对存储桶提出的各种请求。您可以使用服务器访问日志对许多用例进行安全和访问审计,了解客户群或了解您的 Amazon S3 账单。

  • AWS Trusted Advisor - 通过使用 AWS 最佳实践检查以确定优化 AWS 基础架构、提高安全性和性能、降低成本以及监控服务配额。然后,您可以按照建议优化服务和资源。

分析和见解

Amazon S3 提供的功能可帮助您了解存储使用情况,从而使您能够更好地了解、分析和大规模优化存储。

  • Amazon S3 Storage Lens - 了解、分析和优化您的存储。S3 Storage Lens 提供了超过 29 个使用率和活动指标以及交互式仪表板,用于汇总整个组织、特定客户、 AWS 区域 、存储桶或前缀。

  • 存储类分析- 分析存储访问模式,以决定何时需要将数据移动到更经济高效的存储类别。

  • 带清单报告的 S3 清单- 审核和报告对象及其相应的元数据,并配置其他 Amazon S3 功能,在清单报告中采取措施。例如,您可以报告对象的复制和加密状态。有关清单报告中每个对象可用的所有元数据的列表,请参阅 Amazon S3 清单

强一致性

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

Amazon S3 的工作原理

Amazon S3 是一种数据元存储服务,可将数据以对象形式存储在存储桶中。对象指的是一个文件和描述该文件的任何元数据。存储桶是对象的容器。

要将数据存储在 Amazon S3 中,您需要先创建存储桶,然后指定存储桶名称和 AWS 区域 。然后,您将数据作为 Amazon S3 中的数据元上传到该存储桶。每个对象都带有密钥(或键名称),它是存储桶中对象的唯一标识符。

S3 提供了一些功能,您可以配置这些功能以支持您的特定用例。例如,您可以使用 S3 版本控制将对象的多个版本保持在同一个存储桶中,这允许您恢复意外删除或覆盖的对象。

存储桶及其中的对象是私有的,只有在您明确授予访问权限时才可以访问。您可以使用存储桶策略、AWS Identity and Access Management (IAM) 策略、访问控制列表 (ACL) 和 S3 访问点管理访问。

Buckets

存储桶是 Amazon S3 中用于存储对象的容器。您可以在存储桶中存储任意数量的对象,并且账户中最多可以有 100 个存储桶。要请求提高限制,请访问 Service Quotas 控制台

每个数据元都储存在一个存储桶中。例如,如果名为 photos/puppy.jpg 的对象存储在美国西部(俄勒冈)区域的 DOC-EXAMPLE-BUCKET 存储桶中,则可使用 URL https://DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com/photos/puppy.jpg 对该对象进行寻址。有关更多信息,请参阅访问存储桶

创建存储桶时,您可以输入存储桶名称,然后选择 AWS 区域 存储桶将驻留的位置。创建存储桶后,无法更改存储桶或区域的名称。存储桶名称必须遵循存储桶命名规则。您也可以将存储桶配置为使用 S3 版本控制或其他存储管理功能。

存储桶还:

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

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

  • 提供访问控制选项,例如存储桶策略、访问控制列表 (ACL) 和 S3 访问点,可用于管理对 Amazon S3 资源的访问。

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

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

Objects

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

存储桶中的对象由密钥(名称)版本 ID唯一标识(如果在存储桶上启用了 S3 版本控制)。有关对象的更多信息,请参阅 Amazon S3 对象概述

Keys

对象密钥(或密钥名称)是指存储桶中对象的唯一标识符。存储桶内的每个对象都只能有一个键。存储桶、对象密钥和可选版本 ID 的组合(如果为存储桶启用了 S3 版本控制)唯一标识每个数据元。因此,您可以将 Amazon S3 看作“存储桶 + 键 + 版本”与对象本身之间的基本数据映射。

将 Web 服务终端节点、存储段名、密钥和版本(可选)组合在一起,可唯一地寻址 Amazon S3 中的每个数据元。例如,在 URL https://DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com/photos/puppy.jpg 中,DOC-EXAMPLE-BUCKET 是存储桶的名称,/photos/puppy.jpg 是密钥。

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

S3 版本控制

您可以使用 S3 版本控制功能将对象的多个变量保留在同一存储桶中。使用 S3 版本控制功能,您可以保留、检索和恢复存储桶中的各个版本。您能够轻松从用户意外操作和应用程序故障中恢复数据。

有关更多信息,请参阅在 S3 存储桶中使用版本控制

版本 ID

在存储桶中启用 S3 版本控制时,Amazon S3 会为添加到存储桶中的每个对象生成唯一的版本ID。启用版本控制时存在于存储桶中的对象的版本 ID 为null。如果使用其他操作修改这些(或任何其他)对象,例如 CopyObjectPutObject 时,新对象将获得唯一的版本 ID。

有关更多信息,请参阅在 S3 存储桶中使用版本控制

存储桶策略

存储桶策略是基于资源的 AWS Identity and Access Management (IAM) 策略,您可以使用该策略向存储桶及其中对象授予访问权限。只有存储桶所有者才能将策略与存储桶关联。附加到存储桶的权限适用于存储桶所有者拥有的存储桶中所有对象。存储桶策略的大小限制为 20 KB。

存储桶策略使用基于 JSON 的访问策略语言,该语言是跨平台的标准语言 AWS。您可以使用存储桶策略添加或拒绝存储桶中对象的权限。存储桶策略根据策略中的元素允许或拒绝请求,包括请求者、S3 操作、资源以及请求的方面或条件(例如,用于发出请求的 IP 地址)。例如,您可以创建一个存储桶策略,该策略授予跨账户将对象上传到 S3 存储桶的权限,同时确保存储桶拥有者对上传的对象拥有完全控制权。有关更多信息,请参阅存储桶策略示例

在存储桶策略中,您可以在 Amazon 资源名称 (ARN) 和其他值上使用通配符来授予对数据元子集的权限。例如,您可以控制对以通用前缀或以给定扩展名结尾的对象组的访问,例如 .html

访问控制列表 (ACL)

作为一般规则,我们建议您使用基于 S3 资源的策略(存储桶策略和访问点策略)或 IAM 策略进行访问控制,而不是 ACL。ACL 是一种访问控制机制,早于基于资源的策略和 IAM。有关何时使用 ACL 而不是基于资源的策略或 IAM 策略的更多信息,请参阅 访问策略指南

您可以使用 ACL 向授权用户授予对单个存储桶和对象的读写权限。每个存储桶和对象都有一个作为子资源而附加的 ACL。ACL 定义了哪些 AWS 账户 或组将被授予访问权限以及访问的类型。有关更多信息,请参阅访问控制列表 (ACL) 概述

S3 访问点

Amazon S3 访问点被命名为网络终端节点,其专用访问策略描述了如何使用该终端节点访问数据。访问点可简化对 Amazon S3 中的共享数据集的大规模数据访问管理。访问点是附加到存储桶的命名网络终端节点,您可以使用这些存储桶执行 S3 对象操作(如 GetObjectPutObject)。

每个访问点都有自己的 IAM 策略。您还可以为每个访问点配置阻止公有访问设置。为了限制 Amazon S3 数据访问提供网络,您可以将任何访问点配置为仅接受来自私有云 (VPC) 的请求。

有关更多信息,请参阅使用 Amazon S3 访问点管理数据访问

Regions

您可以选择一个 AWS 区域 供 Amazon S3 存储您创建的存储桶。您可以选择一个区域,以便优化延迟、尽可能降低成本或满足法规要求。存储在 AWS 区域 中的对象永远不会离开该区域,除非显式地将它们传输或复制到另一个区域。例如,在欧洲(爱尔兰)区域存储的对象将一直留在欧洲。

注意

您只能在已为账户启用的 AWS 区域 中访问 Amazon S3 及其功能。有关启用区域创建和管理 AWS 资源的更多信息,请参阅 AWS 一般参考中的管理 AWS 区域

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

Amazon S3 数据一致性模型

Amazon S3 为所有 AWS 区域 中的 Amazon S3 存储桶中对象的 PUT 和 DELETE 请求提供了强大的先写后读一致性。此行为既适用于对新对象的写入,也适用于覆盖现有对象的 PUT 请求和 DELETE 请求。此外,Amazon S3 Select、Amazon S3访问控制列表 (ACL)、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 中之后,您可以将数据用于其他 AWS 服务。以下是您可能最常用使用的服务:

  • Amazon Elastic Compute Cloud (Amazon EC2) - AWS 云 中提供安全可扩展的计算容量。使用 Amazon EC2 可避免前期的硬件投入,因此您能够快速开发和部署应用程序。您可以使用 Amazon EC2 启动所需数量的虚拟服务器,配置安全性和联网以及管理存储。

  • Amazon EMR – 帮助企业、研究人员、数据分析师和开发人员轻松、经济实惠地处理海量数据。Amazon EMR 使用 Amazon EC2 和 Amazon S3 的 Web 规模基础设施上运行的托管 Hadoop 框架。

  • AWSSnow 系列 - 帮助那些需要在严格、非数据中心环境中以及在缺乏一致网络连接的位置运行操作的客户。您可以使用 AWS Snow Family 设备可在本地经济高效地访问 AWS 云 在互联网连接可能不是一个选项的地方。

  • AWS Transfer Family - 为使用安全外壳 (SSH) 文件传输协议 (SFTP)、通过 SSL (FTPS) 的文件传输协议 (FTPS) 和文件传输协议 (FTP) 直接进出 Amazon S3 或 Amazon Elastic File System (Amazon EFS) 的文件传输提供完全托管支持。

访问 Amazon S3

您可以通过以下任何方式使用 Amazon S3:

AWS Management Console

控制台是基于 Web 的用户界面,用于管理 Amazon S3 和 AWS 资源。如果您已注册 AWS 账户 账户,您可以通过登录 AWS Management Console 并从 AWS Management Console 主页中选择 S3 来访问 Amazon S3 控制台。

AWS Command Line Interface

可以使用 AWS 命令行工具,在系统的命令行中发出命令来执行 AWS (包括 S3)任务。

AWS Command Line Interface (AWS CLI) 针对大量 AWS 服务 提供了相关命令。AWS CLI 在 Windows、macOS 和 Linux 上受支持。要开始使用,请参阅 AWS Command Line Interface 用户指南。有关 Amazon S3 命令的更多信息,请参阅 AWS CLI 一般参考中的 s3apis3control

AWS开发工具包

AWS 提供的 SDK(开发工具包)包含各种编程语言和平台(Java、Python、Ruby、.NET、iOS、Android 等)的库和示例代码。AWS 开发工具包提供便捷的方式来创建对 S3 和 AWS 的编程访问。Amazon S3 是一项 REST 服务。您可以使用 AWS SDK 库向 Amazon S3 发送请求,包装了底层Amazon S3 REST API并简化了编程任务。例如,SDK 负责计算签名、加密签名请求、管理错误和自动重试请求等任务。有关 AWS 开发工具包的信息(包括如何下载及安装),请参阅 适用于 AWS 的工具

与 Amazon S3 的每一次交互都是经身份验证的或匿名的。如果您使用 AWS 开发工具包,库根据您提供的密钥计算用于身份验证的签名。有关如何向 Amazon S3 发出请求的更多信息,请参阅 提出请求

Amazon S3 REST API

Amazon S3 架构的设计与编程语言无关,使用 AWS 支持的接口来存储和检索对象。您可以访问 S3 和 AWS 以编程方式使用 Amazon S3 REST API。REST API 是面向 Amazon S3 的 HTTP 接口。借助 REST API,您可以使用标准的 HTTP 请求创建、提取和删除存储桶和对象。

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

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

如果您在应用程序中直接调用 REST API,您必须编写代码来计算签名并将它添加到请求中。有关如何向 Amazon S3 发出请求的更多信息,请参阅 提出请求

注意

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

为 Amazon S3 支付费用

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

Amazon S3 仅按照您的实际使用容量收费,没有任何隐性收费和超容量收费。此模型为您提供了一种可变成本服务,它可以随着您的业务增长而增长,同时为您提供 AWS 基础架构的成本优势。有关更多信息,请参阅 Amazon S3 定价

在注册 AWS 时,将在 AWS 中为您的 AWS 账户 自动注册所有服务,包括 Amazon S3。不过,您只需为使用的服务付费。如果您是 Amazon S3 的新客户,则可以免费开始使用 Amazon S3。有关更多信息,请参 AWS免费套餐

若要查看您的账单,请转到 AWS Billing and Cost Management 控制台中的账单和成本管理控制面板。要了解关于 AWS 账户 账单的更多信息,请参阅 AWS Billing and Cost Management 用户指南。如果您有关于 AWS 账单和 AWS 账户 的问题,请联系 AWS 支持

PCI DSS 合规性

Amazon S3 支持由商家或服务提供商处理、存储和传输信用卡数据,而且已经验证符合支付卡行业 (PCI) 数据安全标准 (DSS)。有关 PCI DSS 的更多信息,包括如何请求 AWS PCI Compliance Package 的副本,请参阅 PCI DSS 第 1 级