
Многопоточный инструмент для сбора инвентаризации AWS с акцентом на ресурсы и метаданные, связанные с безопасностью.
Многопоточный инструмент для сбора инвентаризации AWS с фокусом на безопасность, написанный на Ruby.
Этот инструмент создан для эффективного сбора большого объёма атрибутов и метаданных ресурсов AWS. Он стремится собрать практически всё, что имеет отношение к конфигурации безопасности и состоянию среды AWS.
Существующие инструменты (например, AWS Config), выполняющие сбор ресурсов, не обладают достаточным охватом и специфичностью для точной оценки состояния безопасности (например, подробные данные об атрибутах ресурсов, полностью разобранные документы политик и вложенные связи между ресурсами).
AWS Recon обрабатывает сбор из крупных аккаунтов, используя автоматические повторные попытки (из-за проблем с сетью или троттлингом API), автоматическую пагинацию больших ответов (> 100 ресурсов на вызов API) и многопоточные параллельные запросы для ускорения сбора.
** использование не означает одобрения
AWS Recon требует роль или учётные данные AWS с правами ReadOnlyAccess. Полный AdministratorAccess избыточен, но тоже будет работать. Политика SecurityAudit недостаточна, так как не предоставляет доступ ко многим сервисам.
Используйте Docker версии 19.x или выше для запуска предварительно собранного образа без необходимости установки чего-либо.
Если у вас уже установлен Ruby (2.6.x или 2.7.x), вы можете установить Ruby gem.
AWS Recon можно запустить локально через контейнер Docker или установив Ruby gem.
Для запуска через контейнер Docker передайте необходимые учётные данные AWS в команду docker run. Например:
$ docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -v -s EC2 -r global,us-east-1,us-east-2
Для локального запуска сначала установите gem:
$ gem install aws_recon
Fetching aws_recon-0.5.17.gem
Fetching aws-sdk-3.0.1.gem
Fetching parallel-1.20.1.gem
...
Successfully installed aws-sdk-3.0.1
Successfully installed parallel-1.20.1
Successfully installed aws_recon-0.5.17
Или добавьте его в ваш Gemfile с помощью bundle:
$ bundle add aws_recon
Fetching gem metadata from https://rubygems.org/
Resolving dependencies...
...
Using aws-sdk 3.0.1
Using parallel-1.20.1
Using aws_recon 0.5.17
AWS Recon будет использовать любые учётные данные AWS (см. требования), доступные в среде, где он запущен. Если вы собираете данные из нескольких аккаунтов, возможно, захотите использовать что-то вроде aws-vault для управления разными учётными данными.
$ aws-vault exec profile -- aws_recon
Обычные переменные окружения тоже подойдут.
$ AWS_PROFILE=<profile> aws_recon
Для запуска из контейнера Docker с учётными данными, управляемыми через aws-vault (вывод в stdout):
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
darkbitio/aws_recon:latest \
aws_recon -j -s EC2 -r global,us-east-1,us-east-2
Для запуска из контейнера Docker с учётными данными, управляемыми через aws-vault, и выводом в файл, необходимо выполнить несколько требований. Во-первых, Docker должен иметь доступ к примонтированию указанного вами пути (или родительского пути выше). Во-вторых, нужно создать пустой файл для сохранения вывода (например, output.json). Это связано с тем, что только этот файл монтируется в контейнер Docker во время выполнения. Например:
Создайте пустой файл.
$ touch output.json
Запустите контейнер aws_recon, указав выходной файл.
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -s EC2 -v -r global,us-east-1,us-east-2
Возможно, вы захотите изначально использовать флаг -v или --verbose, чтобы видеть статус и активность во время сбора.
В многословном режиме на консоль будет выводиться:
<thread>.<region>.<service>.<operation>
Префикс t указывает, какой поток обрабатывает конкретный запрос. Регион, сервис и операция показывают, какая операция запроса выполняется в данный момент и где.
$ aws_recon -v
t0.global.EC2.describe_account_attributes
t2.global.S3.list_buckets
t3.global.Support.describe_trusted_advisor_checks
t2.global.S3.list_buckets.acl
t5.ap-southeast-1.WorkSpaces.describe_workspaces
t6.ap-northeast-1.Lightsail.get_instances
...
t2.us-west-2.WorkSpaces.describe_workspaces
t1.us-east-2.Lightsail.get_instances
t4.ap-southeast-1.Firehose.list_delivery_streams
t7.ap-southeast-1.Lightsail.get_instances
t0.ap-south-1.Lightsail.get_instances
t1.us-east-2.Lightsail.get_load_balancers
t7.ap-southeast-2.WorkSpaces.describe_workspaces
t2.eu-west-3.SageMaker.list_notebook_instances
t3.eu-west-2.SageMaker.list_notebook_instances
Finished in 46 seconds. Saving resources to output.json.
# сбор глобальных ресурсов S3 и EC2, а также us-east-1 и us-east-2
$ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# сбор глобальных ресурсов S3 и EC2, а также us-east-1 и us-east-2
$ AWS_PROFILE=<profile> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
# сохранение вывода в S3 bucket
$ AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose \
--s3-bucket my-recon-bucket
# сохранение вывода в S3 bucket с домашним регионом, отличным от us-east-1
$ AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose \
--s3-bucket my-recon-bucket:us-west-2