AWS Amplify+React中Storage.put返回403 Forbidden问题求助
问题分析与解决方案
问题根源
你调用Storage.put(image.name, image, { level: 'public' })时返回403,核心原因是:Amplify默认会使用未认证身份池角色处理level: 'public'的存储操作——哪怕当前用户已经完成认证。而你给未认证角色仅配置了读取权限,因此上传请求被拒绝。
解决方案
方案1:调用时强制使用认证角色权限
在Storage.put的配置中添加authMode: 'AMAZON_COGNITO_USER_POOLS',强制让认证用户上传public文件时使用自身的认证角色权限,而非未认证角色:
Storage.put(image.name, image, { level: 'public', authMode: 'AMAZON_COGNITO_USER_POOLS' })
方案2:调整S3存储桶IAM策略(兜底配置)
确认Amplify生成的认证角色IAM策略,确保其拥有public路径的写入权限:
- 认证角色策略需包含对
s3:PutObject、s3:DeleteObject等操作的授权,资源指定为你的存储桶public/*路径(例如arn:aws:s3:::your-bucket-name/public/*) - 未认证角色策略仅保留
s3:GetObject权限,资源同样指向public/*路径
额外验证步骤
在触发上传操作前,先验证用户认证状态,确保只有已登录用户能执行上传:
import { Auth } from 'aws-amplify'; // 上传前检查用户状态 const user = await Auth.currentAuthenticatedUser(); if (user) { // 执行Storage.put操作 }
内容的提问来源于stack exchange,提问作者Olivier Sputael
相关产品推荐
相关产品推荐

