S3上传报错InvalidAccessKeyId,如何更新当前用户访问密钥?
问题描述
应用此前运行正常,删除搭建AWS基础设施的用户后,无法上传内容,控制台报错:
Failed to load resource: the server responded with a status of 403 (Forbidden)
Response {type: "cors", url: "https://my-bucket.s3.amazonaws.com/", redirected: false, status: 403, ok: false, …}
Sources面板中显示:
return (<Code>InvalidAccessKeyId</Code> )The AWS Access Key Id you provided does not exist in our records.
应用上传代码配置:
import { uploadFile } from 'react-s3'; const Services = { S3Upload: (file) => { const config = { bucketName: process.env.S3_BUCKET, region: process.env.S3_REGION, accessKeyId: process.env.S3_API_ACCESS_KEY, secretAccessKey: process.env.S3_API_SECRET_KEY, }; return uploadFile(file, config); }, }; export const { S3Upload } = Services; export default Services;
解决方案
1. 确认/创建具备S3上传权限的IAM用户
- 登录AWS控制台,进入IAM服务
- 选择现有用于上传操作的用户,或新建IAM用户(新建时勾选「访问密钥 - 编程访问」选项)
- 给该用户配置S3上传权限:至少需要
s3:PutObject权限,建议创建最小权限的自定义策略,示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::你的Bucket名称/*" } ] }
2. 生成新的访问密钥
- 在IAM用户详情页切换到「安全凭证」标签
- 找到「访问密钥」区域,点击「创建访问密钥」
- 保存生成的Access Key ID和Secret Access Key(Secret仅生成时可见,务必妥善保存)
3. 更新应用环境变量
- 打开项目的环境变量配置文件(比如
.env、.env.local,或部署平台的环境变量设置页) - 将
S3_API_ACCESS_KEY替换为新生成的Access Key ID - 将
S3_API_SECRET_KEY替换为新生成的Secret Access Key - 本地开发需重启应用,线上环境需重新部署应用使配置生效
4. 检查S3 Bucket的CORS配置
因报错包含CORS相关提示,需确保Bucket允许应用域名访问:
- 进入S3控制台,找到目标Bucket,切换到「权限」标签
- 编辑「跨域资源共享(CORS)」规则,示例规则(根据实际域名调整):
[ { "AllowedHeaders": ["*"], "AllowedMethods": ["PUT", "POST"], "AllowedOrigins": ["https://你的应用域名.com", "http://localhost:3000"], "ExposeHeaders": [] } ]
5. 测试上传功能
重新触发应用内的上传操作,检查控制台是否仍有报错,确认文件可正常上传至S3 Bucket。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

