AWS-S3
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批处理操作管理重试、跟踪进度、发送完成通知并生成报告
- 步骤:
- 使用S3清单获取对象列表
- 使用S3 Select过滤对象
- 使用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
- 使用调用方特定详细信息(如请求对象的用户)即时调整图像大小和添加水印
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mio's blog!