3

从 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_DEFAULT_ACL = 'authenticated-read'
  • SECURE_REFERRER_POLICY = 'same-origin'
  • STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

在 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,而我终其一生都找不到它。

4

0 回答 0