【问题标题】:AWS IAM EC2 policy limited to originating instanceAWS IAM EC2 策略仅限于原始实例
【发布时间】:2019-08-06 17:04:25
【问题描述】:

我正在设置由于不活动而需要终止 AWS 实例(即一段时间以来 Web 服务器访问日志中没有任何新内容)。这些实例是测试实例,由 CI/CD 软件自动创建。

我希望这些实例能够识别自己被遗弃并终止自己。我想为它们中的每一个分配一个通用的 iam-role,它只允许实例终止自身而不是对等实例。

到目前为止,我一直在这里:

发现策略中有 2 个变量可用:

ec2-instance-id
ec2:SourceInstanceARN

我想出了一些我的角色政策的变体,但它们都不起作用:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:TerminateInstances",
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/${ec2-instance-id}"
                }
            }
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:TerminateInstances",
            "Resource": "arn:aws:ec2:*:*:instance/${ec2-instance-id}"
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:TerminateInstances",
            "Resource": "${ec2:SourceInstanceARN}"
        }
    ]
}

是否真的可以实现所需的行为,即只允许实例对其自身执行特定操作(例如终止)?

更新:
我确实知道我可以使用标签,这就是我同时正在做的事情,但这意味着所有带标签的实例都可以终止它们的对等实例。这个限制有点太松了,我真的想把它限制在它的实例上

AWS IAM: Allow EC2 instance to stop itself
IAM policy to allow EC2 instance API access only to modify itself

【问题讨论】:

  • 如果终止自身是您唯一关心的问题,请启动实例并将InstanceInitiatedShutdownBehavior 设置为Terminate,然后让机器上的代码以root 身份运行/sbin/poweroff。当 EC2 基础设施看到实例尝试自行关闭时,实例将被终止,就像您发送 API 请求来终止它一样。
  • @Michael-sqlbot 好主意!也可以运行sudo shutdown now -h

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


【解决方案1】:

您与您的condition 关系密切。诀窍是将实例 ARN 与 ec2:sourceInstanceARN 进行比较:

{
    "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}"
                }
            }
        }
    ]
}

显然,出于测试目的,我允许使用此策略的实例自行标记和停止。

【讨论】:

猜你喜欢
  • 2019-07-13
  • 2019-02-19
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2020-08-19
  • 2019-08-25
相关资源
最近更新 更多