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

如何创建允许所有AWS服务访问但排除Delete权限的IAM策略?

解决AWS策略允许所有服务但禁止Delete权限的简便方法

嘿,我完全懂你的困扰——逐个枚举每个AWS服务的Delete*动作不仅麻烦,而且直接用"*:Delete*"在NotAction里根本不生效,这其实是IAM的规则限制导致的。别担心,有个更简洁的方案能搞定这个需求。

核心思路:用Deny规则覆盖Allow权限

IAM的权限评估逻辑里,Deny会优先于Allow。所以我们可以先创建一个允许所有AWS服务操作的规则,再添加一个全局拒绝所有Delete开头动作的规则,这样就能轻松实现“允许所有,除了删除”的效果,不用逐个服务去标注。

完整策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": "*:Delete*",
            "Resource": "*"
        }
    ]
}

为什么这个方案可行?

  • 第一个语句"Action": "*"会允许所有AWS服务的所有操作,范围是全局的。
  • 第二个语句"Action": "*:Delete*"会匹配所有服务中以Delete开头的动作(比如ec2:DeleteVolume、s3:DeleteObject、iam:DeleteUser等),并且用Deny来禁止这些操作——由于Deny的优先级更高,这些删除动作会被彻底拦截。

注意事项

虽然绝大多数AWS服务的删除动作都是以Delete开头,但极少数服务可能有例外(比如某些自定义动作或者特殊命名的操作)。如果遇到这种情况,只需要在Deny语句里额外添加对应的动作即可,不过这种场景非常少见。

为什么你之前的NotAction方案不行?

IAM的NotAction字段不支持跨服务的通配符写法(比如*:Delete*),它只接受明确的服务前缀(比如ec2:*)或者完整的动作名。所以逐个服务写NotAction才会生效,但显然效率太低,不如上面的Deny方案简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:26:17