访问拒绝Elastic Beanstalk配置设置中的S3对象

时间:2013-05-02 13:36:55

标签: amazon-web-services amazon-s3 elastic-beanstalk

我正在尝试配置'来源'弹性beanstalk应用程序配置文件中的参数。相关的源是一个bz2文件,我已经上传到新的S3存储桶中。例如,创建的存储桶的名称是' abc'文件名是' mysource.tar.bz2'。配置文件中的相关行如下所示:

source: 
    /usr/bin/mysource: https://s3-us-west-2.amazonaws.com/abc/mysource.tar.bz2

尝试部署代码时,出现错误,并在检查日志时显示“AccessDenied”#39;这个文件。

我已在AWS IAM控制台中创建了一个实例配置文件(角色),该控制台具有Amazon EC2的信任关系,并已设置对所需存储桶的访问权限。

角色中的权限如下所示:

{
  "Statement": [
    {
      "Sid": "Stmt13674962346",
      "Action": [
      "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
      "arn:aws:s3:::abc/*"
     ]
    }
  ]
}

甚至尝试将资源设置为*:

"Resource": "*"

但仍然会收到 AccessDenied 错误。

如果我更改s3文件的权限' mysource.tar.bz2'通过公开,它有效。

那么,有没有办法让这个工作无需公开S3文件?我对角色权限的设置是否不正确?或者还有其他方法可以实现这一目标吗?

2 个答案:

答案 0 :(得分:4)

使用filessource密钥无法从Elastic Beanstalk访问受保护的AWS资产。这些命令以基本方式处理,不从实例元数据中读取,因此无法提取您的AWS凭据(据我所知)。

我解决此问题的方法是创建具有适当权限的IAM角色,安装最新的AWS工具,并使用commands密钥下载和解压缩文件。关键是AWS命令行工具,它们可以自动从实例中提取AWS凭证。

commands:
  01-install-awscli:
    command: easy_install awscli
  02-download-s3-asset:
    command: aws s3 cp --region us-east-1 s3://abc/mysource.tar.bz2 .
  03-extract-file:
    command: tar xvjf mysource.tar.bz2 destination/

命令在项目的源目录中执行,因此根据需要更改路径或使用cwd选项更改命令的运行位置。

答案 1 :(得分:1)

我遇到了一个非常类似的情况,并找到了解决问题的方法。有关详情,请参阅我的答案Permission denied while elastic beanstalk is retrieving S3 file

我找到的解决方案是在配置文件中添加一个带有身份验证信息的Resources部分。我的最终.ebextensions配置文件看起来像这样

files:
  "/target/file/path" :
    source: https://s3-us-west-1.amazonaws.com/_MyBucket_/_MyFolder_/_MyFile.txt
Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: _MyBucket