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


16

我正在尝试向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经验,将不胜感激。

Answers:


13

为此,您需要明确允许以下内容:

{
  "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等。


1
这工作。谢谢。用户可以看到所有实例数据,但无法启动/停止/创建,因此足够接近。您是否认为有一种方法可以准确说明他们可以访问哪些安全组,或者我是否需要对所有安全组开放?
克里斯(Chris

@ DevMan14那么有没有办法声明特定的安全组?当我尝试使用以下代码每秒无法使用以下资源时,使用此代码,某人可以使用AWS ec2 describe-security-groups并获得有关每个安全组的大量信息
nsij22 2015年

1
如果您在设置/修改策略后不久看到EC2ResponseError:403禁止的错误,请注意,我的策略生效后花了几分钟的时间
storm_m2138 2013年

12

如果要将编辑限制为单个安全组,我认为您需要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可能不是必需的,但就我而言,我想要它,因此没有它就没有进行测试


1
我能够在没有 DescirbeInstance规则的情况下编辑SG 规则。例如,全局*选项设置为: "ec2:DescribeNetworkAcls", "ec2:DescribeSecurityGroups"
storm_m2138 '16

1

看起来您的安全组可能正在被某个实例或某些其他EC2资源使用。你能试一下吗:

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

谢谢您的回答,但是没有用。是的,安全组被多个实例使用-它们是“ EC2安全组”而不是“ VPC安全组”是否重要?-或者也许我做错了其他事情,因为这也不允许用户看到实例,这是我一半的期望。
克里斯(Chris

1

我一直在寻找一个答案的问题@ nsij22在接受答案的评论中问道。不幸的是,看起来这是不可能的。根据IAM Policy Simulator,只有@ DevMan14的答案中的以下操作可以与特定资源一起使用:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • 撤消SecurityGroupEgress
  • 撤消SecurityGroupIngress

对于其他所有内容,IAM Policy Simulator表示:

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

看起来像这样:

屏幕截图

所有“允许”和“被拒绝”都是相同的,因此我将它们合拢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.