我的 Elastic beanstalk 应用程序有许多机密的环境变量(例如 API 密钥、哈希密钥等)。我想设置 AWS,以便大多数开发人员可以查看和编辑配置等,但看不到其中一些环境变量。例如,如果每次开发人员离开时我们都必须更改所有这些,那将是一笔巨大的开销。
从使用权限来看,似乎(至少对于 Elastic Beanstalk)您可以完全访问配置,也可以看不到任何配置 - 完全删除访问权限意味着开发人员甚至无法执行基本的操作,例如了解部署失败的原因。
我想知道是否有另一种环境变量方法可以让我让开发人员访问此配置,但掩盖高度机密的内容。我可以将秘密环境变量放入服务器上的文件中吗?
还有其他方法吗?
这就是我如何使用 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>"
}
解决此问题的一种方法是使用 Elastic Beanstalk EC2 实例的 IAM 角色。您可以将信息存储在开发人员无法访问但 EC2 实例可以访问的资源中,因为它承担了特定的角色。
Amazon 有一篇博客文章,介绍如何使用 S3 加密存储桶和 AWS KMS 来存储加密密钥来执行此操作。这是关于将其用于 EC2 容器服务中的 Docker 容器,但原理是相同的。
我找到了一种使用自定义 IAM 策略来隐藏所有变量的方法,以拒绝描述弹性 beanstalk 环境
这不是完整版本,但请将其添加到您的政策中。
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:DescribeApplications",
"elasticbeanstalk:DescribeEnvironments",
"elasticbeanstalk:DescribeEnvironmentManagedActionHistory",
"elasticbeanstalk:DescribePlatformVersion",
"elasticbeanstalk:DescribeEnvironmentResources"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:ListPlatformVersions"
],
"Resource": "*"
},
{
"Effect": "Deny",
"Action": [
"elasticbeanstalk:Update*",
"elasticbeanstalk:Create*",
"elasticbeanstalk:Delete*",
"elasticbeanstalk:RestartAppServer",
"elasticbeanstalk:SwapEnvironmentCNAMEs",
"elasticbeanstalk:DescribeConfigurationSettings",
"elasticbeanstalk:TerminateEnvironment"
],
"Resource": "*"
}
]
}