django - AWS S3 Bucket返回403禁止

标签 django amazon-web-services heroku amazon-s3 static

我在 Django 中有一个应用程序,我将其静态文件放在 AWS S3 上的存储桶中。但是,当我尝试在应用程序中连接时,存储桶 S3 返回 403 禁止静态文件。

我的存储桶配置了公共(public)访问权限。

enter image description here

如果我尝试直接访问该文件,则会返回 XML 错误,如下所示:

此 XML 文件似乎没有任何与其关联的样式信息。文档树如下所示。

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>2A64DBA5BD88AC1C</RequestId>
<HostId>
K7NHlv7xhPAL6626LCHLayoR4BauqARf6KaTtKUYKQsakNqQ1LL6RnuIwxUqjMP0q6UjMmiW7Yw=
</HostId>
</Error>

我的存储桶包含文件:

enter image description here enter image description here

我尝试更改设置,将 AWS_DEFAULT_ACL 设置为“public”、“private”和 None,但问题仍然存在...

观察:我的应用程序在 Heroku 中。

如何解决这个问题?

最佳答案

公共(public)访问需要很多东西。您是否完成了以下所有操作?

存储桶 > 权限 > 阻止公共(public)访问按钮 > 阻止所有公共(public)访问设置为关闭。

存储桶 > 存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKETNAME/*"
        }
    ]
}

最后一项仅适用于静态网站托管。正如您所提到的,您没有提供 .html 文件,因为您正在构建 Django 应用程序。不过,我还是把它留在这里,以防有人发现它有用。

存储桶 > 属性 > 静态网站托管 > 使用此存储桶托管网站。

关于django - AWS S3 Bucket返回403禁止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61489846/

相关文章:

django - 在 Django 中保存嵌套表单

ruby-on-rails - 站点在本地主机上运行正常但在 Heroku 上运行错误

node.js - 如何让 heroku 停止为 worker-only 应用程序创建 web 进程?

python - Heroku 上的 PostgreSQL ETL 过程

python - 使用 Django South 处理大型项目的迁移是否安全

python - scrapy 中的 Djangoitem

python - 导入错误 at/admin : No module named defaults

python - 无法将 Pymongo 导入 AWS Lambda 函数

amazon-web-services - AWS Amplify 与不同账户中的存储库 - 承担角色

ruby - 追溯未知 Sidekiq 进程的来源