克服S3全局存储桶名称唯一性要求

3
我们已将开发/测试/生产等工作负载分别放置在AWS组织中的不同账户中 https://aws.amazon.com/organizations/
S3要求存储桶名称在全球范围内唯一。由于这个原因,我们不能在每个账户中拥有一个名为“OurS3Data”的S3存储桶。虽然我们可以在账户之间共享一个存储桶,但是我们不想在账户之间混合数据。
有什么策略可以解决这个问题?
我考虑使用Route53 / DNS指向不同的存储桶,使'OurS3Data.CompanyInternal.Com'始终指向该账户内的特定存储桶 - 但我们使用多个版本的AWS SDK从代码引用此存储桶,我非常确定这是不被支持的。
我们还考虑将参数存储在AWS系统管理器参数存储库中,但这似乎是一种麻烦的方法https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html

1
一种常见的方法是使用环境特定的后缀,例如mybucket-prod,mybucket-dev,mybucket-qa。您的部署工具应该知道它们所针对的环境,并可以附加相关后缀。这也有助于人们认识到存储桶(或更一般的资源)的目的。 - jarmod
1个回答

0
通常情况下,您应该从配置中读取所有外部标识符(存储桶名称、数据库名称等)。如果硬编码标识符,则意味着您必须重新构建软件才能更改任何内容。
有许多不同的方法来存储此配置。参数存储是一个很好的选择,因为它与帐户绑定,并且还支持加密存储机密信息。
其他一些方法包括在部署机器上已知位置的外部配置文件、环境变量(这是12 factor app的首选方法)或不同的配置服务,例如Consul
更新
个人而言,我认为这是一种hack方法,但如果您真的没有其他管理配置的方法...
将您的存储桶命名为您的帐户ID,并使用AWSSecurityTokenService.getCallerIdentity()检索该ID。如果您不想使用实际ID作为存储桶名称,则可以应用哈希函数(但请注意,存储桶名称限制为63个字符)。

我明白你的意思 - 我们几乎在所有事情上都使用DNS,这样我们就可以在不改变代码的情况下移动东西。恰好在这种情况下,DNS对于S3无效。 - Dlongnecker
@Dlongnecker - 你是如何存储数据库凭据的? - guest
嗨,客人。我们还没有完全解决我们的秘密存储问题,但显然需要一些配置管理,并且“S3BucketLocation”也可以成为其中之一。 - Dlongnecker
我同意,账户ID这个东西有点像是一个hack - 如果我要这样做的话,我可能会使用一些配置管理而不是参数存储。 - Dlongnecker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接