在 ebextensions 文件中使用环境变量
Posted
技术标签:
【中文标题】在 ebextensions 文件中使用环境变量【英文标题】:Use environment variable in ebextensions file 【发布时间】:2018-09-12 13:28:30 【问题描述】:我有三个 AWS 账户。我已将我的 SSL 证书文件存储在其中一个 AWS 账户(比如 AWS1)中的 S3 中。我创建了一个 IAM 角色,该角色授予“GetObject”对 AWS1 中的 S3 存储桶的访问权限。然后,我为我在另一个 AWS 账户(比如 AWS2)中运行的单个实例应用程序配置了一个 ebextensions 文件,以使用我在 AWS1 中创建的 IAM 角色的 AccessKey 和 Secret 从 AWS1 中的 S3 存储桶下载 SSL 证书。
以下是我在 AWS2 中的应用程序的 .ebextensions 中的 http-single-instance.config 文件的一部分
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["aws1-bucket"]
accessKeyId: "AWS1IAMACCESSKEY"
secretKey: "AWS1IAMSECRET"
但正如您所见,我必须将 AWS1 IAM 密钥值直接放入 AWS2 中的应用程序源代码中才能使其正常工作。除了将 accessKeyId 和 secretKey 的值放在实际的源代码中之外,是否可以从环境变量或 S3 以某种方式加载这些值?所以最后,如果我能得到类似的东西
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["aws1-bucket"]
accessKeyId: AWS2ENVACCESSKEYID
secretKey: AWS2ENVSECRETKEY
对于在同一 AWS 账户中运行的应用程序,我已按照本文档中提供的说明进行操作 - https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-storingprivatekeys.html 效果很好。我目前拥有的解决方案还可以根据需要使用正在下载的 SSL 证书,但我只是想知道是否有办法更安全地执行此操作。
非常感谢任何帮助。谢谢!
【问题讨论】:
为什么不使用跨账户 S3 权限?让账户 2 和 3 可以访问账户 1 S3? docs.aws.amazon.com/AmazonS3/latest/dev/…。这样你就不需要分享任何秘密 【参考方案1】:请注意,S3 可以使用 ACL 授予对其他账户的访问权限,因此只要授予跨账户访问权限,它们不在同一个 AWS 账户下应该不是问题。
将其与 IAM 角色结合使用仍应支持您的用例,而无需在代码中放置非旋转键。
请参阅此处了解如何授予跨账户访问权限:https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html
【讨论】:
以上是关于在 ebextensions 文件中使用环境变量的主要内容,如果未能解决你的问题,请参考以下文章
从 .ebextensions 配置文件访问 Elastic Beanstalk 环境属性
使用配置文件 (.ebextensions) 在自定义 VPC 中为 TCP 直通配置 Elastic Beanstalk 环境的负载均衡器
如何在部署时使用 Elastic Beanstalk 指定敏感环境变量