如何让AWS Amplify托管的Vue.js前端安全访问API Gateway?
仅允许Amplify前端访问API Gateway的解决方案
关于API Gateway API密钥的安全问题
- 前端注入API密钥本质上不安全:不管是存在
.env文件还是Amplify环境变量中,只要是前端代码能获取到的密钥,用户都可以通过浏览器开发者工具(网络面板、源码查看)拿到,不存在绝对安全的前端存储方式。 - 若非要使用API密钥,必须配合请求来源限制:在API Gateway的资源策略里添加条件,仅允许来自你的Amplify应用域名(比如
https://xxx.amplifyapp.com)的请求。就算密钥泄露,其他域名发起的请求也无法通过验证。 .env文件不够安全:Amplify部署时会把.env中的变量打包进前端代码,最终还是会暴露给客户端,只能作为临时过渡方案,不能依赖它作为核心安全措施。
API Gateway授权器是可行且更优的方案
完全可行,而且不需要额外添加中间后端,直接用API Gateway自带的授权器即可,两种常用类型:
- Cognito用户池授权器:
- 借助Amplify的Auth模块集成Cognito用户池,让前端用户先完成身份验证(比如邮箱/密码登录),Amplify会自动管理身份令牌。
- 在API Gateway配置Cognito授权器,要求请求携带有效的ID令牌或访问令牌,只有通过Cognito验证的请求才能触发后续Lambda。
- 这种方式不仅能限制你的应用访问,还能实现用户级别的权限控制,比如不同用户只能操作自己的数据。
- Lambda自定义授权器:
- 如果不需要用户登录,只想验证请求是否来自你的Amplify应用,可以自定义Lambda授权器:
- 在Lambda中校验请求的
Referer或Origin头部是否为你的Amplify域名。 - 还可以配合签名验证:前端用Amplify环境变量生成请求签名,Lambda验证签名的有效性。
- API Gateway会先调用这个授权器,只有授权通过才会转发请求到业务Lambda。
- 在Lambda中校验请求的
- 这种方式无需用户登录,仅验证请求来源的合法性,适合无用户身份要求的场景。
- 如果不需要用户登录,只想验证请求是否来自你的Amplify应用,可以自定义Lambda授权器:
额外安全加固建议
- 启用API Gateway的WAF(Web应用防火墙):添加IP黑名单、请求频率限制等规则,进一步阻止恶意请求。
- Lambda中不要硬编码MongoDB凭证:把MongoDB连接字符串存放在AWS Secrets Manager中,Lambda运行时动态获取,避免凭证泄露。
内容的提问来源于stack exchange,提问作者animaldesequia
相关产品推荐
相关产品推荐

