Elastic beanstalk 实例无法访问私有 S3 文件

Posted

技术标签:

【中文标题】Elastic beanstalk 实例无法访问私有 S3 文件【英文标题】:Elastic beanstalk instance cannot access private S3 file 【发布时间】:2017-08-06 20:43:11 【问题描述】:

我正在尝试使用 SSL 设置 AWS 弹性 beanstalk 单实例,我想将私钥存储在 S3 中并让实例在部署后检索密钥(以避免将私钥提交给版本控制) .

根据http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-storingprivatekeys.html 上的 AWS 文档,我已经设置了我的配置,存储在 myproject/.ebextensions/privatekey.config:

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["my_bucket"]
          roleName:
            "Fn::GetOptionSetting":
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  /path/to/private/key:
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://s3.eu-west-2.amazonaws.com/my_s3_bucket/my_private_key

但是,每当我部署时,我都会收到错误消息: Command failed on instance. Return code: 1 Output: Failed to retrieve https://s3.eu-west-2.amazonaws.com/my_bucket/my_private_key: 'NoneType' object has no attribute 'is_default'.

我已经检查了 elastic beanstalk 中的配置,并且该项目具有 aws-elasticbeanstalk-ec2-role 的实例配置文件,并且该角色肯定具有正确的 S3 策略(我什至已为其分配了 AmazonS3FullAccess,它不应该是必须的!)

当我使用可公开访问的文件进行测试时,我可以让它正常工作。但是,当文件是私有的时不是。

【问题讨论】:

我不太确定,但私钥是文件夹名还是文件名,文件名有扩展名用于识别,可能是 EBS 无法确定。尝试上传带有扩展名的普通私钥 我也遇到了同样的问题,你找到解决办法了吗? 我确实得到了这个工作,老实说,我从来没有真正弄清楚问题,或者为什么它开始工作。我现在将发布工作代码并指出差异,以便您尝试。 嗨,我刚刚注意到 @MainaWycliffe 从 4 月 5 日开始的回答。回想起来,我认为这实际上是问题所在,并通过使用文件扩展名来解决。 Joao,您是否尝试过为文件添加扩展名? 【参考方案1】:

我在 eu-west-2 区域的一个 EC2 实例上遇到了这个问题。我无法在其他地区复制它。

如果您遇到此问题,并且 EC2 实例位于 eu-west-2 区域,请尝试解决此问题,只需以不同的格式设置 URL:

代替: https://s3.eu-west-2.amazonaws.com/elasticbeanstalk-eu-west-2-XXXXXXXXX/yourfolderpath/server.key

试试: https://elasticbeanstalk-eu-west-2-XXXXXXXXX.s3-eu-west-2.amazonaws.com/yourfolderpath/server.key

【讨论】:

以上是关于Elastic beanstalk 实例无法访问私有 S3 文件的主要内容,如果未能解决你的问题,请参考以下文章

无法访问此站点以获取 AWS Elastic Beanstalk 环境 URL

无法从自定义域 HTTPS 访问 Elastic Beanstalk(单实例)

无法访问 Elastic Beanstalk IP 地址之一?

VPC 中的 Elastic Beanstalk 应用程序无法公开访问

将 AWS 颁发的证书用于单实例 Elastic Beanstalk 应用程序

无法将 RDS 实例添加到 Elastic Beanstalk