在 Elastic Beanstalk 配置设置中拒绝访问 S3 对象
Posted
技术标签:
【中文标题】在 Elastic Beanstalk 配置设置中拒绝访问 S3 对象【英文标题】:Access Denied to an S3 object in Elastic Beanstalk configuration setting 【发布时间】:2013-04-26 17:04:03 【问题描述】:我正在尝试在弹性 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 文件的情况下使其正常工作?我的角色权限设置不正确吗?还是有其他方法可以实现这一点?
【问题讨论】:
【参考方案1】:无法使用 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
选项更改命令的运行位置。
【讨论】:
【参考方案2】:我遇到了非常相似的情况并找到了解决方法。请在此处查看我的回答 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
【讨论】:
以上是关于在 Elastic Beanstalk 配置设置中拒绝访问 S3 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Elastic Beanstalk 配置文件中为 ALB 设置 HTTPS 重定向