我正在将Django
与django-storages
库一起使用,以将我的模型文件上传到S3,并且需要添加一条策略以阻止从存储桶的URL直接下载。
我通过设置下面的策略(选中Referer
)实现了这一点,但是当我使用库的自动重命名功能时,这导致了一个问题。我目前的政策:
{
"Version": "2012-10-17",
"Id": "Policy1542209806458",
"Statement": [
{
"Sid": "Block access globally except by the indicated referers.",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-bucket/subfolder/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"http://ref.localhost:8000/*",
"http://localhost:8000/*"
]
}
}
}
]
}
通过调试,我发现当库尝试执行HEAD
请求以获取现有文件信息(这将指示需要重命名)时,响应为HTTP 403错误。我尝试将下面的Action
(包括来自其他来源和documentation)包括在内,以获得更宽松的访问权限,但仍然存在相同的问题。
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
]
添加具有唯一名称的新文件时,只有在需要重命名时,我才没有这种问题。