我有一些秘密文件,我想限制匿名用户查看/下载。我尝试通过运行以下命令将其设为私密:
s3cmd setacl --acl-private s3://bucket/some/path/*.ext
然后我转到 S3 管理控制台,选择文件,然后单击“属性”,我确定每个人的“打开/下载”权限都未选中。
但是复制链接https://s3-us-west-2.amazonaws.com/bucket/some/path/blah.ext
并粘贴到新的浏览器中,它仍然可以打开/下载。
我错过了什么?
答案1
转到存储桶,然后单击“属性”和“编辑存储桶策略”,检查存储桶策略。如果您有类似以下内容:
{
"Sid": "Stmt1391783519913",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:GetObject",
],
"Resource": "arn:aws:s3:::bucket/*"
},
这意味着您允许每个人下载此存储桶中的所有文件。
根据文档:
如果账户有权访问 ACL 或策略指定的资源,则他们能够访问所请求的资源。
这就是匿名用户仍然可以打开/下载您的文件的原因。
您可以通过添加如下新策略来阻止此情况:
{
"Sid": "Stmt1395306106592",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket/some/path/*.ext"
},
答案2
在 S3 中创建文件后private
,您可能仍可以下载它,但您的浏览器已缓存该文件。一旦您将文件设为私密,它将403
在任何其他浏览器(或私密/隐身窗口)中返回,但在一定时间内仍可通过原始浏览器访问。
如果您想确认该文件是私密的,请尝试使用其他浏览器(或curl
等)下载。