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

使用签名POST上传S3时报access denied,是否为存储桶策略导致?

问题根因排查

核心原因:当前存储桶策略缺少上传权限授权

你当前未开公共访问的shofi-mod存储桶,现有策略仅授予CloudFront源访问身份(OAI)s3:GetObject的读取权限,完全没有给你发起签名POST请求所使用的IAM身份(用户/角色)授予任何写入类权限,这是返回access denied的最直接原因。
对比你另一台可正常上传的存储桶策略,其明确给指定IAM用户授予了包含s3:Put*在内的写入权限,对应上传操作的权限要求。

其他可能的排查点

  • 确认生成签名POST所用的IAM身份,除了存储桶策略授权外,自身的IAM权限策略也需要放开对应桶的s3:PutObject权限,资源需要同时覆盖桶本身(arn:aws:s3:::shofi-mod)和桶内对象路径(arn:aws:s3:::shofi-mod/*)
  • 检查签名POST的请求参数是否与生成签名时的预设条件完全匹配:包括签名有效期、文件大小限制、对象key前缀、ACL配置等,参数不匹配也会返回403错误
  • 若存储桶开启了KMS默认加密,需要额外给所用IAM身份授予对应KMS密钥的kms:GenerateDataKey、kms:Decrypt权限
  • 检查存储桶的公共访问阻止配置,若使用跨账号IAM身份发起请求,需要确认公共访问规则没有拦截跨账号写入操作

修复示例

你可以在现有shofi-mod存储桶策略的Statement数组中新增一条授权规则,给你发起上传所用的IAM身份开放上传权限,示例如下(替换Principal为你实际使用的身份ARN):

{
    "Sid": "AllowSignedPostUpload",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam:::user/shofi-stuff-bucket-user"
    },
    "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
    ],
    "Resource": "arn:aws:s3:::shofi-mod/*"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:27:04