Amazon ec2 如何为正在运行的EC2实例分配新权限

Amazon ec2 如何为正在运行的EC2实例分配新权限,amazon-ec2,permissions,roles,amazon-iam,Amazon Ec2,Permissions,Roles,Amazon Iam,我正在使用EC2执行一些测试,我想将权限限制在一个已经运行的实例上,以便只描述其他实例(例如,如果它请求创建一个新实例,则该请求应该被拒绝) 我使用以下策略创建了IAM角色: { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ec2:DescribeInstances",

我正在使用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\u instances()


非常感谢您的帮助。

附加到IAM实例角色的策略仅影响使用实例角色凭据发出的请求。它不会对使用其他凭据(例如访问密钥id和IAM用户的机密)发出的请求产生任何影响,即使请求来自实例上运行的代码

在本例中,如果有意外的特权可用,可能的解释是实例上存储了另一组凭据,代码正在使用这些凭据,而开发人员没有意识到这一点


这也许是一个很好的例子,说明了为什么在EC2上运行的代码中只使用角色凭据而不在实例上存储其他凭据被视为最佳实践的一个原因。

“从理论上讲,这应该可以防止我在登录已在运行的实例时创建新实例。”仅当您正在使用该实例的角色凭据时。如果您正在使用其他凭据,则可以执行这些凭据允许的任何操作。你能澄清一下你到底在做什么吗?@Michael sqlbot你发现了确切的问题:)谢谢。你能把这个写在一个答案里,这样我就可以接受了吗?我不想把这个问题搞错。。。问题是您假设实例角色策略影响了来自实例的所有API请求,而不管凭据如何?或者您在实例上存储了一些IAM凭据,并且在您没有意识到的情况下使用了这些凭据?我在某处存储了一些凭据,但忘记了这些凭据,因此boto库仍在使用这些凭据,您基本上拥有这些凭据的所有权利