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

EC2实例配置文件KMS权限问题导致ASG创建的EC2实例启动后终止

问题根因排查与修复方案

核心问题1:IAM权限拼写错误

你当前实例IAM策略中的kms:GenerateDataKeyWithoutPlainText为错误写法,AWS IAM权限大小写敏感,正确权限名为kms:GenerateDataKeyWithoutPlaintext(末尾t为小写),拼写错误直接导致KMS权限校验失败。

核心问题2:KMS密钥策略缺失必要权限

EC2实例启动阶段(实例角色未加载完成时)的EBS加密卷挂载操作由EC2、Auto Scaling服务主体执行,你仅给实例角色授予了KMS权限,但未在KMS客户管理密钥(CMK)的密钥策略中给对应服务主体授予操作权限,这是最常见的启动失败原因。

修复步骤

  1. 修正实例IAM策略的拼写错误
    更新data "aws_iam_policy_document" "instance_policy"中的KMS动作列表:
statement {
    actions = [
       "kms:Encrypt",
       "kms:Decrypt",
       "kms:ReEncrypt",
       "kms:GenerateDataKey",
       "kms:DescribeKey",
       "kms:GenerateDataKeyWithoutPlaintext"
    ]
    resources = [var.device_encryption_key]
}
  1. 更新KMS密钥的资源策略
    如果你是用Terraform管理该KMS密钥,直接在aws_kms_key资源的policy中添加如下statement:
statement {
    sid    = "Allow EC2 and ASG service access for EBS encryption"
    effect = "Allow"
    principals {
        type = "Service"
        identifiers = [
            "ec2.amazonaws.com",
            "autoscaling.amazonaws.com"
        ]
    }
    actions = [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ]
    resources = ["*"]
}

如果密钥不是当前Terraform栈管理,直接到AWS KMS控制台找到对应密钥,在密钥策略中添加上述权限即可。
3. 验证修复
重新执行terraform apply更新配置,触发ASG实例滚动更新,确认实例可正常启动运行。

额外注意事项

当前实例角色授予了ec2:*的全权限,生产环境建议根据实际使用场景收紧权限,避免权限过大带来的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:45:00