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

时间:2018-11-29 17:15:52

标签: amazon-web-services amazon-s3

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

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

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

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

我们还考虑过将参数存储在AWS Systems Manager的参数存储中,但这似乎有点https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html

1 个答案:

答案 0 :(得分:1)

通常,您应该从配置中读取 all 个外部标识符(存储桶名称,数据库名称等)。如果您对标识符进行硬编码,则意味着您必须重建软件才能进行任何更改。

有许多不同的方法来存储此配置。参数存储是一个很好的选择,因为它与帐户绑定,还支持加密的机密存储。

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

更新

我个人认为这是一个hack,但是如果您真的没有其他方法可以管理配置...

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