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

S3静态网站对象URL访问报错:KMS加密请求需AWS Signature Version 4

问题分析与解决办法

问题根源

你遇到的InvalidArgument错误,核心原因是你的S3对象使用了AWS KMS托管密钥(SSE-KMS)进行服务器端加密,而直接通过对象URL的匿名请求(未携带AWS Signature Version 4签名)无法满足KMS加密对象的访问要求——SSE-KMS加密的对象必须通过带SigV4签名的请求访问,匿名请求(Authorization头为null)不被允许。

解决方案

1. 改用S3托管密钥(SSE-S3)加密对象(推荐,安全且简单)

这是最适合静态网站公开访问场景的方案:

  • 登录AWS S3控制台,找到目标存储桶
  • 定位index.html和error.html对象,依次点击对象右侧的「操作」→「编辑服务器端加密」
  • 在加密设置中选择「AWS S3 托管密钥 (SSE-S3)」,保存配置
  • 重新上传这两个文件(或等待配置生效)后,再通过对象URL或静态网站端点访问

2. 配置KMS密钥允许匿名解密(不推荐,存在安全风险)

如果必须保留SSE-KMS加密,可修改KMS密钥策略允许匿名请求解密,但会降低密钥安全性:

  • 登录AWS KMS控制台,找到对应KMS密钥
  • 进入「密钥策略」页面,点击「编辑」
  • 添加以下策略语句(替换你的AWS账户ID和你的区域为实际信息):
    {
      "Sid": "AllowAnonymousS3Decrypt",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:CallerAccount": "你的AWS账户ID",
          "kms:ViaService": "s3.你的区域.amazonaws.com"
        }
      }
    }
    
  • 保存策略后,再尝试访问对象

3. 使用静态网站端点访问而非对象直接URL

确认你使用的是S3静态网站的专属端点(格式通常为http://<桶名>.<区域>.s3-website.amazonaws.com),而非对象的直接访问URL。不过此方法仅能解决路由问题,核心的加密限制仍需通过前两种方案解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:50:36