如何允许AWS用户查看但不启动,启动或停止实例

时间:2014-01-30 19:22:15

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

我已为AWS用户设置了一个策略:

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

目的是允许具有此策略的用户在控制台上查看 EC2实例,但不能实际执行任何操作。问题是,一旦应用此策略,用户就可以启动,停止,终止和启动新实例,即使上述策略AFAIK中没有解决这些权限。

为什么上述政策会发生这种情况,我该怎样做才能阻止它(即实现我所追求的“观看但不触摸”的结果)?

2 个答案:

答案 0 :(得分:2)

Amazon IAM政策默认为拒绝,与明确否认不同,有关详情,请参阅The Difference Between Denying by Default and Explicit Deny

因此,默认情况下,观察到的行为是不可能的,因此必须有另一个策略为此用户明确授予ec2:RunInstances等不需要的操作。您可以使用以下选项来解决此问题:

识别/删除显式允许

您可以通过优秀的新AWS Identity and Access Management Policy Simulator分析哪个政策授予不受欢迎的操作,这对此类问题非常有帮助。

添加明确拒绝

您可以为用户无法执行的操作添加显式拒绝,例如:

{
  "Statement": [
    {
      "Action": [
        "ec2:RebootInstances",
        "ec2:RunInstances",
        "ec2:StartInstances",
        "ec2:StopInstances",
        "ec2:TerminateInstances"
      ],
      "Effect": "Deny",
      "Resource": "*"
    }
  ]
}

请注意,后者仍然会允许您可能不需要的其他一些其他EC2操作,因此更明确地拒绝除了所需的所有操作之外的其他操作将更方便NotAction

  

NotAction元素允许您指定操作列表的例外。例如,您可以使用NotAction让用户仅使用Amazon SQS SendMessage操作,而无需列出不允许用户执行的所有操作。使用NotAction有时可以导致比使用Action元素和列出许多操作更短的策略。

  • 警告:请注意,在使用NotAction明确Deny时,很容易限制超出预期甚至锁定自己 - 始终确保Resource语句仅定位到所需的资源。例如,仅使用公共通配符*而不是像arn:aws:ec2:*:*:*这样的更具体的资源选择器归结为“拒绝除了这些操作每个服务的所有” - 例如这包括再次删除错误政策的能力!最好通过仔细模拟策略来避免这种情况。

分别政策可能如下所示:

{
  "Statement": [
    {
      "NotAction": [
        "ec2:Describe*"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:ec2:*:*:*"
    }
  ]
}

答案 1 :(得分:0)

对于user3086014,请创建类似于以下内容的策略:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect":"Allow",
         "Action": [
             "ec2:DescribeInstances",
             "ec2:StartInstances",
             "ec2:StopInstances",
             "ec2:RebootInstances"
         ],
         "Resource":[
            "arn:aws:ec2:us-west-1:0123456789012:instance/i-ffffffff"
         ]
      }
   ]
}

将操作更改为您希望用户执行的操作。更改资源以识别您的实例 - 即更改帐户ID(我上面写的是0123456789012)和实例ID(我上面写的是i-ffffffff)。然后将该政策应用于您的用户。如果要允许使用两个实例,请在ARN之间添加第二个带逗号分隔符的ARN(如需要的JSON格式)。

请下次再提出一个问题。在评论中自己有问题 - 答案很尴尬。谢谢!