Как ограничить экземпляры, разрешенные к запуску в учетной записи AWS?

#amazon-web-services #amazon-ec2 #amazon-iam

#amazon-web-services #amazon-ec2 #amazon-iam

Вопрос:

Цель состоит в том, чтобы ограничить будущие экземпляры EC2 только типами с nitro в качестве гипервизора (т. Е. run_instances , modify_instance_attributes ). В идеале на уровне политики управления сервисами (SCP) в организациях AWS.

Я написал скрипт для сбора списка всех типов экземпляров nitro, и в настоящее время это 225 типов экземпляров или 31 поколение (например, i3en, m5n, c5d и т.д.). Это не совсем элегантно.

То, что я представил в своей голове, это что-то вроде:

 "Condition": {
    "StringEquals": {
        "ec2:InstanceType/Hypervisor": "nitro"
    }
}
  

Но единственное, что я знаю для работы, похоже на следующее (со всеми 2

 "Condition": {
   "StringEquals": {
      "ec2:InstanceType": ["t2.micro", "t2.small"]
   }
}
  

Независимо от того, есть ли хорошее решение, спасибо, что нашли время прочитать это. Приветствия.

Комментарии:

1. Вы можете проверить доступные ключи условий IAM для EC2. Я не вижу ничего, что позволило бы указать hypervisor или nitro, или что-либо подобное.

2. У меня тоже сложилось такое впечатление, спасибо, Марчин. Похоже, что единственные инструменты, доступные для решения этой проблемы, являются реактивными.

Ответ №1:

Я думаю, что самым простым решением для SCP является использование правила запрета с StringNotLike , которое может использовать подстановочные знаки:

 "Effect": "Deny",
"Action": [
    "ec2:RunInstances"
],
"Resource": [
    "arn:aws:ec2:*:*:instance/*"
],
"Condition": {
    "StringNotLike": {
        "ec2:InstanceType": [
            "t2.*",
            "t3.*"
        ]
    }
}
  

Это все еще, возможно, больше типизации, чем вам хотелось бы, но, по моему опыту, вы хотите ограничить типы экземпляров больше, чем только те, которые используют определенный гипервизор. Например, ограничить экземпляры по их почасовой стоимости. В итоге получается относительно небольшой набор строк.

Комментарии:

1. Это недопустимый SCP

2. @RobertSzot — он был скопирован с SCP, который активно использовался более двух лет. Что с этим не так? Или вы просто расстроены тем, что он не содержит стандартных полей?

3. { «Версия»: «2012-10-17», «Заявление»: [ { «Эффект»: «Запретить», «Действие»: [ «ec2: RunInstances» ], «Ресурс»: [ «arn: aws: ec2:*:*: экземпляр/*» ], «Условие»: { «StringNotLike»: { «ec2: InstanceType»: [ «t2.*», «t3. *» ] } } } ] }

4. @RobertSzot — Насколько я могу судить, вы только что добавили шаблон. Я собирался отредактировать, но потом заметил, что в своем ответе я очень четко указал, что это было «Правило запрета», а не полный SCP.