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

AWS SAM模板更新S3 Bucket Policy时提示无效资源(MalformedPolicy)问题求助

解决AWS SAM S3桶策略的MalformedPolicy错误

我来帮你定位问题根源——你遇到的MalformedPolicy错误,核心是S3动作与对应的资源ARN不匹配。S3的桶级动作和对象级动作需要对应不同的资源范围,不能混在一起用。

问题分析

S3的权限动作分为两类:

  • 桶级动作:比如s3:ListBucket,这类动作只能作用于桶本身(ARN格式:arn:aws:s3:::bucket-name),不能带/*或者末尾斜杠。
  • 对象级动作:比如s3:GetObject、s3:PutObject、s3:DeleteObject,这类动作作用于桶内的对象,对应的ARN格式是arn:aws:s3:::bucket-name/*。

你当前的策略把所有动作都绑定了两个资源(桶和对象ARN),导致s3:ListBucket这个桶级动作被错误地关联到了对象资源,触发了格式错误。

修正后的SAM模板

把策略拆分成两个Statement,分别对应桶级和对象级权限:

BucketPolicy:
  Type: AWS::S3::BucketPolicy
  Properties:
    Bucket: !Ref MyWebsite
    PolicyDocument:
      Id: MyPolicy
      Version: 2012-10-17
      Statement:
        # 处理桶级的ListBucket权限
        - Sid: BucketListAccess
          Effect: Allow
          Principal: "*"
          Action: 's3:ListBucket'
          Resource: "arn:aws:s3:::my-resume-wesite123456"
        # 处理对象级的读写删权限
        - Sid: ObjectReadWriteDeleteAccess
          Effect: Allow
          Principal: "*"
          Action:
            - 's3:GetObject'
            - 's3:PutObject'
            - 's3:DeleteObject'
          Resource: "arn:aws:s3:::my-resume-wesite123456/*"

额外建议

  1. 灵活引用桶ARN:建议用!Sub来动态生成ARN,避免硬编码桶名,比如把资源写成:
    Resource: !Sub "arn:aws:s3:::${MyWebsite}"
    
    和
    Resource: !Sub "arn:aws:s3:::${MyWebsite}/*"
    
    这样后续修改桶名时不用手动更新策略。
  2. 权限安全风险:当前策略用*作为Principal,意味着任何人都能读写删除你桶里的内容,生产环境一定要限制为特定的IAM用户/角色,不要使用通配符。
  3. 桶名拼写:注意你桶名里的wesite是website的笔误,虽然已经成功创建桶,但后续建议修正避免混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:12:37