某些EC2实例的AWS IAM策略授予权限

时间:2019-02-19 15:13:45

标签: amazon-web-services amazon-ec2 amazon-iam

我想限制特定用户的访问权限,使其仅能看到几个EC2实例。我在IAM角色中创建了一个新用户,并为其附加了新策略。该政策的内容如下。我试图查看文档并自己这样做:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": [
                "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID1",
                "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID2"
            ]
        }
    ]
}

我放置了regionACCOUNT_ID(所有者ID,不是创建的新用户的所有者)和instance-id,但是当我与该用户建立联系时,我列出了所有实例我得到了这个An error occurred fetching instance data: You are not authorized to perform this operation.

将代码放入JSON编辑器后,在策略审核步骤中,我收到以下消息:

  

此策略定义了一些不符合要求的操作,资源或条件   提供权限。要授予访问权限,策略必须采取措施   具有适用的资源或条件。有关详细信息,请选择显示   剩下的了解更多

AWS documentation提到的配置或these examples完全相同。

3 个答案:

答案 0 :(得分:2)

我假设您以控制台中的该用户身份进行连接(但是与CLI相同),这是我认为正在发生的事情:

要列出所有实例,控制台很可能会调用DescribeInstances API。根据IAM策略中可以使用的action/resources/tags列表,此API不支持IAM中的资源过滤器。

这意味着您的用户无权列出实例,并且这些实例不会在控制台中显示。您可以通过使用CLI要求特定实例ID的详细信息来验证这一理论,如果我的假设正确,它将被授权。

由于DescribeInstances不受资源或标签的限制,因此我认为无法为用户过滤实例列表。

要使控制台正常工作,您需要在IAM策略中添加以下语句

 "Statement": [
     { your existing statement }, 

     {
         "Effect": "Allow",
         "Action": "ec2:DescribeInstances",
         "Resource": "*"
     }
 ]

请报告我是否正确:-)您问题中的example you mentioned确切显示:Resources = *上的DescribeInstances和其他操作上的资源特定InstanceId。

答案 1 :(得分:0)

上一个答案是错误的,您可以有条件地允许通过标签名称访问ec2:DescribeInstances。这也是AWS的最佳实践。还要明确拒绝访问ec2:CreateTags和ec2:DeleteTags操作,以防止用户创建或删除标记来控制实例。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:DescribeInstances",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/UserName": "${aws:username}"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags"
      ],
      "Resource": "*"
    }
  ]
}

答案 2 :(得分:0)