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

Elastic Beanstalk实例上传文件到S3遇权限拒绝的解决方法

解决Elastic Beanstalk Worker实例上传S3报错Access denied的问题

核心问题分析

你当前的S3桶策略给的是Elastic Beanstalk服务角色(aws-elasticbeanstalk-service-role)权限,但Worker实例实际使用的是EC2实例角色(通常名为aws-elasticbeanstalk-ec2-role或自定义角色),两者不是同一个角色,所以桶策略的权限不会生效。本地能上传是因为你用的本地AWS凭证(比如配置文件里的密钥)有足够权限。

具体解决方案

方案1:给EC2实例角色添加S3权限

  1. 登录AWS控制台,进入IAM服务。
  2. 找到Worker实例使用的IAM角色:
    • 打开Elastic Beanstalk控制台,进入你的环境,点击左侧「配置」→「实例」,查看「IAM实例配置文件」对应的角色名称。
  3. 给该角色添加内联策略或托管策略:
    • 内联策略示例(允许上传等必要操作):
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:PutObject",
                      "s3:GetObject",
                      "s3:ListBucket"
                  ],
                  "Resource": [
                      "arn:aws:s3:::spmgr",
                      "arn:aws:s3:::spmgr/*"
                  ]
              }
          ]
      }
      
    • 也可以直接附加AmazonS3FullAccess托管策略(若无需严格最小权限),但建议遵循最小权限原则,只添加业务必需的操作。

方案2:调整S3桶策略,允许EC2实例角色访问

如果不想修改实例角色,也可以修改桶策略,把实例角色的ARN加入Principal:

  1. 先获取EC2实例角色的ARN:在IAM角色详情页复制ARN(格式类似arn:aws:iam::823510892997:role/aws-elasticbeanstalk-ec2-role)。
  2. 修改桶策略,添加新的Statement:
    {
        "Version": "2008-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::spmgr/*"
            },
            {
                "Sid": "AllowEBSService",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::823510892997:role/service-role/aws-elasticbeanstalk-service-role"
                },
                "Action": "*",
                "Resource": [
                    "arn:aws:s3:::spmgr",
                    "arn:aws:s3:::spmgr/*"
                ]
            },
            {
                "Sid": "AllowEC2InstanceRole",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::823510892997:role/aws-elasticbeanstalk-ec2-role"
                },
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::spmgr",
                    "arn:aws:s3:::spmgr/*"
                ]
            }
        ]
    }
    

验证步骤

  1. 保存修改后,等待1-2分钟让IAM权限生效。
  2. 重新测试Worker实例的上传操作,确认是否还报错。
  3. 如果仍有问题,可以用AWS CLI在实例上执行s3 cp命令测试,或者查看CloudTrail日志,确认具体被拒绝的操作以及使用的角色信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:17