是否不可能在与 s3 存储桶区域不同的区域上传文件? (IllegalLocationConstraintException)

Posted

技术标签:

【中文标题】是否不可能在与 s3 存储桶区域不同的区域上传文件? (IllegalLocationConstraintException)【英文标题】:Is it impossible upload file in the different region from the region of s3 bucket? (IllegalLocationConstraintException) 【发布时间】:2022-01-16 21:00:13 【问题描述】:

我使用 AWS Elastic beanstalk 和 S3 部署了我的 django 项目, 我尝试上传个人资料头像,但显示服务器错误(500)

我的哨兵日志显示, “调用 PutObject 操作时发生错误 (IllegalLocationConstraintException):eu-south-1 位置约束与此请求发送到的区域特定端点不兼容。”

我认为出现了这个错误 因为我将存储桶放在 eu-south-1 上,但我尝试访问它并在韩国首尔创建一个新对象。

此外,AWS 文档说 IllegalLocationConstraintException 表示您正在尝试从与存储桶所在区域不同的区域访问存储桶。为避免此错误,请使用 --region 选项。例如:aws s3 cp awsexample.txt s3://testbucket/ --region ap-east-1。 (https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html)

但此解决方案可能仅适用于从 AWS CLI 上传文件时...

我尝试通过添加它来更改我的存储桶策略,但不起作用。


    "Version": "2012-10-17",
    "Statement": [
        
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::BucketName/*"
        
    ]

我不知道我应该怎么做,为什么他们不允许从其他地区访问? 如何允许从世界各地访问创建、更新和删除我的存储桶中的对象? 这是我的第一次部署,请帮帮我????

【问题讨论】:

【参考方案1】:

您的 Django Elastic Beanstalk 实例是否位于与 S3 存储桶不同的区域?如果是这样,您需要按照记录的here 设置AWS_S3_REGION_NAME 设置。

【讨论】:

没有 Elastic Beanstalk 与 S3 存储桶位于同一区域。但我猜当用户位于与“eu-south-1”不同的区域时,AWS 可能不允许将新对象放入存储桶中。我已经尝试设置 AWS_S3_REGION_NAME 但问题是一样的。 用户不应该对服务器用于与 S3 通信的区域 ID 有任何影响。也许你应该包括更多关于你正在做什么的细节。您是在使用 Django S3 集成,还是以某种方式直接从 Web 浏览器上传到 S3?你有任何代码可以显示吗? 是的,我也这么认为。我的意思是当我像用户一样在网站上上传文件或更新或删除它时会出现这个问题。当我使用 awsebcli 上传静态文件时效果很好。 github.com/bamichoi/cineacca 这是我对这个项目的回购。也许我必须在 settings.py 中添加一些东西,或者在 aws 控制台上更改一些配置。 谢谢它有效!我尝试添加 AWS_DEFAULT_ACL = "public-read-write" 和 AWS_S3_REGION_NAME = "eu-south-1" 并且它有效!

以上是关于是否不可能在与 s3 存储桶区域不同的区域上传文件? (IllegalLocationConstraintException)的主要内容,如果未能解决你的问题,请参考以下文章

查询所寻址的 S3 存储桶与该集群位于不同的区域

上传到 S3 存储桶时出错,与 EndPoint 相关

使用boto3,从整个文件夹或文件从一个s3存储桶复制到同一区域的另一个文件夹时,如何提供访问密钥和秘密访问密钥?

无法在特定区域中创建s3存储桶

从 node.js 将图像上传到 s3 存储桶

AWS Cloudformation 模板 - 在 S3 存储桶中设置区域