首页 > 解决方案 > 使用“同源”引荐来源网址策略访问 Amazon S3 上的 Django 静态文件

问题描述

从 Django 3.0 开始,添加了 SECURE_REFERRER_POLICY 并包含在python manage.py check --deploy命令中。为了让我的 Django 项目从 Amazon S3 读取媒体文件,我之前将我的设置strict-origin-when-cross-origin为域(类似于这个问题Amazon S3 Bucket Policy Referer中描述的内容)。

但这是一个非常基本的热链接保护,我在 Django 论坛上被建议切换到same-origin.

但是,现在我的网站无法再获取其任何资产文件(403 错误),并且django-storages到目前为止,浏览和搜索答案的 S3 文档已被证明是艰难且毫无结果的。:(

这是我目前拥有的:

在 Django 方面,我django-storages配置了:

在 AWS 上,我有以下策略(引用者的访问策略已被删除):

{
    "Statement": [
        {
            "Sid": "Allow programatic admin to handle bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxxxxxxxxx:user/bucket-manager"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket-name/*"
        }
    ]
}

以下 CORS:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

并且程序化用户具有以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

我感觉我缺少的是将bucket-manager用户添加到存储桶的 ACL 中,但是 UI 要求提供规范 ID,而我终其一生都找不到它。

标签: djangoamazon-s3python-django-storages

解决方案


推荐阅读