如何为 运行 EC2 实例分配新权限

How to assign a new permission to a running EC2 instance

我正在使用 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 实例角色的策略仅影响使用实例角色凭据发出的请求。它对使用其他凭据(例如 IAM 用户的访问密钥 ID 和机密)发出的请求没有任何影响,即使请求来自实例上的代码 运行。

在这种情况下,如果存在意外权限,可能的解释是实例上存储了另一组凭据,而代码正在使用这些凭据,而开发人员却没有意识到。

这或许很好地说明了为什么最好的做法是 在 EC2 上的代码 运行 中使用角色凭据,而不存储其他凭据在实例上。