无需修改部署在EC2上的Web应用,如何使用AWS Cognito对其安全防护?
实现方案(无需修改原有Web应用)
完全可以满足你的需求,通过AWS Application Load Balancer(ALB)内置的身份验证能力搭配Cognito即可实现,全程不需要改动EC2上部署的原有应用,操作门槛低,适合少量用户的使用场景。
具体操作步骤
- 前置准备:先调整EC2实例的安全组规则,仅允许后续创建的ALB的安全组访问5000端口,关闭EC2的直接公网访问权限,避免无关人员绕过防护直接通过IP访问应用。
- 创建Cognito用户池:在AWS控制台打开Cognito服务,创建新的用户池,开启托管UI功能,预先为你的朋友创建好登录账号,配置回调地址为
https://resource.example.com/oauth2/idpresponse(后续和ALB配置保持一致即可)。
- 创建Cognito用户池:在AWS控制台打开Cognito服务,创建新的用户池,开启托管UI功能,预先为你的朋友创建好登录账号,配置回调地址为
- 配置Application Load Balancer
- 申请SSL证书:通过AWS Certificate Manager(ACM)申请
resource.example.com的免费SSL证书,用于ALB的HTTPS访问 - 创建ALB及目标组:创建公网可访问的ALB,将你的EC2实例作为目标组挂载到ALB,端口对应5000
- 配置监听器认证:为ALB添加HTTPS 443监听器,绑定刚才申请的SSL证书,在监听器规则中添加
身份验证动作,选择你之前创建的Cognito用户池,默认动作为转发到你的EC2目标组
- 修改Route53解析:将
resource.example.com的解析记录从原来的EC2公网IP,修改为指向新创建的ALB的域名。
- 修改Route53解析:将
实现效果
完全符合你预期的访问流程:
- 用户访问
resource.example.com或原EC2 IP时,因为EC2已经关闭直接公网访问,仅能通过域名访问ALB,未登录用户会被ALB自动跳转到Cognito托管登录页 - 用户输入你预先分配的账号登录成功后,会自动跳转回你的应用页面,无需额外操作
- ALB会自动校验用户身份令牌的有效性,令牌到期后会自动触发重新登录,无需你在应用侧做任何处理
- 你可以随时在Cognito用户池中增删账号,调整可访问的用户范围,操作非常简便
成本说明
整套方案成本极低:Cognito对于月活50人以内的用户池完全免费,ALB的月费用对于20人以内的低访问量场景也仅需几美元,完全符合你的使用规模。
内容的提问来源于stack exchange,提问作者Alex Lai
相关产品推荐
相关产品推荐

