You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:54:06