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

部署在EC2的Django图库调用S3 PutObject时出现AccessDenied错误求助

问题排查与解决方案

针对你部署在EC2上的Django图库网站上传图片到S3时出现的PutObject AccessDenied错误,按以下步骤逐一排查:

1. 验证EC2上的身份凭证是否生效

  • 如果EC2实例使用IAM实例角色而非硬编码密钥:确认实例角色已附加AmazonS3FullAccess权限,且Django配置中未硬编码其他IAM用户的密钥(避免冲突)。
  • 如果使用IAM用户密钥:在EC2终端执行aws configure list检查当前生效的密钥是否正确,同时确认Django的settings.py中AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY配置与预期一致,且未被~/.aws/credentials文件或环境变量覆盖。
  • 直接用AWS CLI测试权限:在EC2上创建一个测试文件,执行aws s3 cp test.txt s3://photoshare20230619/test.txt,如果同样报错,说明是身份/权限问题;如果成功,问题出在Django配置。

2. 修正S3 Bucket权限配置

  • 补充Bucket策略的写入权限:当前Bucket策略仅允许公共读(s3:GetObject),虽然IAM用户有AmazonS3FullAccess,但可添加写入权限的策略确保兼容性:
{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::photoshare20230619/*"
        },
        {
            "Sid": "AllowIAMUserWrite",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::你的AWS账号ID:user/你的IAM用户名"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::photoshare20230619/*"
        }
    ]
}
  • 检查Bucket的Block Public Access设置:确保未开启Block all public access(如果需要公开访问图片),IAM用户的操作不受公共访问限制,但若Bucket ACL设置为私有,需确认PutObject时的ACL配置。

3. 检查Django的S3存储配置

  • 确认settings.py中的关键配置:
    • AWS_STORAGE_BUCKET_NAME是否为photoshare20230619
    • AWS_S3_REGION_NAME是否正确(如us-east-1)
    • AWS_S3_SIGNATURE_VERSION设置为s3v4(避免区域兼容问题)
    • AWS_DEFAULT_ACL设置合理:若需公开访问图片设为public-read,若私有则设为private
  • 确认部署时加载的是生产环境配置,而非本地配置(比如是否通过DJANGO_SETTINGS_MODULE指定了正确的settings文件)。

4. 排查上层权限限制

  • 检查AWS组织的服务控制策略(SCP):如果你的账号属于AWS组织,确认SCP未限制S3:PutObject操作。
  • 检查IAM用户的权限边界:若IAM用户设置了权限边界,确认边界允许S3:PutObject操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:05:06