我正在尝试配置'来源'弹性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文件?我对角色权限的设置是否不正确?或者还有其他方法可以实现这一目标吗?
答案 0 :(得分:4)
使用files
或source
密钥无法从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