Terraform配置KMS策略遇MalformedPolicyDocumentException错误求助
解决KMS策略MalformedPolicyDocumentException错误及权限配置问题
错误原因及修复步骤
1. 条件键使用错误
你的denyPolicy中条件部分的键AWS是无效的,AWS策略条件必须使用官方定义的上下文键,针对用户身份校验应使用aws:PrincipalArn或aws:PrincipalId这类合法键。
2. 无效动作配置
allowPolicy中的kms:CreateKey是账户级别的IAM动作,不能配置在KMS密钥策略中——密钥策略仅控制对具体KMS密钥的访问权限,创建密钥的权限需通过IAM用户/角色的策略分配。
3. 策略逻辑冗余(可选优化)
如果目标是仅允许usera和userb访问该KMS密钥,无需同时配置多组Allow和Deny语句,可简化逻辑减少出错概率。
修复后的Terraform策略示例
resource_policy_statements = { allowSpecificUsers = { actions = ["kms:*"] effect = "Allow" resources = ["*"] principals = { AWS = [ "arn:aws:iam::123456789012:user/usera", # 替换为实际用户ARN "arn:aws:iam::123456789012:user/userb" # 替换为实际用户ARN ] } }, denyOthers = { actions = ["kms:*"] effect = "Deny" resources = ["*"] principals = { AWS = ["*"] } conditions = { StringNotLike = { "aws:PrincipalArn" = [ "arn:aws:iam::123456789012:user/usera", "arn:aws:iam::123456789012:user/userb" ] } } } }
关键注意事项
- 用户身份必须使用完整ARN,不能仅写用户名,否则策略无法正确匹配身份。
- KMS密钥策略默认拒绝所有未明确允许的访问,若不需要全局强拒绝,可只保留Allow语句,无需额外配置Deny。
- 账户级动作(如
kms:CreateKey、kms:ListKeys)需在IAM策略中配置,而非KMS密钥策略。
内容的提问来源于stack exchange,提问作者AnotherEngineer
相关产品推荐
相关产品推荐

