带加密根卷的EC2实例无法启动:根EBS卷持续处于挂载中
检查KMS密钥的密钥策略
实例角色的权限只是单方面配置,KMS密钥自身的密钥策略必须允许该实例角色访问。需确认密钥策略中添加了允许实例角色ARN执行相关操作的语句,核心需要允许kms:Decrypt和kms:CreateGrant(实例挂载时会自动创建临时授权),示例配置:{ "Sid": "AllowEC2InstanceRoleAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::213456789:role/你的实例角色ARN" }, "Action": [ "kms:Decrypt", "kms:CreateGrant" ], "Resource": "*" }验证实例角色的信任关系
确保实例角色的信任策略允许EC2服务扮演该角色,正确的信任策略应包含:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }若信任关系错误,实例无法获取角色权限,进而无法访问KMS密钥。
确认区域一致性
加密EBS卷仅能使用同区域的KMS密钥,需检查EC2实例所在的拉斯维加斯区域(us-west-4)与KMS密钥指定的区域(us-west-2)是否一致。跨区域密钥无法用于挂载本地EBS卷,这会直接导致挂载失败。核对EBS卷的加密密钥
确认根EBS卷确实关联的是指定的KMS密钥arn:aws:kms:us-west-2:213456789:key/abc123,而非其他自定义密钥或AWS默认服务密钥。若卷使用的密钥不在实例角色的权限范围内,挂载会失败。查看日志定位问题
- 检查CloudTrail日志,搜索
Decrypt或CreateGrant操作的拒绝记录,可直接定位权限问题。 - 查看EC2实例的系统日志(控制台实例详情→监控和故障排除→获取系统日志),其中会包含挂载失败的具体错误提示,比如KMS访问被拒的信息。
- 检查CloudTrail日志,搜索
用默认密钥测试
创建一个使用AWS默认EBS加密密钥(aws/ebs)的卷,尝试挂载到实例。若挂载成功,说明问题出在自定义KMS密钥的权限配置;若仍失败,则需排查实例本身的其他问题(如子网配置、元数据服务访问限制等)。检查实例角色传递能力
确认启动实例时正确指定了IAM角色,且实例所在子网未阻止对AWS元数据服务(169.254.169.254)的访问(安全组或NACL规则需允许)。实例无法访问元数据服务时,无法获取角色临时凭证,进而无法访问KMS密钥。
内容的提问来源于stack exchange,提问作者Mike Altonji

