Next.js部署AWS Amplify生产环境S3上传报CredentialsError求助
问题解决:AWS Amplify部署后S3上传凭证缺失错误
核心问题:参数名拼写错误
你代码中初始化S3客户端时,使用了错误的参数名accessIdKey,AWS SDK v2要求的正确参数名是accessKeyId。本地环境可能因为默认凭证链(比如本地~/.aws/credentials文件)自动补全了凭证,所以能正常运行;但生产环境依赖代码中传入的参数,参数名错误导致凭证无法被识别,从而抛出CredentialsError。
修正后的S3初始化代码
const s3 = new S3({ accessKeyId: process.env.ACCESS_KEY_AWS, // 修正参数名 secretAccessKey: process.env.SECRET_KEY_AWS, region: "sa-east-1" // 建议显式指定区域,避免环境自动推断出错 })
更优方案:使用Amplify服务角色替代硬编码凭证
硬编码AWS密钥存在安全风险,推荐通过Amplify的IAM服务角色获取S3访问权限:
- 在Amplify控制台中,为你的应用创建一个带有S3读写权限的IAM角色
- 移除代码中硬编码的
accessKeyId和secretAccessKey参数,AWS SDK会自动从Amplify的运行环境中获取角色凭证:
const s3 = new S3({ region: "sa-east-1" })
额外验证点
- 确认你的S3 Bucket区域与代码中指定的
region一致(你提到是sa-east-1) - 确保IAM角色(无论是你创建的用户角色还是Amplify服务角色)拥有
PutObject等必要的S3操作权限
内容的提问来源于stack exchange,提问作者João Textor
相关产品推荐
相关产品推荐

