Amazon S3

基本概念

  • S3存储桶(bucket)必须在所有区域和所有账户中具有全局唯一的名称
  • S3存储桶创建在特定区域中
  • 从互联网传输数据到S3不收取数据传输费用

对象(Objects)

  • 每个对象(文件)都有一个键(key),即完整路径
  • 对象值是主体的内容
  • 最大对象大小为5TB(5000GB)
  • 如果上传超过5GB,必须使用分段上传
  • 元数据(系统或用户元数据的文本键/值对列表)
  • 标签(Unicode键/值对 - 最多10个 - 用于安全或生命周期管理)
  • 版本ID(如果启用了版本控制)

S3安全

用户基础

  • IAM策略,控制特定IAM用户允许的API调用

资源基础

  • 存储桶策略 - S3控制台中的存储桶范围规则 - 允许跨账户访问
  • 对象ACL - 更细粒度的控制(可禁用)
  • 存储桶ACL - 不太常用(可禁用)

S3存储桶策略

  • JSON格式的策略
  • 资源:存储桶和对象
  • 效果:允许/拒绝
  • 操作:要允许或拒绝的API集合
  • 委托人:应用策略的账户或用户
  • 用例:
    • 授予对存储桶的公共访问权限
    • 强制对象在上传时加密
    • 授予对另一个账户的访问权限(跨账户访问必须使用存储桶策略)

S3版本控制

  • 在存储桶级别启用
  • 能够恢复版本和轻松回滚
  • 默认版本ID为”null”
  • 暂停版本控制不会删除以前的版本

S3复制(跨区域复制和同区域复制)

  • 要求在源和目标存储桶中启用版本控制
  • 存储桶可以在不同的AWS账户中
  • 复制是异步的
  • 需要适当的S3 IAM权限
  • 用例:
    • CRR:合规性,低延迟访问,跨账户复制
    • SRR:日志聚合,生产和测试环境之间的实时复制
  • 启用复制后,只会复制新对象。现有对象应使用S3批处理复制进行复制
  • 对于删除操作:
    • 可以通过可选设置复制删除标记
    • 不会复制带有版本ID的删除,以避免恶意删除
  • 不支持链式复制(如果A复制到B,B复制到C,A不会复制到C)

S3耐久性和可用性

耐久性

  • 高耐久性(99.999999999%,11个9)跨多个可用区
  • 如果您在Amazon S3中存储1000万个对象,平均每10000年才会丢失一个对象
  • 所有存储类别的耐久性相同

可用性

  • 衡量服务的可用程度
  • 因存储类别而异
  • 例如:S3标准具有99.99%的可用性 = 每年不可用53分钟

S3分析

  • 提供存储类别分析,帮助您决定何时将对象转换到合适的存储类别
  • 针对标准和标准IA的建议(不适用于单区IA或Glacier)

S3请求者付费

  • 请求者(必须是经过身份验证的AWS用户)将支付网络成本,而存储桶所有者仍需支付存储成本

S3事件通知

  • 当事件发生时,发送通知到SQS、SNS、Lambda或Amazon EventBridge
  • Amazon EventBridge提供:
    • 使用JSON规则的高级过滤选项(元数据、对象大小、名称)
    • 多个目标 - 例如Step Functions、Kinesis Streams / Firehose
    • EventBridge功能 - 存档、重播事件和可靠交付
  • 可以进行对象名称过滤(例如*.jpg)
  • 可以创建任意数量的”S3事件”
  • 通常需要几秒钟,但可能需要1分钟以上

S3基线性能

  • 每个存储桶前缀每秒3500个put/copy/post/delete请求或5500个get/head请求

S3分段上传

  • 建议用于100MB以上的文件,5GB以上的文件必须使用
  • 可以帮助并行上传

S3传输加速

  • 将数据传输到附近的AWS边缘位置,然后AWS通过私有网络将数据转发到目标区域的存储桶
  • 与分段上传兼容
  • 支持上传和下载
  • 只为加速的传输付费

S3字节范围获取

  • 通过请求特定字节范围来并行化GET请求
  • 用例:加速下载或只需要部分数据(例如文件头)

S3 Select和Glacier Select

  • 使用简单的SQL通过执行服务器端过滤来检索更少的数据
  • 可以按行和列进行过滤
  • 减少网络传输和客户端CPU成本

S3批处理操作

  • 使用单个请求对现有S3对象执行批量操作
  • 一个作业由对象列表、要执行的操作和可选参数组成
  • S3批处理操作管理重试、跟踪进度、发送完成通知并生成报告
  • 步骤:
    1. 使用S3清单获取对象列表
    2. 使用S3 Select过滤对象
    3. 使用S3批处理操作处理对象

S3安全

服务器端加密(SSE)

使用Amazon S3管理的密钥的服务器端加密(SSE-S3)

  • 使用AWS管理和拥有的密钥加密S3对象
  • 使用AES-256
  • S3中所有新创建对象的默认选项
  • 无法设置密钥轮换,因为它由S3管理

使用存储在AWS KMS中的KMS密钥的服务器端加密(SSE-KMS)

  • 利用AWS KMS管理加密密钥
  • 用例:用户控制 + 使用CloudTrail审核密钥使用情况
  • 缺点:
    • 受KMS API调用配额限制
    • 上传数据使用GenerateDataKey()
    • 下载数据使用Decrypt()

使用客户提供的密钥的服务器端加密(SSE-C)

  • 当您想管理自己的加密密钥时使用

客户端加密

  • 数据必须在上传到S3之前和从S3下载后进行加密

传输中加密(SSL/TLS)

强制加密

  • 使用策略拒绝没有安全标头x-amz-server-side-encryption的PUT请求
  • 另一种方法是使用S3中的”默认加密”选项
  • 注意:在”默认加密”之前评估存储桶策略

跨源资源共享(CORS)

  • 源 = 方案(协议) + 主机(域名) + 端口
  • CORS是一种Web浏览器安全机制,允许您在请求来自另一个源时从一个S3存储桶检索图像、资产或文件

MFA删除

  • 要使用MFA删除,必须在存储桶上启用版本控制
  • 只有根账户可以启用/禁用MFA删除
  • 以下情况需要MFA:
    • 永久删除对象版本
    • 暂停存储桶的版本控制

S3访问日志

  • 您可以将对S3的任何请求记录到另一个S3存储桶中进行分析(避免循环)

S3预签名URL

  • 获得预签名URL的用户继承生成URL的用户的GET / PUT权限
  • 用例:授予临时访问权限
  • 示例:
    • 只允许登录用户从您的S3存储桶下载高级视频
    • 通过动态生成URL,允许不断变化的用户列表下载文件
    • 临时允许用户将文件上传到S3存储桶的精确位置

S3 Glacier保管库锁定

  • 当对象移动到Glacier保管库时,任何人都无法更改或删除它
  • 用例:合规性和数据保留

S3对象锁定(必须启用版本控制)

  • 在特定的预定义保留期内阻止删除对象
  • 保留模式 - 合规性:
    • 任何用户(包括根用户)都不能覆盖或删除对象版本
    • 不能更改对象的保留模式,也不能缩短保留期
  • 保留模式 - 治理:
    • 某些用户具有特殊权限可以更改保留或删除对象
  • 法律保留:
    • 无限期保护对象,独立于保留期
    • 可以使用s3:PutObjectLegalHold IAM权限自由放置和移除

S3访问点

  • 每个访问点都有自己的DNS和策略,以限制谁可以访问它
  • 特定的IAM用户/组
  • 每个访问点一个策略 => 比复杂的存储桶策略更易于管理

S3对象Lambda

  • 使用AWS Lambda函数在调用方应用程序检索对象之前更改对象
  • 用例:
    • 编辑个人身份信息以用于分析或非生产环境
    • 在数据格式之间转换,例如将XML转换为JSON
    • 使用调用方特定详细信息(如请求对象的用户)即时调整图像大小和添加水印