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

如何禁止所有主体向S3存储桶上传未加密对象并修复策略报错

错误根因

你收到MalformedPolicy报错的核心原因是S3存储桶策略的Resource字段不允许直接使用泛通配符*,桶策略作为绑定到指定存储桶的访问控制规则,AWS要求所有Resource必须明确指向当前绑定存储桶的资源范围,泛化通配符不符合桶策略的语法校验规则。

修复方案

将Resource字段替换为当前存储桶下所有对象的ARN即可,在CloudFormation模板中可以通过!Sub函数动态拼接存储桶ARN:

PolicyS3BucketPolicy:
  Type: AWS::S3::BucketPolicy
  DependsOn: PolicyS3Bucket
  Properties:
    Bucket: !Ref PolicyS3Bucket
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Effect: Deny
          Sid: DenyUnEncryptedObjectUploads
          Action: "s3:PutObject"
          # 仅修改Resource字段为如下内容即可
          Resource: !Sub arn:aws:s3:::${PolicyS3Bucket}/*
          Principal:
            AWS: "*"
          Condition:
            StringNotEquals:
              "s3:x-amz-server-side-encryption": "aws:kms"

补充说明

  • 如果你需要同时支持SSE-S3(AES256)加密方式而非强制使用KMS加密,可以修改s3:x-amz-server-side-encryption的取值为AES256,也可以添加StringEqualsIfExists条件适配不同加密场景
  • 修改后的策略会严格拒绝所有未携带KMS加密头的对象上传请求,覆盖所有主体,符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:09:00