单HTML页面调用AWS SDK所需配置凭证的安全存储与获取方案咨询
前端单页应用调用AWS服务的凭证安全最佳实践
首先明确核心规则:所有运行在浏览器端的代码完全公开可获取,绝对不能在前端代码中硬编码、存储任何长期有效的AWS访问凭证,避免凭证泄露导致账号被滥用、数据泄露或产生超额费用。
针对你的场景,可行的安全方案有以下两种:
- 方案一:通过Amazon Cognito身份池获取临时凭证
Cognito身份池是AWS官方提供的客户端身份管理服务,专门用于给Web/移动端客户端下发短期受限的访问凭证:- 在AWS控制台创建Cognito身份池,根据业务需求选择允许未授权用户访问,或者要求用户先登录认证
- 为身份池对应的IAM角色配置最小必要权限,仅开放访问指定Secrets Manager密钥的权限,禁止其他不必要的服务权限
- 前端代码先调用Cognito API获取临时凭证(包含
accessKeyId、secretAccessKey、sessionToken,默认有效期最长12小时),再用临时凭证初始化AWS SDK调用Secrets Manager
这种方式下发的凭证有自动过期时间,就算被窃取也不会产生长期风险,同时权限被严格限制,危害范围可控。
- 方案二:新增后端代理层转发请求(推荐)
完全避免前端直接访问AWS服务,所有对Secrets Manager的请求都走你自己的后端服务代理:- 可以选择用API Gateway + Lambda的无服务架构,或者自己现有的服务端
- AWS凭证仅存储在后端的安全配置中(比如服务端的环境变量、Lambda的加密配置项),前端完全不需要接触凭证
- 前端只需要请求你自己的业务接口,后端完成Secrets Manager的调用、权限校验、请求限流之后,把需要的内容返回给前端
这种方案的安全性最高,完全规避了前端凭证泄露的风险,还可以灵活叠加业务逻辑控制。
禁止操作
不要尝试把凭证存储在浏览器的localStorage、sessionStorage等位置,一旦站点存在XSS漏洞,凭证会被攻击者直接窃取,风险和硬编码一致。
内容的提问来源于stack exchange,提问作者EDJ
相关产品推荐
相关产品推荐

