You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:15:04