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

如何编写IAM策略允许指定账号执行EC2:RunInstances并限制特定标签实例操作

解决方案

问题根源

之前的IAM策略失效是因为对ec2:RunInstances操作的所有关联资源(包括实例、AMI、安全组等)统一设置了aws:ResourceAccount = 111111111111条件,但公共AMI属于第三方账号(如AWS官方账号801119661308),不满足该条件,导致授权被拒绝。

正确的IAM策略

以下策略实现两个核心需求:

  1. 允许在账号111111111111内执行所有EC2操作,包括使用任意账号的AMI创建实例;
  2. 禁止操作带有cluster=team-prod-eks或cluster=team-stage-eks标签的EC2实例。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": [
                "arn:aws:ec2:*:111111111111:instance/*",
                "arn:aws:ec2:*:111111111111:security-group/*",
                "arn:aws:ec2:*:111111111111:subnet/*",
                "arn:aws:ec2:*:111111111111:volume/*",
                "arn:aws:ec2:*:111111111111:network-interface/*",
                "arn:aws:ec2:*:111111111111:key-pair/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": "ec2:*",
            "Resource": "arn:aws:ec2:*:111111111111:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/cluster": [
                        "team-prod-eks",
                        "team-stage-eks"
                    ]
                }
            }
        }
    ]
}

策略说明

  • 第一条允许语句:授权所有EC2操作在账号111111111111的核心EC2资源上,确保这些资源归属目标账号;
  • 第二条允许语句:单独授权ec2:RunInstances操作可以使用任意账号的AMI和快照,解决公共AMI的跨账号权限问题;
  • 第三条拒绝语句:拒绝所有EC2操作在带有指定标签的实例上,由于IAM拒绝策略优先级高于允许策略,即使用户有基础操作权限,也无法修改或删除这些EKS集群节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:31:04