Cloudfront 无法访问部署在 EBS 上的 Spring Boot 上的安全端点

Posted

技术标签:

【中文标题】Cloudfront 无法访问部署在 EBS 上的 Spring Boot 上的安全端点【英文标题】:Cloudfront can't reach secured endpoints on Spring boot deployed on EBS 【发布时间】:2021-03-11 18:46:46 【问题描述】:

我在 Elastic beanstalk 上部署了一个 Spring boot 应用程序,在 S3 上部署了一个 React 应用程序作为静态网站。我使用 Cloudfront 来处理这两个应用程序之间的路由,一切正常。我可以使用 Postman 获取 Spring boot(连接到 Postgres RDS)上的所有数据,并且可以将登录调用发送到安全端点(使用 Spring 安全性)。添加所需的标头后,我还可以使用邮递员调用所有安全端点。

我的问题是当我尝试通过 CloudFront 调用 EBS Spring 启动上的安全端点时,我得到 403。所有其他端点都运行良好(其中没有 spring 安全性)。只有受保护的端点才会返回 403。

我正在使用一个名为 Authentication with Bearer 的标头(我在调用登录时生成)将请求发送到后端。

有人知道我在这里缺少什么吗?谢谢!

【问题讨论】:

【参考方案1】:

好的,我找到了答案。 (我忙于这个问题大约两天,我在 *** 上提出问题 20 分钟后找到了答案):)

答案是:添加白名单标头。这是身份验证标头。因为Cloudfront在发送请求的时候删除了这个header,所以只好白名单了)。

如何添加白名单标头:

转到你的分布 -> 行为 -> 选择 EBS 行为 -> 编辑 -> 创建新的缓存策略 -> 选择标头 -> 然后选择白名单

我希望我可以帮助别人解决这个问题,避免像我一样花两天时间寻找答案:)

【讨论】:

以上是关于Cloudfront 无法访问部署在 EBS 上的 Spring Boot 上的安全端点的主要内容,如果未能解决你的问题,请参考以下文章

使用 CloudFront 部署在 S3 上的 VueJS 应用程序的“指定的密钥不存在”

S3 / Cloudfront 下载限制

S3 + Cloudfront 上的浏览​​器缓存破坏

ECS 与 EFS 或 EBS 上的持久数据与 CloudFormation

初识EBS开发

如何将 EBS 上 Rails 应用程序上的入站安全组限制为仅来自我的应用程序(在 S3 上)并防止其他服务器访问我的 API?