我的架构如下:我有一个静态网站 xyz.com,托管在 s3 上,由 cloudfront 提供服务。该网站正在访问位于负载均衡器后面的 API。我想确保只有来自我的网站 xyz.com 的请求才允许通过我的负载均衡器到达我的 API。我认为流程是用户 -> cloudfront -> 负载均衡器 - 所以我在负载均衡器的安全组上添加了一条规则,仅允许来自 cloudfront 的 http 访问Amazon CloudFront 的前缀列表。
这会阻止我的网站访问负载均衡器。所以,我想我错了,流程是用户(浏览器)将请求发送到 api 而不是 cloudfront(因此 cloudfront 仅共享网站的资产进行渲染)?我说得对吗?如果是这样,有没有办法确保只有来自我的网站的请求通过?
答案1
从您所说的内容来看,CloudFront 位于 S3 前面,而不是位于 API 前面。如果您愿意,您可以将 CloudFront 放在 API 前面,但您必须选择这样做。从记忆中,这是在 API 网关控制台/API 中完成的。
在我看来,用户通过 Cloudfront 访问 S3,然后返回一个网页。然后,该网页访问 API 以获取更多信息。一种解决方案是验证用户对 API 的访问(AWS 文档链接),例如使用 AWS Cognito 或 lambda 授权器。
如果您不希望用户登录,您将必须对应用程序身份验证与用户身份验证进行一些研究,或者希望其他人给出有用的答案。