AWS elastic beanstalk:Errno 404 在部署时从 S3 下载文件

AWS elastic beanstalk:Errno 404 在部署时从 S3 下载文件

我正在关注文档在将新实例部署到 elastic beanstalk 时从 s3 获取证书。说明相当简单:创建一个配置文件,内容如下app-root/.ebextensions

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-west-2-123456789012/server.key

其中的链接指向您的证书/密钥/其他位置。

然而,当我部署我的应用程序包(zip)时,构建失败,[Errno 404] HTTP Error 404...提示在指定位置找不到我的文件,与事实这些文件在精确指定的位置,因为我可以aws s3 cp s3://<pasted-link-to-file> .从我的命令行(当然是同一区域)使用它们。

此外,从表面上看,这似乎不是一个权限问题,因为如果是的话,我预计会出现“拒绝访问”之类的情况;存储桶策略授予以下操作aws-elasticbeanstalk-ec2-role

"Action": [
    "s3:ListBucket",
    "s3:ListBucketVersions",
    "s3:GetObject",
    "s3:GetObjectVersion"
]

我还将完整的 s3 访问策略附加到aws-elasticbeanstalk-ec2-roleIAM 中。

但事实上,我可以从 cli 访问文件却aws-elasticbeanstalk-ec2-role找不到它们,这表明 a) 我的设置可能有问题:s3 上的文件、s3 权限、配置.ebextensions或 b) 有关此事的 aws 文档完全不正常。

  • 这是一个有点宽泛的问题,但有人能指出这种设置还可能出现什么问题吗?

答案1

通过明确指定来解决它:

roleName: "aws-elasticbeanstalk-ec2-role"

代替:

roleName: 
  "Fn::GetOptionSetting": 
    Namespace: "aws:autoscaling:launchconfiguration"
    OptionName: "IamInstanceProfile"
    DefaultValue: "aws-elasticbeanstalk-ec2-role"

.ebextensions/my_conf.config

这可能是因为配置文件键和 S3 策略引用的是“roleName”而不是“IamInstanceProfile”。

答案2

经过一些故障排除后,我意识到问题在于:

"Fn::GetOptionSetting": 
  Namespace: "aws:autoscaling:launchconfiguration"
  OptionName: "IamInstanceProfile"
  DefaultValue: "aws-elasticbeanstalk-ec2-role"

此选项返回实例配置文件。但是,要获取凭证,我们需要与实例配置文件关联的 AWS 角色。

以下命令将返回 404:

curl -vvv http://169.254.169.254/latest/meta-data/iam/security-credentials/{Instance-Profile}

但是,以下命令有效并返回临时凭证:

curl -vvv http://169.254.169.254/latest/meta-data/iam/security-credentials/{Instance-ROLE}

相关内容