4

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

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

尝试部署代码时出现错误,在检查日志时,它显示此文件的“AccessDenied”。

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

角色中的权限如下所示:

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

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

"Resource": "*"

但仍然得到AccessDenied错误。

如果我通过公开更改 s3 文件“mysource.tar.bz2”的权限,它可以工作。

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

4

2 回答 2

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选项更改命令的运行位置。

于 2013-10-01T23:16:04.147 回答
1

我遇到了非常相似的情况,并找到了解决方法。请在此处查看我的回答Permission denied while elastic beanstalk 正在检索 S3 文件以获取更多详细信息。

我找到的解决方案涉及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
于 2014-10-16T06:29:32.410 回答