简单存储服务S3

S3是Simple Storage Service的缩写,即简单存储服务。亚马逊的名词缩写也都遵循这个习惯,例如 Elastic Compute Cloud 缩写为EC2等等。

S3说的玄乎一点可以叫云存储,通俗一点就是大网盘。其概念类似于分布式文件系统,同Google的GFS应该在一个层面。

简单存储服务S3

S3的基本概念和操作

简单存储服务(Simple Storage Services,S3)构架在Dynamo之上,用于提供任意类型文件的临时或永久性存储。S3的总体设计目标是可靠、易用及低成本。

S3基本架构

S3存储系统的基本结构,其中涉及两个基本概念:

  1. 桶 Bucket

    • 桶是用于存储对象的容器,其作用类似于文件夹,但桶不可以被嵌套,即在桶中不能创建桶。
    • 目前,Amazon限制了每个用户创建桶的数量,但没有限制每个桶中对象的数量。
    • 桶的名称要求在整个Amazon S3的服务器中是全局唯一的,以避免在S3中数据共享时出现相互冲突的情况。
    • 在对桶命名时,建议采用符合DNS要求的命名规则,以便与CloudFront等其他AWS服务配合使用。
  2. 对象 Object

    对象包括 数据(任意类型,但大小会受到对象最大容量的限制) 和 元数据(数据内容的附加描述信息,通过名称-值(name-value)集合的形式来定义)

元数据的内容定义如下:

元数据名称 名 称 含 义
last-modified 对象被最后修改的时间
ETag 利用MD5哈希算法得出的对象值
Content-Type 对象的MIME(多功能网际邮件扩充协议)类型,默认二进制/八位组
Content-Length 对象数据长度,以字节为单位

S3中支持对桶和对象的操作,主要包括:Get、Put、List、Delete和Head。

下表列出了五种操作的主要内容。

操 作 目 标 Get Put List Delete Head
获取桶中对象 创建或更新桶 列出桶中所有键 删除桶
对象 获取对象数据和元数据 创建或更新对象 删除对象 获取对象元数据

S3的数据一致性模型

与其构建的基础Dynamo相同,S3中采用了最终一致性模型。

序列 用户操作 结果
1 写入一个新的对象并立即读取它 服务器可能返回“键不存在”
2 写入一个新的对象并立即列出桶中已有的对象 该对象可能不会出现在列表中
3 用新数据替换现有的对象并立即读取它 服务器可能返回原有的数据
4 删除现有的对象并立即读取它 服务器可能返回被删除的数据
5 删除现有的对象并立即列出桶中的所有对象 服务器可能列出被删除的对象

S3的安全措施

身份认证(Authentication)

由加密 Hash 函数、共享密钥的消息认证协议 经过 HMAC-SHA1 数字签名来保证数据完整性、数据可靠性、数据安全性

身份认证流程

访问控制列表(Access Control List)

访问控制列表是S3提供的可供用户自行定义的访问控制策略列表。S3的访问控制策略(ACP)提供如下所列的五种访问权限。

权 限 允许操作目标 具体权限内容
READ 列出已有桶
READ 对象 读取数据及元数据
WRITE 创建、覆写、删除桶中对象
READ_ACP 读取桶的ACL
READ_ACP 对象 读取对象中的ACL
WRITE_ACP 覆写桶的ACP
WRITE_ACP 对象 覆写对象的ACP
FULL_CONTROL 允许进行以上所有操作,是S3提供的最高权限
FULL_CONTROL 对象 允许进行以上所有操作,是S3提供的最高权限

另外 S3 的 ACL 不具有继承性

S3 中有三大类型的授权用户:

  1. 所有者( Owner)—— 所有者是桶或对象的创建者,默认具是WRITE_ACP权限。所有者默认就是最高权限拥有者。

  2. 个人授权用户( User)—— 两种授权方式,一种是通过电子邮件地址授权的用户,另一种是通过用户ID进行授权。

  3. 组授权用户( Group )—— 一种是AWS用户组,它将授权分发给所有AWS账户拥有者;另一种是所有用户组,这是一种有着很大潜在危险的授权方式。