在 AWS 中混合私有和公共静态文件要么完全私有,要么完全公开

在 AWS 中混合私有和公共静态文件要么完全私有,要么完全公开

我正在尝试将我的静态资产移至 AWS。我关注了很多博客文章,但最关注的是这一篇:https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html

现在我可以让它运行,使其全部公开可见,或者什么都不要。

如果我将此策略添加到我的存储桶中,那么每个人都可以看到所有内容,即使我的配置如下所述:


    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::accountnbr:user/user"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::mybucket/*"
        }
    ]
}

这意味着每个人都可以看到,但只有我可以编辑。

现在我配置了静态资产和私有存储,用于存放媒体文件。静态资产中存放着 css 文件等。

这是我的配置:


AWS_ACCESS_KEY_ID = 'mykey'
AWS_SECRET_ACCESS_KEY = 'mysecretkey'
AWS_STORAGE_BUCKET_NAME ='mybucket'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'mysite/static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'config.settings.storage_backends.StaticStorage'
AWS_DEFAULT_ACL = 'public-read'
AWS_PRIVATE_MEDIA_LOCATION = 'media'
PRIVATE_FILE_STORAGE = 'config.settings.storage_backends.PrivateMediaStorage'


然后我的 storage_backends.py 中就有这个


class StaticStorage(S3Boto3Storage):
    location = 'static'
    default_acl = 'public'

class PrivateMediaStorage(S3Boto3Storage):
    location = settings.AWS_PRIVATE_MEDIA_LOCATION
    default_acl = 'private'
    file_overwrite = False
    custom_domain = False

我没有配置公共媒体存储,因为我只需要私有媒体文件。我认为公共静态文件应该放在我的 StaticStorage 中……

不幸的是,我的私人文件也可以通过链接下载.....

我了解预签名 URL,但它不应该按照我的配置正常工作吗?还是我遗漏了什么?

提前致谢,非常感谢!

相关内容