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

AWS IAM: Allow EC2 instance to stop itself

我试图让我们 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}

有没有办法让一个实例停止自己(并且只停止自己)?如果可以,我应该怎么做?

正如 Mark B 在评论中所建议的那样,我通过将脚本更改为使用 shutdown 而不是 aws ec2 stop-instances 来解决我的问题。这使得不需要使用任何策略,因为任何系统都可以对自身(并且只能对自身)执行关闭。

关闭行为解决了终止问题,但可能还有其他情况需要对 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}"
                }
            }
        }
    ]
}