You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elastic Beanstalk CLI部署报Amazon S3 Forbidden错误如何解决?

解决Elastic Beanstalk CLI部署时S3 Forbidden错误

我之前碰到过几乎一模一样的问题——控制台部署完全正常,但用CLI执行aws elasticbeanstalk update-environment时就触发S3 Forbidden,CloudTrail还没记录错误码。咱们一步步拆解排查:

1. 先确认CLI和控制台用的是不是同一个身份

控制台部署用的是你当前登录AWS控制台的IAM用户/角色,但CLI大概率用的是本地配置的另一个身份(比如~/.aws/credentials里的配置,或者环境变量AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)。

  • 运行这条命令查看CLI当前使用的身份:
    aws sts get-caller-identity
    
  • 去CloudTrail里找控制台部署成功的事件(比如CreateApplicationVersion或UpdateEnvironment),对比调用者的ARN。如果两者不一样,权限差异就是问题根源。

2. 检查EB服务角色的S3权限

EB环境是通过服务角色(通常名为aws-elasticbeanstalk-service-role)访问S3拉取应用版本的。控制台部署正常说明这个角色基本权限没问题,但要确认它能访问你CLI指定版本对应的S3对象:

  • 打开IAM控制台,找到EB服务角色,查看附加的权限策略。确保策略包含针对目标S3桶的以下权限:
    • s3:GetObject
    • s3:ListBucket
  • 如果你的应用版本存放在S3桶的特定前缀下,要确保策略里的资源路径覆盖了这个前缀(比如arn:aws:s3:::your-bucket/*)。

3. 检查CLI用户的权限和上传的S3对象权限

如果你是用CLI创建应用版本并上传到S3的,可能存在两个问题:

3.1 CLI用户本身的权限

CLI用户需要有:

  • elasticbeanstalk:UpdateEnvironment权限(允许更新环境)
  • s3:PutObject权限(上传应用版本到S3)
  • 可选:elasticbeanstalk:CreateApplicationVersion权限(如果是CLI创建版本)

3.2 S3对象的访问权限

你上传到S3的Dockerrun.aws.json或应用包,需要允许EB服务角色读取它。可以通过两种方式解决:

  • 上传时设置ACL:
    aws s3 cp your-dockerrun-file.json s3://your-bucket/path/ --acl bucket-owner-full-control
    
  • 或者在S3桶策略中添加允许EB服务角色读取的规则:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::your-account-id:role/aws-elasticbeanstalk-service-role"
          },
          "Action": ["s3:GetObject", "s3:ListBucket"],
          "Resource": [
            "arn:aws:s3:::your-bucket",
            "arn:aws:s3:::your-bucket/*"
          ]
        }
      ]
    }
    

4. 开启S3访问日志找具体原因

CloudTrail没记录错误码的话,直接看S3桶的访问日志是最有效的:

  • 打开S3控制台,找到目标桶,在「权限」→「访问日志」里开启日志记录,指定一个存储日志的桶(可以是同一个桶的不同前缀,或者另一个桶)。
  • 重新执行CLI部署命令,等待错误出现后,查看S3日志里的403请求。日志里会包含调用者ARN、错误代码(比如AccessDenied)和详细原因,能精准定位是哪个身份被拒绝。

5. 排查VPC配置(如果EB在VPC内)

如果你的EB环境部署在VPC中,还要检查:

  • 是否配置了S3 VPC端点?如果有,端点的策略是否允许EB服务角色访问目标桶。
  • 如果没配置端点,EB环境的子网是否有公网访问权限(比如关联了NAT网关),确保EB能通过公网访问S3。

我当时是因为CLI用的IAM用户上传应用版本时没设置ACL,导致EB服务角色读不到S3对象,调整ACL后就正常了。按这个流程排查,基本能解决问题。

内容的提问来源于stack exchange,提问作者bae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:32:58