如何限制对 Amazon s3 静态网站中单个文件的访问
How to limit access to individual files in an Amazon s3 static website
最近创建了一个托管在 s3 上的静态网站,我注意到当用户检查网站的来源时,他们可以单击允许他们访问单独选项卡中的图像等项目的链接。有没有办法允许网站访问图像但限制用户尝试访问源图像。
遗憾的是,您无法在未经适当身份验证的情况下限制下载图像的能力。如果您的用户可以在他们的浏览器中看到图像,他们就可以下载它们,因为它们已经下载过了。
但是您可以限制您的用户直接访问您的 S3 存储桶。为此,您可以在 S3 存储桶前面加上 CloudFront (CF)。
具体来说,您可以在 CF 中设置 Origin Access Identity
并使您的网站和所有图像只能通过 CF 访问:
用户只需在选项卡中打开资产就可以了,如果您只是想阻止内容在您域以外的地方访问,您可以使用 Referer
头部将其锁定为仅通过您的网站。
这可以通过 bucket policy similar to the one below.
在 S3 中完成
{
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":"arn:aws:s3:::awsexamplebucket1/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
您始终可以通过使用 CloudFront distribution combined with a AWS WAF 来增强此功能,以包含按推荐人阻止的规则。
如果您想锁定此内容(无论有人需要登录才能看到它还是付费才能获得),您有几个选择。
- 您可以为 S3 对象创建 pre-signed URLs 并在 HTML 中公开这些对象。这将在有限的时间内有效(取决于传递给生成的参数)。
- 您可以使用具有 either signed cookies or signed URLs 的 CloudFront 分配。
最近创建了一个托管在 s3 上的静态网站,我注意到当用户检查网站的来源时,他们可以单击允许他们访问单独选项卡中的图像等项目的链接。有没有办法允许网站访问图像但限制用户尝试访问源图像。
遗憾的是,您无法在未经适当身份验证的情况下限制下载图像的能力。如果您的用户可以在他们的浏览器中看到图像,他们就可以下载它们,因为它们已经下载过了。
但是您可以限制您的用户直接访问您的 S3 存储桶。为此,您可以在 S3 存储桶前面加上 CloudFront (CF)。
具体来说,您可以在 CF 中设置 Origin Access Identity
并使您的网站和所有图像只能通过 CF 访问:
用户只需在选项卡中打开资产就可以了,如果您只是想阻止内容在您域以外的地方访问,您可以使用 Referer
头部将其锁定为仅通过您的网站。
这可以通过 bucket policy similar to the one below.
在 S3 中完成{
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":"arn:aws:s3:::awsexamplebucket1/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
您始终可以通过使用 CloudFront distribution combined with a AWS WAF 来增强此功能,以包含按推荐人阻止的规则。
如果您想锁定此内容(无论有人需要登录才能看到它还是付费才能获得),您有几个选择。
- 您可以为 S3 对象创建 pre-signed URLs 并在 HTML 中公开这些对象。这将在有限的时间内有效(取决于传递给生成的参数)。
- 您可以使用具有 either signed cookies or signed URLs 的 CloudFront 分配。