Как определить зависимости группы безопасности AWS?

46

Amazon EC2 не позволит мне удалить группу безопасности, жалуясь, что у группы все еще есть зависимости. Как я могу найти, что это за зависимости?

aws ec2 description-security-groups не говорит.

user14645
источник
Ответ неверен в этом вопросе @MichaelHampton, хотя он помечен как таковой.
Конр
@konr Если вы считаете, что вопрос нуждается в лучших ответах, вы можете начать щедрость .
Майкл Хэмптон
похож на stackoverflow.com/questions/24685508/…
LHWizard

Ответы:

58

Вставьте идентификатор группы безопасности в раздел «Сетевые интерфейсы» EC2. Это найдет применение в EC2, EB, RDS, ELB.

CLI: aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-123abc45

Денис Штробель
источник
10

Лучший способ сделать это в консоли AWS EC2 - вставить имя группы безопасности в поле поиска в разделе EC2-> Экземпляры.

Все экземпляры, связанные с вставленной группой безопасности, будут заполнены - это будут объекты ec2 (зависимости).

Вы также можете запустить этот поиск в разделе ELB и других предложениях AWS, в которых используются группы безопасности.

Если вы пытаетесь удалить группу безопасности, вам потребуется либо «изменить группу безопасности» для каждого экземпляра (если они находятся в VPC), либо создать AMI и повторно запустить с использованием другой группы безопасности, а затем удалить старый экземпляр (если используя EC2 classic)

Надеюсь, это поможет-

Скотт Мур
источник
8

Вам нужно посмотреть на объекты вашего экземпляра EC2, а не на сами группы:

$ aws ec2 describe-instances --output text

Затем найдите «sg- *» или используйте стандартные инструменты обработки текстового потока Unix, чтобы извлечь нужные данные.

Кроме того, если у вас есть небольшое количество экземпляров, используйте --output tableдля красиво отформатированного списка.

EEAA
источник
2
aws ec2 describe-instances --output text | grep sg-
cdmckay
Поскольку группа безопасности может ссылаться на другие группы безопасности, может быть, вам нужно запустить эту функцию рекурсивно?
Брендан
1
Это тихо неполно. Группы безопасности могут использоваться во многих местах, кроме экземпляров EC2 - ELB, VPC, другие группы безопасности (как уже упоминалось @brendan) и т. Д.
Амос Шапира,
@AmosShapira ОП спрашивал конкретно о EC2. Если хотите, вы всегда можете отредактировать мой ответ, чтобы улучшить его.
EEAA
@AmosShapira Это решило проблему, с которой столкнулся ОП. Ответы SF не обязательно должны быть исчерпывающим ответом на все возможные ситуации.
EEAA
7

Вы можете запросить aws cli, чтобы получить нужные данные.

Вам нужно будет:

  • Перечислите все группы безопасности, которые ищут ссылки на данную группу
  • Перечислите все EC2 и их группы
  • Список всех ELB и их групп
  • Перечислите все RDS и их группы

Вы также можете использовать библиотеки, такие как boto https://code.google.com/p/boto/ вместо необработанного aws cli.

Дрю Хури
источник
4

Лямбда-функции также могут иметь группы безопасности. На момент написания статьи Amazon не препятствует удалению групп безопасности, используемых функциями Lambda.

Я использовал это:

aws lambda list-functions | jq -c '.Functions[] | {FunctionArn, SecurityGroups: (.VpcConfig.SecurityGroupIds[]? // null) }'
karpada
источник
2

Другая проблема - группы безопасности, которые зависят от других групп безопасности. Можно использовать эту команду для генерации списка Смежности (прямые зависимости):

aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,dependentOnSGs:IpPermissions[].UserIdGroupPairs[].GroupId}

В идеале этот результат следует использовать для поиска транзитивного замыкания (все зависимости, прямые и косвенные). К сожалению, мне не удалось найти утилиту транзитивного замыкания.

karpada
источник
1

Возможно, это было недоступно при первоначальном задании вопроса, но если вы войдете в Консоль AWS для групп безопасности, выберите соответствующие группы и выберите действие «Удалить», в появившемся запросе будет указано, на что на него ссылаются и каким образом. ,

совать
источник
1

Вы можете использовать этот инструмент Python для составления списка групп безопасности с их зависимостями. Это также позволяет перечислять неиспользуемые (устаревшие) группы безопасности:

https://github.com/mingbowan/sgdeps

Райан Фишер
источник
0

Отмеченный ответ неверен. Если вы видите нарушение зависимости, скорее всего, в вашей конфигурации IP Permissions (Ingress) есть ссылка на другую группу безопасности. Вам нужно будет отозвать все входные разрешения, которые содержат группы безопасности в качестве источника.

MRW
источник
Я предполагаю, что первоначальный вопрос был о том, что ссылается на какую-то группу безопасности. Существуют ли вещи, которые не являются сетевыми интерфейсами, которые ссылаются на группы безопасности (и их входные порты)? Если нет, то список сетевых интерфейсов - хороший ответ, нет?
user14645
Хотя в вашей точке зрения есть ценность, ссылка на группу безопасности не является нарушением зависимости. Можно удалить группу безопасности, которая не присоединена к какому-либо ENI, но на которую ссылается другая группа безопасности. После удаления вы получите уведомление «У вас новые устаревшие правила группы безопасности» в консоли, чтобы указать, что в правиле есть старая ссылка на несуществующую группу безопасности. Затем вы получите гиперссылку «Просмотреть устаревшие правила», чтобы исправить ситуацию после этого.
Денис Штребель