Terraform配置AWS S3桶策略时出现MalformedPolicy无效Action报错问题
S3桶策略MalformedPolicy报错排查解决
核心问题定位
你提供的配置代码存在两个语法错误,直接导致生成的策略Action字段非法:
Action = "s3:CopyObject行末尾缺失双引号闭合,jsonencode生成的策略会将后续的注释、换行符等内容拼接为Action的值,AWS识别为非法动作- 你注释了多Action的数组配置,当前Action字段为不完整的单字符串,不符合IAM策略语法要求
修复示例
单Action配置(仅允许CopyObject)
resource "aws_s3_bucket_policy" "awsbucketprodpolicy" { bucket = local.prodtbucket policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Principal = "*" Action = "s3:CopyObject" Resource = [ aws_s3_bucket.prodbucket.arn, "${aws_s3_bucket.prodbucket.arn}/*", ] } ], }) }
多Action配置(允许CopyObject/DeleteObject/GetObject)
resource "aws_s3_bucket_policy" "awsbucketprodpolicy" { bucket = local.prodtbucket policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Principal = "*" Action = ["s3:CopyObject","s3:DeleteObject","s3:GetObject"] Resource = [ aws_s3_bucket.prodbucket.arn, "${aws_s3_bucket.prodbucket.arn}/*", ] } ], }) }
额外校验步骤
如果修复后仍有报错,可按以下步骤排查:
- 执行
terraform plan查看输出的policy字段JSON结构是否正常,无多余字符 - 校验S3动作拼写是否正确,S3动作大小写敏感,必须严格遵循官方命名规则
- 确认配置的动作和Resource对应,对象级动作需要匹配
/*后缀的资源ARN,桶级动作匹配桶ARN
内容的提问来源于stack exchange,提问作者AndrewK
相关产品推荐
相关产品推荐

