有没有办法在AWS Elastic Beanstalk中隐藏环境变量?

时间:2016-12-22 12:43:20

标签: amazon-web-services environment-variables elastic-beanstalk

我的弹性beanstalk应用程序有许多机密的环境变量(例如API密钥,散列机密等)。我想设置AWS,以便大多数开发人员可以查看和编辑配置等,但无法看到其中一些环境变量。如果我们每次开发人员离开时都必须更改所有这些,那将是一个巨大的开销。

从使用权限开始,似乎(至少使用Elastic Beanstalk)您可以完全访问配置或者无法看到任何配置 - 并且完全删除访问意味着开发人员甚至不能做基本的事情,比如看看部署失败的原因。

我想知道是否有另一种环境变量方法可以让我给devs访问这个配置,但掩盖了高度机密的东西。我可以将秘密env vars放在服务器上的文件中吗?

还有另一种方法吗?

2 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使用Elastic Beanstalk EC2实例的IAM角色。您可以将信息存储在开发人员无法访问的资源中,但可以由EC2实例访问,因为它承担了某个角色。

亚马逊有blog post如何使用S3加密存储桶和AWS KMS来存储加密密钥。这是关于在EC2容器服务中将它用于Docker容器,但原理是相同的。

答案 1 :(得分:0)

这就是我使用EB环境变量设置RDS密码的方式

$(aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:eu-central-1:<aws-account-id>:secret:<secret-arn> --region eu-central-1 | jq --raw-output '.SecretString' | jq -r .password)

密码以json的形式存储在AWS Secrets Manager中

{
  "username": "<db-user>",
  "engine": "mysql",
  "dbname": "<db-name>",
  "host": "<rds-host-name>.eu-central-1.rds.amazonaws.com",
  "password": "<password>",
  "port": 3306,
  "dbInstanceIdentifier": "<db-identifier>"
}

RDS password set in Elastic Beanstalk as environment variable