关于 S3 你希望自己不需要知道的事情

主要观点:

  • 介绍了关于 AWS S3 的一些不常被注意到的特性和潜在风险。
  • 强调了 S3 的 API 设计特点、访问控制相关问题等。

关键信息和重要细节:

  • S3 是 AWS 最早发布的服务之一,其 API 设计有独特之处,部分请求需发送到通用端点,部分需发送到目标桶的 URL。
  • 未授权访问 S3 桶是常见的严重数据泄露情况,如媒体报道的多个案例。
  • 一些看似无害的 S3 策略可能导致严重后果,如无需认证即可删除桶。
  • 除 ListObjects 外,还有其他方式可获取对象键,如 s3:ListBucketVersions 和 s3:ListMultipartUploads。
  • 未完成的多部分上传(Schrodinger’s objects)在 Web 控制台难以列出,可通过特定命令或 API 操作处理,且未完成的部分会占用存储资源。
  • 列出未完成的多部分上传会返回发起上传的主体 ARN。
  • AWS 历史上,ACL 可基于电子邮件授予访问权限,可通过特定 API 操作检查桶的所有者等。
  • 存储类由上传者选择,这会影响桶所有者的存储和访问费用,可通过 IAM 策略或生命周期策略进行控制。
  • 大多数 S3 对象相关事项由上传者控制,如标签、Object Lock 等,预签名 URL 也存在安全风险。
  • 通过 ListBucket 操作的特定头部可检查特定账户 ID 是否为给定可访问桶的所有者,使用 ListBucket API 参数“fetch-owner”可获取更详细的桶所有者信息。
  • S3 的键是区分大小写的,这可能导致应用程序出现问题,且对象键可使用多种 UTF-8 字符,某些字符可能引发问题。
  • 即使 ACL 关闭、资源策略受限且阻止公共访问已启用,仍可通过 Amazon CloudFront 分布或 Cognito 身份池等方式使桶公开访问。

总结:本文详细阐述了 AWS S3 的各种特性和潜在风险,提醒用户在使用 S3 时要注意这些细节,以避免数据泄露等安全问题。

阅读 12
0 条评论