Я пытаюсь найти способ определить сиротские группы безопасности, чтобы я мог очистить их и избавиться от них. Кто-нибудь знает способ обнаружить неиспользуемые группы безопасности.
Будет работать либо через консоль, либо с помощью инструментов командной строки (Запуск инструментов командной строки на машинах Linux и OSX).
Ответы:
Примечание: это учитывает только использование безопасности в EC2, а не другие службы, такие как RDS. Вам нужно будет проделать больше работы, чтобы включить группы безопасности, используемые вне EC2. Хорошо, что вы не можете легко (может быть, даже невозможно) удалить активные группы безопасности, если вы пропустите одну связанную с другой службой.
Используя новый инструмент AWS CLI, я нашел простой способ получить то, что мне нужно:
Сначала получите список всех групп безопасности
Тогда получить все группы безопасности , привязанные к примеру, переправлено
sort
затемuniq
:Затем соберите все вместе и сравните 2 списка и посмотрите, что не используется в основном списке:
источник
aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].SecurityGroups[*]' --output text | tr '\t' '\n' | sort | uniq
aws rds describe-db-security-groups --query 'DBSecurityGroups[*].EC2SecurityGroups[*].EC2SecurityGroupId' --output text | tr '\t' '\n' | sort | uniq
aws ec2 describe-network-interfaces --query 'NetworkInterfaces[*].Groups[*].GroupId' --output text| tr '\t' '\n' | sort | uniq
просто для описания сетевых интерфейсов.Если вы выберете все свои группы безопасности в консоли EC2, а затем нажмете действия -> Удалить группы безопасности, появится всплывающее окно с сообщением, что вы не можете удалить группы безопасности, прикрепленные к экземплярам, другим группам безопасности или сетевым интерфейсам, и это перечислит группы безопасности, которые вы можете удалить; т.е. неиспользуемые группы безопасности :)
источник
Это пример кода, написанного на boto (Python SDK для AWS) для перечисления группы безопасности по количеству экземпляров, с которыми она связана.
Вы можете использовать эту логику, чтобы получить то же самое в командной строке.
Ботокод
Выход
источник
Примерно через год неаудированного использования я счел необходимым провести аудит моих групп безопасности AWS EC2 и очистить устаревшие, неиспользуемые группы.
Это была непростая задача для выполнения через веб-интерфейс, поэтому я обратился к интерфейсу командной строки AWS, чтобы упростить задачу. Я нашел начало тому, как это сделать, в StackOverflow, но это было далеко не все. Поэтому я решил написать свой собственный сценарий. Я использовал AWS CLI, MySQL и немного «Bash-foo», чтобы выполнить следующее:
Получите список всех групп безопасности EC2. Я сохраняю идентификатор группы, имя группы и описание в таблице под названием «группы» в базе данных MySQL под названием aws_security_groups на локальном хосте. Общее количество найденных групп сообщается пользователю.
Получите список всех групп безопасности, связанных с каждым из следующих сервисов, и исключите их из таблицы: EC2 Istances EC2 Elastic Load Balancers AWS RDS Instances AWS OpsWorks (не следует удалять на Amazon) Группы безопасности по умолчанию (нельзя удалять ) ElastiCache
Для каждой службы я указываю количество групп, оставшихся в таблице после завершения исключения.
ПРИМЕЧАНИЯ: 1. Вам нужно создать файл для хранения вашего хоста MySQL, имени пользователя и пароля и указать на него переменную $ DBCONFIG. Он должен иметь такую структуру:
Дайте мне знать, если вы найдете это полезным или у вас есть какие-либо комментарии, исправления или улучшения.
Вот сценарий.
А вот и sql для создания базы данных.
источник
Пример Boto, печатающий идентификаторы групп и имена только тех групп безопасности, у которых нет текущих экземпляров.
Здесь также показано, как указать, какой регион вас интересует.
Чтобы подтвердить, какие группы безопасности все еще используются, вы должны отменить или удалить
if len(sg.instances()) == 0
тест и распечататьlen(sg.instances())
значение.Например
источник
Используя node.js AWS SDK, я могу подтвердить, что AWS не позволяет удалять используемые группы безопасности. Я написал сценарий, который просто пытается удалить все группы и корректно обрабатывает ошибки. Это работает как для классического, так и для современного VPC. Сообщение об ошибке можно увидеть ниже.
источник
Помимо других функций, ScoutSuite и Prowler сообщают о неиспользуемых группах безопасности EC2. Оба имеют открытый исходный код.
источник
К SG, подключенным к сетевым интерфейсам:
По имени:
По идентификатору:
источник
На торговой площадке AWS есть инструмент, который значительно упрощает эту задачу. Он показывает вам, какие группы присоединены / отсоединены для легкого удаления, но также сравнивает ваши журналы потоков VPC с правилами группы безопасности и показывает, какие правила SG используются или не используются. AWS опубликовал для этого решение ELK-stack, но оно было до смешного сложным.
Вот инструмент и заявление о том, что я работал над ним. Но я надеюсь, что вы все сочтете это уместным: https://www.piasoftware.net/single-post/2018/04/24/VIDEO-Watch-as-we-clean-up-EC2-security-groups-in-just -несколько минут
источник
К сожалению, выбранный ответ не так точен, как мне нужно (я пытался выяснить, почему, но предпочел реализовать его).
Если я проверю ВСЕ
NetworkInterfaces
, ищу вложения к любомуSecurityGroup
, это даст мне частичные результаты. Если я проверю толькоEC2Instances
, он также вернет мне частичные результаты.Вот мой подход к проблеме:
all_secgrp
all_instances
filter
функцию и фильтруя ееsecurity-group-id
)all_secgrp
В приложении вы можете увидеть фрагмент кода. Не жалуйтесь на эффективность, но попробуйте ее оптимизировать, если хотите.
источник
Это сложная проблема, если у вас есть группы безопасности, которые ссылаются на другие группы безопасности в правилах. Если это так, вам придется разрешить DependencyErrors, что нетривиально.
Если вы используете только IP-адреса, это решение будет работать после создания клиента boto3:
источник