在托管 Angular 应用程序时保护 s3 Bucket

Securing s3 Bucket while hosting Angular app

我知道有两种创建 Cloudfront Origin 的方法:

  1. 从 s3 存储桶本身粘贴网站端点;
  2. select 列表中的 s3。

现在,当我执行第 1 步时 - 我的网站似乎真的可以正常工作,但我必须做一些事情 public。如果我使用 CF 分发进行测试,我不希望每个人都可以访问存储桶中的文件。好的,我可以使用 WAF/IP 列表限制对 CF 本身的访问。这太棒了。

接下来我想只允许从 CF 访问 s3 存储桶。我发现它可以使用 #2 实现,而且我已经做到了,但现在我只有 Angular 应用程序的第一页在工作,例如,登录。登录后,应用程序重定向到某个地方,比如 /page/authenticated,我遇到错误 "specified key does not exist"。我找到了一个漂亮的 来解释这种情况。

但是,我仍然不明白,我可以在使用 s3-website 端点时限制对 s3 存储桶的访问吗?或者,如果我想让路由工作,我必须做 s3 bucket public 而没有其他变体?

您可以将您的存储桶保密,只允许使用 CloudFront 进行访问。

您不需要使用存储桶的网站端点。

要使 SPA 工作,包括 Angular,您必须做的是添加自定义 Error Pages

转到 Error Pages 并单击 Create Custom Error Response

404403 创建条目。它应该看起来像这样

我可能来晚了一点,但我最近发表了一篇文章,其中详细描述了安全最佳实践,这有助于解决以下几点:

  • 如何保护存储敏感用户数据和应用程序代码的 S3 存储桶。
  • 如何安全地配置 CloudFront 分配。
  • 如何使用 CloudFront Functions 保护前端应用程序免受常见的 OWASP 威胁。

了解更多have a look at the article

最好, 斯特凡