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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:43:19