【问题标题】:Overcoming S3 Global Bucket Name Uniqueness Requirement克服 S3 全局存储桶名称唯一性要求
【发布时间】:2019-05-01 19:55:27
【问题描述】:

我们已通过 AWS Orgnaizations 将开发/测试/生产等工作负载分离到不同的账户中。 https://aws.amazon.com/organizations/

S3 要求存储桶名称在全球范围内是唯一的。因此,我们不能在每个帐户中都有一个 S3 存储桶,例如“OurS3Data”。我们可以在帐户之间共享一个存储桶,但我们不想在帐户之间混合数据。

有什么策略可以克服这个问题?

我考虑使用 Route53/DNS 指向不同的存储桶,因此“OurS3Data.CompanyInternal.Com”始终指向账户中特定于账户的存储桶 - 但我们使用多个版本的 AWS 开发工具包从代码中引用此存储桶,并且我很确定这是不支持的。

我们也考虑过在 AWS Systems Manager Parameter Store 中存储一个参数,但这似乎是个麻烦https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html

【问题讨论】:

  • 一种常见的方法是使用特定于环境的后缀,例如 mybucket-prod、mybucket-dev、mybucket-qa。您的部署工具应该知道它们所针对的环境,并且可以附加相关的后缀。它还可以帮助人们识别存储桶(或资源,更一般地说)的用途。

标签: amazon-web-services amazon-s3


【解决方案1】:

一般来说,您应该从配置中读取所有外部标识符(存储桶名称、数据库名称等)。如果您对标识符进行硬编码,则意味着您必须重新构建软件才能更改任何内容。

有许多不同的方式来存储此配置。参数存储是一个不错的选择,因为它与帐户绑定,并且还支持秘密的加密存储。

其他一些方法包括部署机器上已知位置的外部配置文件、环境变量(这是12 factor app 的首选方法)或不同的配置服务,例如Consul

更新

就我个人而言,我认为这是一种 hack,但如果你真的没有其他方法来管理配置......

以您的帐户 ID 命名您的存储桶,并使用 AWSSecurityTokenService.getCallerIdentity() 检索该 ID。如果您不想使用实际 ID 作为存储桶名称,可以应用哈希函数(但请注意,存储桶名称限制为 63 个字符)。

【讨论】:

  • 我明白你在说什么 - 我们几乎所有事情都使用 DNS,因此我们可以在不更改代码的情况下移动内容。在这种情况下,DNS 对 S3 不起作用
  • @Dlongnecker - 你如何存储数据库凭据?
  • 触摸,客人。我们还没有敲定我们的秘密存储,但显然需要一些配置管理,没有理由不能成为其中之一
  • 我同意,帐户 id 是一个 hack - 如果我要这样做,我还不如使用参数存储以外的一些配置管理。
猜你喜欢
  • 2020-04-25
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2022-06-21
相关资源
最近更新 更多