使用eb deploy部署Django应用时遭遇NotAuthorizedError权限拒绝
AWS Elastic Beanstalk部署Django应用权限拒绝问题排查
核心错误
ERROR: NotAuthorizedError - Operation Denied. Access Denied
环境与问题背景
- 环境:AWS Elastic Beanstalk托管的Django应用
- 问题:此前
eb deploy部署QA环境完全正常,突然触发权限拒绝错误;已确认凭证、密钥对未修改,仅更新了requirements.txt中的依赖包;eb ssh可正常使用。
调试补充信息
执行eb deploy --debug时捕获到以下异常链:
raise NotFoundError('Object not found.') ebcli.objects.exceptions.NotFoundError: Object not found. raise error_class(parsed_response, operation_name) botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListMultipartUploads operation: Access Denied raise NotAuthorizedError('Operation Denied. ' + message) ebcli.objects.exceptions.NotAuthorizedError: Operation Denied. Access Denied
排查与修复方案
1. 校验S3存储桶权限
从调试日志看,核心触发点是S3的ListMultipartUploads操作被拒绝,需检查:
- 当前使用的AWS凭证(
~/.aws/credentials或环境变量配置)是否拥有Elastic Beanstalk关联S3桶的s3:ListMultipartUploads、s3:PutObject、s3:GetObject权限。 - 检查该S3桶的桶策略,确认未误添加拒绝规则,或移除了部署所需的权限条目。
2. 检查IAM角色权限
Elastic Beanstalk部署依赖指定的IAM角色(默认如aws-elasticbeanstalk-ec2-role),需确认:
- 登录IAM控制台,找到对应角色,检查附加的权限策略是否包含
AWSElasticBeanstalkFullAccess及必要的S3权限(如AmazonS3FullAccess或精细化S3权限)。 - 若使用临时凭证,确认凭证未过期(部分场景下凭证会自动轮换)。
3. 清理S3未完成分段上传
NotFoundError结合ListMultipartUploads错误,大概率是S3桶中存在残留的未完成分段上传,导致部署流程异常:
- 登录S3控制台,找到Elastic Beanstalk关联的存储桶,进入「管理」→「分段上传」,清理所有未完成的上传任务。
- 或用AWS CLI批量处理:
# 列出所有未完成的分段上传 aws s3api list-multipart-uploads --bucket <你的EB关联桶名> # 终止指定上传(替换占位符) aws s3api abort-multipart-upload --bucket <桶名> --key <对象键> --upload-id <上传ID>
4. 重置本地EB配置
本地EB环境配置可能损坏,尝试重置:
- 删除项目根目录下的
.elasticbeanstalk文件夹。 - 重新执行
eb init,选择正确的应用、环境及AWS区域,完成后再执行eb deploy。
5. 排除依赖包影响
虽然仅更新了依赖包,但部分AWS相关依赖可能隐含权限需求,可临时回滚到之前的requirements.txt版本,重新部署验证是否恢复正常,以此排除依赖包的影响。
内容的提问来源于stack exchange,提问作者The Mask
相关产品推荐
相关产品推荐

