我正在使用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)
附加到IAM实例角色的策略仅影响使用实例角色凭据发出的请求。它对使用其他凭据(例如访问密钥ID和IAM用户的秘密)发出的请求没有任何影响,即使请求来自实例上运行的代码。
在这种情况下,在这里,有意外的权限可用,可能的解释是另一组凭证存储在实例上,而代码正在使用那些没有开发人员意识到的权限。
这可能很好地说明了为什么仅在EC2上运行的代码中使用角色凭证,而不是在实例上存储其他凭据的最佳做法的一个原因。< / p>