S3存储桶策略配置报错:MalformedPolicy 策略语法无效
AWS S3 Bucket Policy Terraform配置报错排查与修复
报错原因分析
你遇到的MalformedPolicy错误由两个策略语法问题导致:
- Principal格式错误:指定CloudFront服务主体时,必须使用
Service键值对的结构,不能直接将服务域名作为字符串赋值给Principal。 - Resource通配符错误:S3策略中,桶内所有对象的正确通配符是
/*,而非/**,/**不符合AWS IAM策略的通配符规则。
修复后的Terraform代码
resource "aws_s3_bucket_policy" "bucket_policy" { bucket = aws_s3_bucket.bucket.id policy = jsonencode({ Version = "2012-10-17" Id = "AllowGetObjects" Statement = [ { Sid = "AllowPublic" Effect = "Allow" # 修正Principal格式:使用Service嵌套结构指定CloudFront服务 Principal = { Service = "cloudfront.amazonaws.com" } Actions = ["s3:GetObject", "s3:PutObject"] # 修正Resource通配符:使用/*匹配桶内所有对象 Resource = "${aws_s3_bucket.bucket.arn}/*" } ] }) }
额外说明
如果你的CloudFront分发使用的是OAI(Origin Access Identity)而非服务主体,需要将Principal替换为OAI的ARN,格式示例:"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXX"
内容的提问来源于stack exchange,提问作者user3241846
相关产品推荐
相关产品推荐

