AWS IAM EC2 策略仅限于原始实例

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

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

我希望这些实例能够表明自己已被遗弃并终止自己。我想为每个实例分配一个通用的 iam 角色,该角色只允许实例终止自身,而不允许终止对等实例。

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

并发现策略中有 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:允许 EC2 实例自行停止
IAM 策略仅允许 EC2 实例 API 访问以修改自身

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

您与您的

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

显然出于测试目的,我允许具有此策略的实例标记并停止自身。


3
投票

由于“aws:ARN”条件不再起作用,我发现以下方法适用于使用 IAM 角色启动的实例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allow instance to modify itself",
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteTags",
        "ec2:CreateTags"
        ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:userid": "*:${ec2:InstanceID}"
        }
      }
    }
  ]
}

0
投票

您可以使用

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

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:AssociateAddress",
                "ec2:AttachVolume",
                "ec2:CreateTags",
                "ec2:RebootInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ec2:*:*:instance/${ec2:InstanceID}",
                "arn:aws:ec2:*:*:elastic-ip/*",
                "arn:aws:ec2:*:*:volume/*"
            ]
        }
    ]
}

注意! 并非所有 EC2 操作都支持资源级权限,授予访问权限的策略必须在资源元素中指定“*”。

例如,大多数

ec2:Describe*
操作仅在
Resource: "*"
时才有效。

© www.soinside.com 2019 - 2024. All rights reserved.