S3 BucketPolicy部署遇E2507及MalformedPolicy错误求助
解决AWS S3 BucketPolicy部署错误:MalformedPolicy与E2507
问题根源
你遇到的两个错误都是同一个原因导致的:YAML大小写敏感,而AWS IAM策略要求Version字段首字母必须大写。你当前代码里的version(小写v)不符合AWS的策略规范,因此被识别为无效字段,触发:
- 部署阶段的
MalformedPolicy错误(提示Unknown field version) sam validate --lint检测的E2507错误(提示"IAM Policy key version doesn't exist")
YAML校验网站只验证语法格式,不会检查AWS服务的特定字段规范,所以无法发现这个问题。
修正后的BucketPolicy代码
将PolicyDocument里的version改为Version即可解决问题:
BucketPolicy: Type: AWS::S3::BucketPolicy Properties: PolicyDocument: Id: MyPolicy Version: '2012-10-17' # 改为首字母大写的Version Statement: - Sid: PublicReadForGetBucketObject Effect: Allow Principal: '*' Action: "s3:GetObject" Resource: !Join - "" - - "arn:aws:s3:::" - !Ref MyWebsite - /* Bucket: !Ref MyWebsite
额外说明
AWS IAM策略的核心字段(如Version、Statement、Effect等)都是大小写敏感的,必须严格按照官方规范的大小写编写,否则会触发各类验证或部署错误。
内容的提问来源于stack exchange,提问作者Travis Salmon
相关产品推荐
相关产品推荐

