AWS ASG关联Launch Template启动EC2报Server.InternalError错误求助
AWS ASG启动EC2实例自动终止故障排查
核心故障根因
报错Client.InternalError: Client error on launch的直接原因是EBS卷加密使用的KMS密钥权限配置缺失:
- 单独手动启动EC2实例时,使用的操作账号/角色已经在KMS密钥策略的允许列表中,可正常调用KMS接口完成卷的加密/解密操作,实例启动正常
- 关联ASG启动时,由Auto Scaling服务对应的角色(默认是服务关联角色
AWSServiceRoleForAutoScaling,或用户自定义的ASG服务角色)调用KMS接口,该角色未被添加到KMS密钥策略的授权列表中,权限校验失败导致实例启动后直接终止。
解决方案
步骤1:修改KMS密钥策略,添加ASG角色授权
在KMS密钥策略的Allow use of the key、Allow attachment of persistent resources两个Statement的Principal列表中,添加ASG对应角色的ARN:
- 若使用默认ASG服务关联角色,ARN格式为:
arn:aws:iam::[你的AWS账号ID]:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling - 若ASG绑定了自定义服务角色,填写该自定义角色的ARN即可。
修改后的授权片段示例:
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::xxxxxxx:role/core-CloudformationStackAdmin", "arn:aws:iam::xxxxxxx:root", "arn:aws:iam::xxxxxxx:role/core-ServiceCatalogLaunchAdmin", "arn:aws:iam::xxxxxxx:role/core-AccountAdmin=fGLB@I+000", "arn:aws:iam::xxxxxxx:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" ] }, // 其余配置保持不变 }
两个Statement都需要同步添加相同的Principal配置。
步骤2:(可选)调整权限校验条件
如果修改授权后仍然报错,可以先临时移除两个Statement中的"kms:GrantIsForAWSResource": "true"条件,验证是权限问题后再按需补充细粒度权限控制规则。
步骤3:验证修复效果
修改完KMS策略后,调整ASG的期望实例数触发扩容,确认新启动的EC2实例可以正常运行,没有被自动终止即可。
次要排查方向
如果调整KMS权限后问题仍然存在,可进一步检查以下配置:
- 确认Launch Template中指定的AMI、实例类型、安全组、子网在ASG部署的可用区中均存在,没有被删除或禁用
- 确认AWS账号对应区域的EC2实例配额、EBS卷配额没有耗尽
内容的提问来源于stack exchange,提问作者Vaibhav
相关产品推荐
相关产品推荐

