使用GitHub Action部署AWS Elastic Beanstalk出现S3访问拒绝错误如何解决
问题根因
上传S3成功是因为你配置在GitHub Secrets中的AWS访问密钥拥有对应桶的上传权限,而部署阶段的S3访问请求是由Elastic Beanstalk的服务角色、EC2实例配置关联的角色发起的,这两个角色没有S3桶的读取权限,才会触发访问拒绝报错。
解决步骤
- 检查Elastic Beanstalk服务角色权限
默认的Beanstalk服务角色名称为aws-elasticbeanstalk-service-role,需要为该角色添加S3桶的访问权限,最小权限示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::elasticbeanstalk-us-east-2-148565102071", "arn:aws:s3:::elasticbeanstalk-us-east-2-148565102071/*" ] } ] }
- 检查EC2实例配置文件关联的角色权限
Beanstalk环境对应的EC2实例会使用独立的角色(默认名称为aws-elasticbeanstalk-ec2-role)拉取部署包,该角色同样需要添加上述S3权限。 - 排查S3桶自定义策略
如果你给目标S3桶配置了自定义桶策略,需要确认策略没有禁止上述两个角色的访问请求,也没有IP限制、跨账号限制等规则拦截访问。
你之前添加的权限是给GitHub Action上传阶段使用的密钥的,配置没有问题,只需要补充AWS侧Beanstalk相关角色的权限即可解决问题。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

