AWS IAM:允许 EC2 实例自行停止

问题描述 投票:0回答:3

我试图允许我们的 AWS 账户中的所有 EC2 实例自行停止(使用使用 aws cli 的自动脚本)。我尝试通过使用适当的策略创建 AWS IAM 角色来实现此目的。但是,我找不到如何定义策略以仅允许实例自行停止(而不是其他实例)。

我尝试了以下策略

{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "ec2:StopInstances"
             ],
             "Resource": [
                 "${ec2:SourceInstanceARN}"
             ]
         }
     ]
}

但是在验证时,这给了我错误

This policy contains the following error: The following resources are invalid : ${ec2:SourceInstanceARN}

有没有办法让实例停止自身(并且仅停止自身)?如果是的话我该怎么办?

amazon-web-services amazon-ec2 amazon-iam
3个回答
7
投票

关闭行为解决了终止问题,但可能还有其他场景需要限制对 API 请求的访问(即自标记)。因此,这是一个使用 IAM 策略的解决方案:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DeleteTags",
                "ec2:DescribeTags",
                "ec2:CreateTags",
                "ec2:TerminateInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ARN": "${ec2:SourceInstanceARN}"
                }
            }
        }
    ]
}

0
投票

正如 Mark B 在评论中建议的那样,我通过更改脚本以使用

shutdown
而不是
aws ec2 stop-instances
解决了我的问题。这使得无需使用任何策略,因为任何系统都可以对自身(并且仅对自身)执行关闭。


0
投票

您可以使用

ec2:InstanceID
IAM 条件键作为资源块中的变量,以便使用此策略的实例只能访问其自身:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["ec2:StopInstances"],
            "Resource": ["arn:aws:ec2:*:*:instance/${ec2:InstanceID}"]
        }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.