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

AWS REST API无法删除S3文件夹内对象的问题排查

问题分析与解决方案

核心问题是API Gateway路径参数默认不支持包含斜杠的key:当对象位于文件夹内时,key里的/会被API Gateway解析成多级路径,导致请求未匹配到你定义的/{bucket}/{key}路由,进而触发“缺少认证令牌”的错误提示(这个报错信息有误导性,实际是路由不匹配)。

具体修复步骤:

  1. 修改Swagger路径配置,支持带斜杠的key
    将原路径/{bucket}/{key}改为/{bucket}/{key+},其中+是API Gateway的路径参数通配符,表示匹配包含斜杠的任意后续路径片段。修改后的Swagger paths部分如下:

    "paths": {
      "/{bucket}/{key+}": {
        "delete": {
          "produces": ["application/json"],
          "parameters": [
            {"name":"key","in":"path","required":true,"type":"string"},
            {"name":"bucket","in":"path","required":true,"type":"string"}
          ],
          "responses": {"200":{"description":"200 response","schema":{"$ref":"#/definitions/Empty"}}}
        }
      }
    }
    
  2. 修正IAM策略的资源ARN
    你当前的策略资源arn:aws:s3:::my-bucket*/*存在匹配歧义(可能会匹配到my-bucket1这类名称的桶),如果你的桶名是my-bucket,应改为精准匹配的ARN:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion"
          ],
          "Resource": [
            "arn:aws:s3:::my-bucket",  // ListBucket需要桶级资源
            "arn:aws:s3:::my-bucket/*" // 桶内所有对象(包括子文件夹)
          ]
        }
      ]
    }
    
  3. 验证请求的URL编码
    发送DELETE请求时,确保key中的斜杠已正确编码为%2F(大多数HTTP客户端会自动处理,但手动测试时需注意),例如删除docs/report.pdf时,请求路径应为/v1/my-bucket/docs%2Freport.pdf。

内容的提问来源于stack exchange,提问作者Atropin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:35:34