使用 IAM 允许用户编辑 AWS / EC2 安全组?

使用 IAM 允许用户编辑 AWS / EC2 安全组?

我正在尝试授予 IAM 组编辑我们的 EC2 安全组的权限,但如果不授予对 EC2 中所有内容的访问权限,我就无法使此功能正常工作。

我尝试过几个版本:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392336685000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
      ]
    }
  ]
}

但是当我使用 IAM 用户登录时,我在安全组页面收到一条消息,提示“您无权执行此操作”。

我确实知道用户/组正在工作,因为如果我选择“Amazon EC2 完全访问权限”的 IAM 策略模板,则用户可以访问 EC2 中的所有内容。

我显然没有太多的 IAM 经验,如能得到任何帮助我将非常感激。

答案1

为了使其正常工作,您需要明确允许以下操作:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392679134000",
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CreateSecurityGroup",
        "ec2:DeleteSecurityGroup",
        "ec2:DescribeInstanceAttribute",
        "ec2:DescribeInstanceStatus",
        "ec2:DescribeInstances",
        "ec2:DescribeNetworkAcls",
        "ec2:DescribeSecurityGroups",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

上述 JSON 策略基本上规定用户只能访问上述内容。他们无法访问其他任何内容。其中包括 ec2 实例、S3、IAM、cloudfront 等。

答案2

如果您想将编辑限制到单个安全组,我认为您需要 2 个语句,以下语句对我有用:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1413232782000",
            "Effect": "Allow",
            "Action": [               
                "ec2:DescribeInstanceAttribute",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeSecurityGroups"              
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Stmt1413232782001",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",                
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:<accountid>:security-group/sg-<id>"
            ]
        }
    ]
}

DescribeInstance 可能不需要,但就我而言,我需要它,所以没有使用它进行测试

答案3

Scott Moore 给出的答案在撰写本文时被选为正确答案,但这个答案已经不能解决问题了。这不是 Scott 的错,AWS 经常更改很多东西。

我们遵循了AWS 文档并创建了一个自定义策略,该策略在过去的 1.5 年左右一直运行良好,突然今天早上我们的客户在编辑安全组时开始遇到问题,因此我偶然发现了这个线程以尝试可能的解决方案。

我最终从头开始创建了一个自定义策略,因为今天早上 AWS IAM 策略方面似乎已经弃用了一些关键功能;因此,在我撰写本文时有效的策略是:-

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSecurityGroupRules",
                "ec2:ModifySecurityGroupRules"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
                "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
            ],
            "Resource": "arn:aws:ec2:*:*:security-group/*"
        }
    ]
}

这 :-

  • 允许编辑/删除现有安全组内的现有规则。
  • 允许在现有的安全组内创建新规则。
  • 不允许创建新的安全组或删除现有的安全组。

问题从来没有集中在允许创建新的安全组或删除现有的安全组,因此这尚未添加到策略中,但如果读者有要求,可以添加。

答案4

我正在寻找一个问题@nsij22在接受的答案的评论中询问。不幸的是,看起来这是不可能的。根据IAM 策略模拟器,只有以下行动@DevMan14的答案可以与特定资源一起使用:

  • 删除安全组
  • 授权安全组出口
  • 授权安全组入口
  • 撤销安全组出口
  • 撤销安全组入口

对于其他一切,IAM Policy Simulator 表示:

此操作不支持资源级权限。授予访问权限的策略必须在资源元素中指定“*”。

它看起来像这样:

截屏

所有的“允许”和“拒绝”都相同,所以我将它们折叠起来。

相关内容