使用AWS SDK for JavaScript开发Web应用的IAM用户浏览器认证问询
方案结论与问题解答
1. 能否直接使用现有IAM用户名/密码完成认证、复用现有IAM权限?
不能直接用IAM用户名+密码在前端Web应用中完成认证,原因如下:
- IAM用户名/密码是设计给AWS官方控制台、AWS CLI这类官方客户端使用的身份凭证,AWS官方没有开放面向自定义前端应用的IAM用户名密码直接兑换API调用凭证的接口
- IAM凭证属于高敏感资源,直接在自定义前端中让用户输入IAM用户名密码会大幅提升凭证泄露风险,不符合AWS安全最佳实践
如果你只是要复用用户现有IAM权限,不需要用户名密码登录的体验,有更贴合你原有流程的轻量方案:
做纯静态无后端的Web应用,让用户在界面输入自己的IAM访问密钥(Access Key ID和Secret Access Key),凭证全程仅保存在用户本地浏览器的内存/本地存储中,不会上传到任何第三方服务,直接用本地凭证初始化AWS SDK调用AWS服务,权限完全对应用户自身的IAM权限,和你原有Shell脚本依赖本地~/.aws/credentials的逻辑完全一致,不需要额外配置任何AWS服务。
2. 是否必须使用Cognito、创建额外角色?
完全不需要,Cognito是面向大规模外部用户、需要标准化身份认证流程的场景设计的,你只有10个内部用户,完全可以用上面提到的纯静态前端+用户本地凭证的方案,不需要引入Cognito,也不需要创建额外IAM角色。
只有当你需要实现「用户名密码登录」「不需要用户手动输入访问密钥」的体验时,才需要用到Cognito,且配置复杂度远低于你想象:只需要创建1个Cognito用户池,导入10个用户,给用户池关联对应权限的IAM角色即可,不需要对接外部身份提供商。
3. AWS Amplify是否适配你的场景?
适配,你可以按需使用Amplify的能力:
- 如果你用纯静态前端+本地凭证的方案,可以直接用Amplify封装好的AWS SDK调用能力、前端UI组件,不需要使用Amplify的Auth模块,不需要对接Cognito
- 如果你后续需要升级为用户名密码登录的体验,可以直接用Amplify的Auth组件快速对接Cognito,几行代码就能实现登录、权限校验逻辑,大幅减少开发量
最优方案推荐
对你当前10个内部用户、复用现有IAM权限的场景,最轻量化的实现方案如下:
- 开发纯静态前端页面,不需要后端服务,直接托管在S3或者任意静态文件托管服务上
- 前端提供访问密钥输入框,用户输入自己的IAM访问密钥后,在本地初始化AWS SDK,执行你原来Shell脚本中的逻辑,将结果展示在前端页面
- 全程不需要额外配置任何AWS服务,不需要Cognito,不需要额外角色,开发成本极低,后续更新只需要上传新的静态页面即可,用户打开浏览器就能用,完全满足跨平台、易更新的需求
内容的提问来源于stack exchange,提问作者Ardavast Dayleryan
相关产品推荐
相关产品推荐

