在 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 指定敏感环境变量

ebextensions 文件中有效密钥的规则是啥?

如何在 .ebextensions 中获取负载均衡器的 ARN?

Beanstalk 部署忽略了我在 .ebextensions 中的 nginx 配置文件