【问题标题】:AWS IAM: Allow EC2 instance to stop itselfAWS IAM:允许 EC2 实例自行停止
【发布时间】:2016-12-25 10:05:03
【问题描述】:

我正在尝试让我们的 AWS 账户中的所有 EC2 实例自行停止(使用使用 aws cli 的自动脚本)。我尝试通过使用 propper 策略创建 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}

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

【问题讨论】:

  • 有什么理由不能只在脚本中使用操作系统的关闭命令,而不是使用 AWS CLI?
  • 啊,当然,我怎么会忘记!请将此作为答案发布,然后我会接受。对我来说,这肯定会奏效。但是,我可以想到其他人不想使用关机的两个原因。 1. 关机只能在root权限下执行,所以你需要sudo权限才能这样做。 2. 如果实例的关闭行为将被终止,您将丢失实例而不是停止它。

标签: amazon-web-services amazon-ec2 amazon-iam


【解决方案1】:

关闭行为解决了终止问题,但可能存在其他需要有限访问 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}"
                }
            }
        }
    ]
}

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2013-04-05
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2019-08-03
    相关资源
    最近更新 更多