如何为正在运行的EC2实例分配新权限
问题描述:
我正在对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()
)。
任何帮助将不胜感激。
答
附加到IAM实例角色的策略仅影响使用实例角色凭证进行的请求。它对使用其他凭证(例如访问密钥ID和IAM用户的秘密)所做的请求没有任何影响,即使请求来自实例上运行的代码。
在这种情况下,在这里,有意外的特权可用,可能的解释是另一组凭据存储在实例中,并且代码使用那些没有开发人员意识到的凭据。
这也许是一个很好的例子,说明它被认为是的最佳实践在EC2上运行的代码中使用角色凭证,并且不在实例上存储其他凭证。
*“理论上这应该阻止我在登录已运行的实例时创建新实例。”*仅当您使用该实例的角色凭据时。如果您使用其他*凭据,则可以执行任何凭据允许的操作。你能澄清一点,你究竟在做什么? –
@ Michael-sqlbot你发现确切的问题:)谢谢。你能否在回答中写下这件事,以便我能接受它? –
我不想错误地描述问题......问题是,您认为实例角色策略会影响来自实例的所有API请求,而不管凭据如何?或者你已经在实例上存储了一些IAM凭证,并且他们在没有意识到的情况下被使用? –