Strapi集成AWS S3突然失效问题排查求助
Strapi集成AWS S3异常问题
我按照@strapi/provider-upload-aws-s3的文档完成了AWS S3集成,此前运行正常,但从昨天起该功能突然失效。
配置文件信息
config/plugin.js
module.exports = () => ({}); module.exports = ({ env }) => ({ upload: { config: { provider: 'aws-s3', providerOptions: { accessKeyId: env('AWS_ACCESS_KEY_ID'), secretAccessKey: env('AWS_ACCESS_SECRET'), region: env('AWS_REGION'), params: { ACL: env('AWS_ACL', 'public-read'), signedUrlExpires: env('AWS_SIGNED_URL_EXPIRES', 15 * 60), Bucket: env('AWS_BUCKET'), }, }, actionOptions: { upload: {}, uploadStream: {}, delete: {}, }, }, }, }); module.exports = ({ env }) => ({ "react-icons": true, });
config/middleware.js
module.exports = [ 'strapi::logger', 'strapi::errors', { name: 'strapi::security', config: { contentSecurityPolicy: { useDefaults: true, directives: { 'connect-src': ["'self'", 'https:'], 'img-src': [ "'self'", 'data:', 'blob:', 'dl.airtable.com', 'ssp-server-strapi-seed.s3.ap-south-1.amazonaws.com', ], 'media-src': [ "'self'", 'data:', 'blob:', 'dl.airtable.com', 'ssp-server-strapi-seed.s3.ap-south-1.amazonaws.com', ], upgradeInsecureRequests: null, }, }, }, }, 'strapi::cors', 'strapi::poweredBy', 'strapi::query', 'strapi::body', 'strapi::session', 'strapi::favicon', 'strapi::public', ];
package.json
{ "name": "emvigostrapi", "private": true, "version": "0.1.0", "description": "A Strapi application", "scripts": { "develop": "strapi develop", "start": "strapi start", "build": "strapi build", "strapi": "strapi" }, "dependencies": { "@strapi/plugin-cloud": "4.23.1", "@strapi/plugin-graphql": "^4.24.0", "@strapi/plugin-i18n": "4.23.1", "@strapi/plugin-users-permissions": "4.23.1", "@strapi/provider-upload-aws-s3": "^4.24.0", "@strapi/strapi": "4.23.1", "mysql": "2.18.1", "react": "^18.0.0", "react-dom": "^18.0.0", "react-router-dom": "5.3.4", "strapi-plugin-react-icons": "^0.2.2", "styled-components": "5.3.3" }, "author": { "name": "A Strapi developer" }, "strapi": { "uuid": "f5e0be03-0813-48a6-8339-" }, "engines": { "node": ">=18.0.0 <=20.x.x", "npm": ">=6.0.0" }, "license": "MIT" }
可能的原因及排查方向
1. Plugin配置被覆盖(最直接的问题)
你的config/plugin.js里有三个module.exports语句,Node.js中模块最后一个导出会完全覆盖前面的内容,导致你的AWS S3上传配置根本没生效,实际只有最后一行的react-icons配置在运行。
修复方式:把所有配置合并到一个module.exports中:
module.exports = ({ env }) => ({ upload: { config: { provider: 'aws-s3', providerOptions: { accessKeyId: env('AWS_ACCESS_KEY_ID'), secretAccessKey: env('AWS_ACCESS_SECRET'), region: env('AWS_REGION'), params: { ACL: env('AWS_ACL', 'public-read'), signedUrlExpires: env('AWS_SIGNED_URL_EXPIRES', 15 * 60), Bucket: env('AWS_BUCKET'), }, }, actionOptions: { upload: {}, uploadStream: {}, delete: {}, }, }, }, "react-icons": true, });
2. AWS凭证或权限变更
- 检查
AWS_ACCESS_KEY_ID和AWS_ACCESS_SECRET是否过期,或者对应的IAM用户权限被修改(比如移除了S3的上传/删除权限) - 确认IAM用户是否拥有
s3:PutObject、s3:GetObject、s3:DeleteObject等必要权限
3. S3存储桶配置变更
- 检查存储桶的区域是否和配置中的
AWS_REGION一致 - 确认桶的ACL设置是否和配置中的
public-read匹配,或者桶的访问政策是否被修改导致无法访问 - 检查存储桶是否被开启了"阻止公共访问"设置(如果需要公开访问的话)
4. 依赖版本不兼容
你的@strapi/provider-upload-aws-s3版本是4.24.0,而Strapi核心版本是4.23.1,跨小版本可能存在兼容问题。建议将上传插件降级到和Strapi核心一致的4.23.1,或者升级Strapi核心到4.24.0保持版本统一。
5. 中间件CSP配置(次要排查)
如果修复上述问题后仍有前端加载图片的问题,确认img-src和media-src中的S3桶域名是否正确,是否和实际使用的存储桶域名一致。
内容的提问来源于stack exchange,提问作者Abin PM
相关产品推荐
相关产品推荐

