AWS Parameter Store:不同环境的不同密钥

AWS Parameter Store: Different keys for different environments

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

.env 文件中的密钥在生产环境和暂存环境中是相同的,只是值不同。 因此,加载这些值的代码在生产和暂存之间是相同的。 现在我们正在尝试将这些 keys/values 移动到 AWS Paramter Store,并且由于 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 角色就可以控制他们可以访问的 哪些 参数。代码可以尝试检索这两个参数,然后使用成功返回的任何一个,或者可以简单地使用策略来确保访问正确的参数。