S3存储桶
1.S3是什么?
Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,可以把这个想成一个文件夹,文件夹里面可以放txt、html、vedio等各种文件。S3的存储并不贵,但是每次的查找也都需要花钱。
与之相对的还有一个EBS (Elastic Block Storage),即块存储,这个在EC2的章节我们简单介绍过,就是用来保存整个操作系统的。
2.S3是怎么管理对资源的访问的
默认情况下,只有资源的拥有者才能访问S3中的资源。但是我们可以基于访问策略来授予执行资源操作的权限。
基于资源的策略 – 存储桶策略和访问控制列表 (AccessControlList, 即ACL) 是基于资源的策略。
基于IAM的策略 - 用户策略。
-
ACL: ACL有两种,一种是存储桶ACL,这个可以用来统一管理桶内所有的对象,但是当一些特殊的对象需要其他策略时,我们可以修改对象的ACL,满足特定的需求。
-
事实上存储桶 ACL 的唯一建议的使用案例是授予 Amazon S3 日志传输组写入权限,以便将访问日志对象写入您的存储桶。
-
而对于对象ACL来说,适用的场景是其他AWS账号上传了对象,但是此时存储桶的拥有者并不拥有这些对象的权限(也不能对其授权,虽然桶拥有者可以对其进行删除或者拒绝任何人访问,但是他自己看不到)。此时创建对象的 AWS 账户就使用对象 ACL 授予权限。对象 ACL 是管理对非存储桶拥有者所有的对象的访问权限的唯一方法。
AWS 账户资源示意图,包括具有存储桶 ACL 和存储桶策略的 S3 存储桶,以及具有对象 ACL 的 S3 对象。
-
桶策略
-
存储桶和用户策略都支持授予所有 Amazon S3 操作的权限,但是,用户策略用于管理账户中用户的权限。对于其他 AWS 账户或其他账户中用户的跨账户权限,则必须使用存储桶策略。
-
桶策略和用户策略都基于Json来实现,存储桶策略示例
-
用户策略
- 在IAM用户中配置用户对S3的访问权限。
-
阻止公有访问(存储桶设置)
-
S3还有一个设置可以来帮助我们轻松地限制共有访问。
-
默认情况下,新存储桶、访问点和对象不允许公有访问。但是,用户可以修改存储桶策略、访问点策略或对象权限以允许公有访问。S3 阻止公有访问设置会覆盖这些策略和权限,以便于您可以限制这些资源的公有访问。
-
如果ACL / IAM策略/存储桶策略之间发生冲突,例如,如果“允许”和“拒绝”都应用于相同的资源和用户,则“拒绝”始终会获胜。
应用最小特权原则。不建议将策略直接附加到用户,而是创建具有附加权限的组,然后将该用户添加到该组。例如,我们可以有一个具有对S3的完全访问权限的Developer组,一个具有只读访问权限的Finance组。如果需要限制对存储桶的访问,那么可以使用存储桶策略。仅在需要配置对单个文件的访问权限时才使用ACL。
3. S3的一致性模型
-
对新对象的PUTs操作具有写后读一致性(Read after Write consistency)
-
即如果向S3存储桶写入一个新的文件(PUT操作),那么S3在返回HTTP 200成功状态前会先把数据同步到AWS的多个物理位置
-
即向S3存储桶写入一个新的数据,马上就可以读取这个新的数据
-
-
对覆盖PUTs操作以及DELETES操作具有最终一致性(Eventual consistency)
-
对于文件的更新和删除,结果不会马上显现,但最终会显现
-
如果对一个已有的数据进行覆盖(覆盖PUTS操作)然后马上尝试读取该数据,因为数据可能还没有同步,因此有可能读取到的是旧的数据
-
如果删除一个已有的数据(DELETES操作)然后马上尝试读取该数据,因为数据可能还没有同步,因此有可能还能读到这个数据
-
4. S3的其他一些特性
-
S3的命名空间由所有AWS用户共享,别人取过了我们就不能取啦。
-
S3存储桶需要指定region,并且数据会一直存在于这个region中,如果需要灾难恢复,可以配置跨区域的S3同步,即在另一个region中创建一个s3,然后配置同步策略。
-
S3支持服务端加密,Amazon S3 可以将对象保存到其磁盘上之前对其进行加密,并在下载对象时对其进行解密。
-
包括传输过程中的SSL/TLS加密
-
通过KMS/S3托管密钥等方式来静态加密
-
5. S3的接入点(acess point)是什么?
我们可以为特定的Virtual Private Cloud (VPC) 来自定义访问点策略,每个访问点都具有不同的权限和网络控制,这个策略会与附加到底层存储桶的存储桶策略结合使用。
我们只能使用访问点来执行对象操作。
6. S3的版本控制
-
会保存一个文件的所有版本(包括所有写入历史和删除信息)
-
一旦开启了版本控制,就不能取消,只能进行暂停
-
版本控制启动后可以使用MFA Delete功能,即在删除一个文件的时候需要另外提供Token信息(软Token或者硬件Token),以此增加文件的安全性,减少误删的概率
-
跨区域复制(Cross Region Replication)需要源S3存储桶和,目的S3存储桶都开启版本控制
7. S3的不同存储类型
-
Standard – 默认的存储类:如果上传对象时未注明则S3会分配这个类型的存储
- Intelligent-Tiering : 在访问模式发生变化时通过在四个访问层之间移动对象来自动节约成本,适合未知或变化的访问对象
-
Reduced Redundancy – 低冗余存储(RRS):可用于存储可再生的数据,因为该类型的文件持久性最低,比如用来保存缩略图等
-
Standard – IA(Infrequently Accessed):用于保存不经常访问的数据,但是需要访问的时候也能很快地访问到。存储的价格比标准S3便宜,但是读取的费用比标准的S3高,也因为如此才要把不经常访问的数据放到这种类型的S3上。并且数据跨了多个AWS地理位置。
-
Onezone – IA:同上,但数据只保存到一个AWS可用区内
-
Glacier:非常便宜,仅用于做归档。从Glacier读取数据需要花费3-5个小时。
8. S3生命周期策略
生命周期可以和版本控制结合使用,来管理文件当前版本和历史版本
举个例子:
生命周期管理可以做到(X,Y,Z为自定义天数)
-
(转换操作)在文件创建的X天后将文件移动到Standard – IA (Infrequently Accessed)
-
(转换操作)再过Y天将文件移动到Glacier
-
(过期操作)再过Z天将文件永久删除
9. S3上的静态网站
S3可以轻松托管你的静态网站,而并不需要额外的EC2、ECS服务器等等,并且他可以自动伸缩。
截屏2021-02-22 上午12.13.4310. S3上的CloudFront 和传输加速
利用AWS CloudFront CDN(Content Delivery Network)网络的边缘节点(Edge Locations)可以加速S3传输的过程。
-
边缘站点(Edge Location):边缘站点是内容缓存的地方,它存在于多个网络服务提供商的机房,它和AWS区域和可用区是完全不一样的概念。
-
源(Origin):这是CDN缓存的内容所使用的源,源可以是一个S3存储桶,可以是一个EC2实例,一个弹性负载均衡器(ELB)或Route53,甚至可以是AWS之外的资源。
-
你不只是可以从边缘站点读取数据,你还可以往边缘站点写入数据(比如上传一个文件),边缘站点会将你写入的数据同步到源上,用这种方式可以大大加快响应速度。
-
在CloudFront上的文件会被缓存在边缘节点,缓存的时间是TTL(Time To Live)。文件存在超过这个时间,缓存会被自动清除
如果在到达TTL时间之前,你希望更新文件,那么你也可以手动清除缓存,但你将会被AWS收取一定的费用。
-
-