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

使用Terraform附加KMS密钥策略时遇MalformedPolicyDocumentException错误

错误含义与解决方案

错误含义

这个错误表示你配置的KMS密钥策略存在致命缺陷:应用该策略后,将没有任何主体具备修改该密钥策略的权限。AWS为了防止你彻底“锁死”密钥(无法再更新策略、管理密钥),会直接拒绝应用这种策略。

问题根源

你当前的策略把根用户(arn:aws:iam::${var.account}:root)的权限和CloudFront的权限放在同一条语句中,并添加了AWS:SourceArn条件——这意味着只有来自指定CloudFront分发的请求才能触发该权限。但修改密钥策略的请求来自你的IAM用户/根用户,并非CloudFront,因此根用户实际上无法执行修改策略的操作,触发了AWS的保护机制。

解决方案

拆分策略语句,单独为根用户(或管理员IAM实体)授予不受条件限制的密钥管理权限,再为CloudFront配置带条件的最小权限:

修改后的策略文档

data "aws_iam_policy_document" "key_policy" {
  # 语句1:允许根账户完全管理密钥(包括修改策略)
  statement {
    sid = "AllowRootAccountFullAccess"
    effect = "Allow"
    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::${var.account}:root"]
    }
    actions = [
      "kms:*"
    ]
    resources = ["*"]
  }

  # 语句2:允许CloudFront仅在指定分发请求下使用密钥(遵循最小权限原则)
  statement {
    sid = "AllowCloudFrontKMSUse"
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["cloudfront.amazonaws.com"]
    }
    actions = [
      "kms:Decrypt",
      "kms:DescribeKey"
    ]
    resources = ["*"]
    condition {
      test     = "StringEquals"
      variable = "AWS:SourceArn"
      values   = ["${aws_cloudfront_distribution.s3_distribution.arn}"]
    }
  }
}

关键说明

  1. 拆分语句:将根用户的管理权限与CloudFront的使用权限分离,确保根用户不受条件限制,始终能修改密钥策略。
  2. 最小权限:给CloudFront仅分配实际需要的kms:Decrypt和kms:DescribeKey权限,替代原有的kms:*,降低权限风险。
  3. 优先级规则:KMS密钥策略直接控制密钥访问权限,优先级高于IAM用户权限——即使你的IAM用户有AdministratorAccess,也必须在密钥策略中明确授予管理权限。

内容的提问来源于stack exchange,提问作者nealous3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:13:25