Terraform创建EC2实例时因根块设备加密报错无法达到目标状态
排查步骤
- 校验KMS密钥权限:你使用的自定义KMS密钥必须给EC2服务关联角色、执行Terraform操作的IAM身份(用户/角色)授予至少
kms:CreateGrant、kms:Decrypt、kms:GenerateDataKeyWithoutPlaintext、kms:DescribeKey的操作权限。 - 检查AMI合法性:你提供的配置中AMI ID仅填写了
ami-前缀,需确认使用的是ap-south-1区域下有权限访问的合法AMI;如果该AMI本身为加密状态,还需确保你持有AMI对应加密密钥的访问权限。 - 排查配置冲突:你已在EC2控制台开启新EBS卷默认加密,可临时删除代码中
encrypted和kms_key_arn两个参数,使用默认加密配置测试实例是否能正常启动,排除配置冲突问题。 - 校验可用区库存:确认ap-south-1a可用区有t2.micro实例的库存,可临时修改
availability_zone参数为ap-south-1b测试,排除可用区库存不足的问题。 - 检查账号配额:确认你的账号在ap-south-1区域的EC2实例配额、EBS卷配额未达到上限。
解决方法
该报错90%以上的场景为KMS密钥策略配置错误,可按以下流程修复:
- 打开AWS KMS控制台,找到你代码中指定的KMS对称密钥,进入密钥策略编辑页面
- 在密钥策略中添加如下权限语句,替换对应账号、区域、密钥参数即可:
{ "Sid": "Allow EC2 service to use KMS key for EBS encryption", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": "*" }
- 确认执行Terraform操作的IAM身份的权限策略中,也包含上述KMS操作权限,以及
ec2:RunInstances、ec2:CreateVolume等EC2相关操作权限。 - 补全配置文件中的完整AMI ID,确认该AMI在ap-south-1区域可用后,重新执行
terraform apply验证。
内容的提问来源于stack exchange,提问作者Shekhar
相关产品推荐
相关产品推荐

