2

我们正在尝试将一些密钥和机密从 .env 移动到 AWS Parameter Store 以提高安全性。我们有两个 EC2 实例,一个用于生产环境,另一个用于暂存环境。每个实例都有在 public 文件夹下的 .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');
}
4

1 回答 1

2

这里有两个方面:

  • 知道使用哪个环境
  • 限制可以使用的环境

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

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

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

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

于 2021-01-13T07:12:23.820 回答