如何解决如何限制对Amazon s3静态网站中单个文件的访问
最近创建了一个静态网站,该网站托管在s3上,我注意到当用户检查网站来源时,他们可以单击链接,使他们可以在单独的选项卡中访问图像等项目。有没有一种方法可以允许网站访问图像,但可以限制尝试访问源图像的用户。
解决方法
遗憾的是,如果没有适当的身份验证,您不能限制下载图像的能力。如果您的用户可以在浏览器中看到图像,则可以下载它们,因为它们已经下载过了。
但是您可以限制用户直接进入您的S3 存储桶。为此,您可以使用CloudFront(CF)来放置S3存储桶。
具体来说,您可以在CF中设置Origin Access Identity
,并使您的网站和所有图像只能通过CF访问:
- Restricting Access to Amazon S3 Content by Using an Origin Access Identity
- Amazon S3 + Amazon CloudFront: A Match Made in the Cloud
- How do I use CloudFront to serve a static website hosted on Amazon S3?
仅在选项卡中打开资产的用户就可以了,如果您只是试图阻止访问内容而不是在域中访问,则可以使用Referer
头将其锁定为只能通过网站。
这可以在S3中通过bucket policy similar to the one below完成。
{
"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和AWS WAF来包含由引荐来源屏蔽的规则来增强此功能。
如果您尝试锁定此内容(无论是需要登录才能看到它还是需要付费来获取它),您可以有两种选择。
- 您可以为S3对象创建pre-signed URLs并将其显示在HTML中。这将在有限的时间内有效(取决于传递给世代的参数)。
- 您可以将CloudFront分配与either signed cookies or signed URLs一起使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。