如何编写AWS IAM策略仅允许将EC2实例的DeleteOnTermination设为false
解决IAM策略限制仅允许修改DeleteOnTermination为false的问题
你的核心问题是现有IAM策略无法精准匹配DeleteOnTermination=false的修改操作,同时命令在Windows环境下的引号转义也有问题,下面直接给解决方案:
正确的IAM策略配置
这个策略会仅允许你在将DeleteOnTermination设为false时执行ModifyInstanceAttribute操作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyInstanceAttribute", "Resource": "*", "Condition": { "StringEquals": { "ec2:Attribute": "BlockDeviceMappings" }, "BoolEquals": { "ec2:Attribute/BlockDeviceMapping/Ebs/DeleteOnTermination": "false" } } } ] }
策略要点解释
ec2:Attribute": "BlockDeviceMappings":先锁定操作仅针对块设备映射属性的修改BoolEquals:ec2:Attribute/BlockDeviceMapping/Ebs/DeleteOnTermination": "false":精准匹配请求里DeleteOnTermination被设置为false的场景,确保只有符合这个条件的操作才被允许
Windows环境CLI命令修正
你之前的命令因为Windows的引号转义规则出错了,用下面两种格式之一都可以:
aws ec2 modify-instance-attribute --instance-id i-12345 --block-device-mappings "[{\"DeviceName\": \"/dev/sda1\",\"Ebs\":{\"DeleteOnTermination\":false}}]"
或者PowerShell专用格式:
aws ec2 modify-instance-attribute --instance-id i-12345 --block-device-mappings '[{"DeviceName": "/dev/sda1","Ebs":{"DeleteOnTermination":false}}]'
额外排查点
- 检查策略语法:确保所有引号都是英文双引号,JSON结构完整(你之前的策略里
"Statement"的引号转义错误,要改成标准格式) - 等待权限生效:IAM策略修改后通常需要1-5分钟才会生效,别急着马上测试
- 缩小资源范围:如果只想针对特定实例,把
Resource改成arn:aws:ec2:你的区域:你的账号ID:instance/i-12345,更安全
内容的提问来源于stack exchange,提问作者adnan
相关产品推荐
相关产品推荐

