2017-07-17 164 views
0

我正在对EC2执行一些测试,并且想限制已运行实例的权限,仅描述其他实例(例如,如果它请求创建一个新的,该请求应该被拒绝)。如何为正在运行的EC2实例分配新权限

我创建了以下策略的IAM角色:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Deny", 
      "Action": [ 
       "ec2:DescribeInstances", 
       "ec2:DescribeImages", 
       "ec2:DescribeKeyPairs", 
       "ec2:DescribeSecurityGroups", 
       "ec2:DescribeAvailabilityZones", 
       "ec2:RunInstances", 
       "ec2:TerminateInstances", 
       "ec2:StopInstances", 
       "ec2:StartInstances" 
      ], 
      "Resource": "*" 
     } 
    ] 
} 

这在理论上应该阻止我创造当我登录的已运行实例的新实例,但它没有(我使用boto库为测试,与ec2.run_instances())。

任何帮助将不胜感激。

+0

*“理论上这应该阻止我在登录已运行的实例时创建新实例。”*仅当您使用该实例的角色凭据时。如果您使用其他*凭据,则可以执行任何凭据允许的操作。你能澄清一点,你究竟在做什么? –

+0

@ Michael-sqlbot你发现确切的问题:)谢谢。你能否在回答中写下这件事,以便我能接受它? –

+0

我不想错误地描述问题......问题是,您认为实例角色策略会影响来自实例的所有API请求,而不管凭据如何?或者你已经在实例上存储了一些IAM凭证,并且他们在没有意识到的情况下被使用? –

回答

0

附加到IAM实例角色的策略仅影响使用实例角色凭证进行的请求。它对使用其他凭证(例如访问密钥ID和IAM用户的秘密)所做的请求没有任何影响,即使请求来自实例上运行的代码。

在这种情况下,在这里,有意外的特权可用,可能的解释是另一组凭据存储在实例中,并且代码使用那些没有开发人员意识到的凭据。

这也许是一个很好的例子,说明它被认为是的最佳实践在EC2上运行的代码中使用角色凭证,并且不在实例上存储其他凭证。

相关问题