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

如何编写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}}]'

额外排查点

  1. 检查策略语法:确保所有引号都是英文双引号,JSON结构完整(你之前的策略里"Statement"的引号转义错误,要改成标准格式)
  2. 等待权限生效:IAM策略修改后通常需要1-5分钟才会生效,别急着马上测试
  3. 缩小资源范围:如果只想针对特定实例,把Resource改成arn:aws:ec2:你的区域:你的账号ID:instance/i-12345,更安全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:38:34