S3是Simple Storage Service的缩写,即简单存储服务。亚马逊的名词缩写也都遵循这个习惯,例如 Elastic Compute Cloud 缩写为EC2等等。
S3说的玄乎一点可以叫云存储,通俗一点就是大网盘。其概念类似于分布式文件系统,同Google的GFS应该在一个层面。
简单存储服务S3
S3的基本概念和操作
简单存储服务(Simple Storage Services,S3)构架在Dynamo之上,用于提供任意类型文件的临时或永久性存储。S3的总体设计目标是可靠、易用及低成本。
S3存储系统的基本结构,其中涉及两个基本概念:
桶 Bucket
- 桶是用于存储对象的容器,其作用类似于文件夹,但桶不可以被嵌套,即在桶中不能创建桶。
- 目前,Amazon限制了每个用户创建桶的数量,但没有限制每个桶中对象的数量。
- 桶的名称要求在整个Amazon S3的服务器中是全局唯一的,以避免在S3中数据共享时出现相互冲突的情况。
- 在对桶命名时,建议采用符合DNS要求的命名规则,以便与CloudFront等其他AWS服务配合使用。
对象 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 中有三大类型的授权用户:
所有者( Owner)—— 所有者是桶或对象的创建者,默认具是WRITE_ACP权限。所有者默认就是最高权限拥有者。
个人授权用户( User)—— 两种授权方式,一种是通过电子邮件地址授权的用户,另一种是通过用户ID进行授权。
组授权用户( Group )—— 一种是AWS用户组,它将授权分发给所有AWS账户拥有者;另一种是所有用户组,这是一种有着很大潜在危险的授权方式。