我不太了解 AWS Cloudfront OAI 背后的安全性。它唯一能做的就是切换存储桶的域。而不是使用https://s3.amazonaws.com/[Bucket]/*
用你的域来访问它。
但是任何人都可以浏览知道 CF 域的该存储桶/文件夹。
我是不是漏掉了什么?我知道您可以在查看器请求端添加 lambda 函数来限制来自某个应用程序的访问。但我如何才能阻止用户尝试随机 URL。而且我认为进行身份验证并检查该用户是否应该有权访问每个请求的资源并不是一个好的做法。
那么,有什么好的做法可以限制我的用户只能访问他们被允许查看的资源呢?
答案1
的目的源访问身份是为了防止用户直接地访问 S3 Bucket。他们必须通过 CloudFront;源 S3 Bucket 不允许任何人直接访问它。
强制访问的一些原因CloudFront:
- 边缘缓存(从 CloudFront 传输比从 S3 传输更便宜,并且更靠近用户)
- 身份验证边缘的 Lambda
- WAF 实施
如果您想限制对存储桶中单个对象的访问,您应该考虑使用签名 URL- 例如,当用户登录您的网站时,您将通过预先签名的 URL 提供他的文档,也许带有一些到期限制。
最佳做法是为公共对象(例如网站资产 - 图片、css、html)以及私有对象需要身份验证的(例如客户文件)。
请参阅此处S3 预签名 URL 示例
更新:
您还可以使用边缘的 Lambda按照此处所述进行身份验证:使用 Lambda@Edge 增强 Web 应用程序安全性
使用哪一个取决于您的用例。预签名 URL 可共享且有时间限制,而 Lambda@Edge 认证 URL 不可共享且需要用户登录。取决于您的需要。
希望有帮助:)