【问题标题】:How to prevent user from accessing the non http version of my site?如何防止用户访问我网站的非 http 版本?
【发布时间】:2021-10-13 18:37:14
【问题描述】:
我目前在 docker compose 中的 nodejs 服务器在 EC2 实例上提供服务,而我的 react 应用在 s3 上提供服务,它们分别位于两个云端发行版的后面。
我对这些 AWS 产品相当陌生,我想知道如何配置此 AWS 设置,以便当用户访问 s3 和 EC2 (http) 提供的原始域时,他们会被重定向回云端 (https )?
【问题讨论】:
标签:
amazon-web-services
amazon-s3
amazon-ec2
amazon-cloudfront
【解决方案1】:
保护方法取决于来源。
对于 S3 源,您可以通过确保存储桶不公开来完全禁用访问。您可以使用 Cloudfront 的 Origin 访问身份来针对存储桶对 cloudfront 进行身份验证。这样人们只能通过 cloudfront 到达 s3 源。
对于负载均衡器后面的 EC2(我假设您使用 ALB,因为它是最佳实践),设置稍微复杂一些。您可以在 Cloudfront 向您的 ALB 发出的调用中添加“秘密”标头(例如 x-origin-protection)。然后向您的 alb 添加一个侦听器规则,该规则仅在标头存在时转发,并且默认操作被重定向到云端。
监听器规则示例:
ListenerRule:
Type: AWS::ElasticLoadBalancingV2::ListenerRule
Properties:
Actions:
- Type: forward
TargetGroupArn: !Ref MyEc2InstanceTargetGroup
Conditions:
- Field: http-header
HttpHeaderConfig:
HttpHeaderName: x-origin-protection
Values:
- !Ref SecurityToken
ListenerArn: !Ref HttpsAppListener
Priority: 1
有关 ALB 设置的更完整指南,请查看https://www.arhs-group.com/protecting-aws-alb-behind-aws-cloudfront-distribution/
【解决方案2】:
在您的云端分发中 > 选择选项卡“行为” > 选择您的“行为”并单击编辑 > 在“查看器协议策略”中选择“将 HTTP 重定向到 HTTPS”并单击“保存更改”并等待部署完成。
更多关于Viewer protocol policy的信息