Terraform aws_kms_key抛出MalformedPolicyDocumentException问题求助
排查KMS策略MalformedPolicyDocumentException异常的解决方案
嘿,我看你在用Terraform创建CloudTrail加密的KMS密钥时碰到了策略格式的问题,这就帮你梳理几个核心排查方向:
1. 先补全拼写与未完成的语法
从你贴的代码片段里能看到"Principa..."——这里明显是Principal字段拼写缺了最后一个字母l,而且整个Statement对象的内容也没写完,这种不完整的JSON结构肯定会触发MalformedPolicyDocumentException,先把这部分补全再说。
2. 严格校验JSON格式
KMS策略对JSON格式的要求非常严格,哪怕一个小错误都会报错,你可以对着这几点自查:
- 所有引号必须是双引号,不能用单引号,且要完全闭合
- 检查
{}/[]括号是否一一匹配,没有遗漏或多写 - 数组/对象里的最后一个元素后面不能加逗号(比如Statement数组的最后一条策略语句末尾不能有逗号)
你可以用本地的jq命令,或者把完整策略粘贴到JSON校验工具里,快速定位格式问题。
3. 确保包含CloudTrail所需的必要权限
就算格式修复了,策略里也得给CloudTrail分配足够的权限,不然后续CloudTrail没法正常加密日志。给你一个符合要求的完整示例策略,你可以参考调整:
resource "aws_kms_key" "trail" { description = "KMS Key for CloudTrails encryption" enable_key_rotation = true policy = <<EOF { "Version": "2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "Enable IAM Root Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::${var.account_id}:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow CloudTrail Encrypt/Decrypt Operations", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:${var.region}:${var.account_id}:trail/${var.trail_name}" } } }, { "Sid": "Allow CloudTrail to Describe Key", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*" } ] } EOF }
4. 检查Terraform变量插值
如果你用了var.account_id这类变量,要确保变量已经正确定义并赋值,避免插值后生成无效的ARN或破坏JSON结构。建议先把变量替换成实际值,用JSON工具验证合法后,再放回Terraform代码里。
内容的提问来源于stack exchange,提问作者Zhulian Ginev
相关产品推荐
相关产品推荐

