如何查找任意 S3 存储桶的 AWS 账户 ID

一种新技术通过滥用 IAM 条件匹配,展示了如何推断任意给定 S3 存储桶所属的 AWS 账户 ID,引发了人们对哪些原本隐含的元数据现在可以被映射和关联的讨论。评论者大多同意 AWS 账户 ID 本就不应被视为秘密——AWS 也明确这么说——但在是否应因运营安全或关联风险而将其视为“敏感信息”这一点上存在争论。许多人认为,这提醒我们安全绝不能依赖隐藏标识符或模糊性,而真正需要解决的危险是错误配置的跨账户策略和元数据泄露。

发现范围

  • 该技术利用 S3 存储桶策略和带通配符的 s3:ResourceAccount 条件,推断某个存储桶归属哪个 AWS 账户。
  • 许多人认为这更像是一种有趣的旁路信息,而不是直接突破:你仍然需要错误配置或额外信息才能获得访问权限。

AWS 账户 ID 是秘密还是敏感信息?

  • AWS 文档明确说明,账户 ID 不是秘密、敏感或机密信息。
  • 一种观点:账户 ID 必须被视为公开信息;把系统设计建立在其保密性之上是糟糕的安全实践,是一种“错误假设”。
  • 另一种观点:它们虽然不是“秘密”,但仍然“敏感”;泄露会给攻击者增加价值,在可行时应尽量减少。

运营安全与元数据泄露

  • 主要担忧不是原始 ID,而是它们之间的关联:
    • 将多个存储桶关联到同一所有者(例如不同品牌、客户、内部项目)。
    • 把“隐藏的”或预发布存储桶与已知的生产账户关联起来。
    • 商业情报 / 间谍活动用途(例如,从存储桶名称中了解项目)。
  • 有人认为这属于 opsec,而不是安全问题;也有人认为 opsec 仍然确实重要。

“安全性依赖于模糊性”之争

  • 许多人认为,模糊性最多只是薄弱、不可轮换的一层,绝不应被当作控制手段来依赖。
  • 也有人反驳说,“非公开但非秘密”的信息本身就是一个合理的 opsec 问题,并不意味着你把它当作访问控制机制。
  • 共识点:不要设计 IAM 或威胁模型时假设账户 ID 会一直保持隐藏。

IAM 通配符与策略设计

  • 许多人对 IAM 允许在账户 ID 上进行通配符(StringLike)匹配感到惊讶;不少人认为这没有正当的访问控制用途。
  • 给出的解释包括:
    • 通用、宽松类型的策略语言,为了简化而在各处都使用字符串操作符。
    • 可能但值得怀疑的用途(按前缀对许多账户分组、分片、减少策略大小)。

相关枚举向量与工具

  • AWS 访问密钥 ID 内嵌了账户 ID,并会出现在预签名 URL 中,因此许多 ID 可能早已在泄露。
  • 其他全局命名空间(例如 AMI 供应商、其他公开资源)也会自然暴露账户 ID。
  • 带组织级聚合和 Athena 的 AWS Config 被强调为在内部查找某个资源归属哪个账户的“正确”方式,不过它并不是免费的。