AWS Parameter Store:不同环境的不同键

问题描述

我们正尝试将一些密钥和机密从 .env 移至 AWS Parameter Store 以提高安全性。 我们有两个 EC2 实例,一个用于生产环境,另一个用于暂存环境。 每个实例都在公共文件夹下的 .env 文件中定义了键/值,因此它对公共访问是隐藏的。

.env 文件中的键在生产环境和暂存环境中是相同的,只是值不同。 所以加载这些值的代码在生产和登台之间是相同的。 现在我们正在尝试将这些键/值移动到 AWS 参数存储,并且由于 Parameter Store 是账户级别范围,

有没有办法根据 EC2 实例分配不同的值?

例如

secret = getSecretFromEnv('MY_KEY'); // different values are loaded depending on EC2 instance

已经成为(我们试图避免做的事情)

if prod {
   secret = getSecureParameterFromAws('MY_PROD_KEY');
} else {
   secret = getSecureParameterFromAws('MY_STAGING_KEY');
}

解决方法

这里有两个方面:

  • 了解要使用的环境
  • 限制可以使用的环境

如果生产系统和测试系统位于不同的 AWS 账户中,则它们可以使用相同的密钥访问参数,因为值会不同。

如果系统在相同 AWS 账户中,那么代码需要知道自己的环境,以便它请求正确的参数(通过不同的密钥) .

此信息可以在配置文件中提供,或者,如果两个实例相同,则可以向实例添加标签。代码可以在自己的实例上检查标签,然后检索适当的参数。

这可以通过通过为每个实例分配不同的 IAM 权限来限制对参数的访问来进一步实施。这样,IAM 角色控制了他们可以访问的 参数。代码可以尝试检索两个参数,然后使用成功返回的任何一个,或者可以简单地使用策略来确保访问正确的参数。