
Инструмент автоматического обогащения выводов безопасности и оценки воздействия для AWS. Обогащает данные об уязвимостях контекстом ресурсов, связями и тегами для расчета контекстных показателей воздействия для приоритетного устранения.
MetaHub — это автоматизированный инструмент для контекстуального обогащения и оценки влияния находок безопасности для управления уязвимостями. Вы можете использовать его с AWS Security Hub или любым сканером безопасности, совместимым с ASFF. Перестаньте полагаться на бесполезные уровни серьезности и переключитесь на оценку влияния, основанную на ВАШЕМ контексте.
MetaHub — это инструмент безопасности с открытым исходным кодом для управления уязвимостями с учетом контекста влияния. Он может автоматизировать процесс контекстуализации находок безопасности на основе вашей среды и ваших потребностей, ВАШЕГО контекста, определять право собственности и на его основе рассчитывать оценку влияния, которую вы можете использовать для определения приоритетов (с чего начать?) и автоматизации, такой как исправления, оповещения или заявки. Инструмент предназначен для сред AWS, и вы можете использовать его с AWS Security Hub или любым сканером, совместимым с ASFF (например, Prowler).
ℹ️ Изучите и расширьте новые панели мониторинга MetaHub с помощью Powerpipe!
MetaHub описывает ваш контекст, подключаясь к вашим затронутым ресурсам в ваших затронутых аккаунтах. Он может получать информацию о вашем аккаунте и организации AWS, тегах затронутых ресурсов, соответствующих событиях CloudTrail, конфигурациях ваших затронутых ресурсов и все их связи: если вы контекстуализируете находку безопасности, затрагивающую экземпляр EC2, MetaHub подключится не только к самому экземпляру, но и к его IAM-ролям; оттуда он подключится к политикам IAM, связанным с этими ролями. Он подключится к группам безопасности и проанализирует все их правила, VPC и подсети, где работает экземпляр, тома, группы Auto Scaling и многое другое. Вы можете применять фильтры для автоматического обнаружения других ресурсов с теми же свойствами и проводить углубленные исследования.
После получения всей информации из вашего контекста MetaHub оценит условия влияния для всех ваших ресурсов: открытость, доступ, шифрование, статус, окружение, приложение и владелец. На основе этих вычислений и в дополнение к информации о находках безопасности, затрагивающих ресурс, все вместе, MetaHub сгенерирует оценку для каждой находки и затронутого ресурса.
Посмотрите следующую панель мониторинга, сгенерированную MetaHub. Здесь отображаются затронутые ресурсы, сгруппированные со всеми находками безопасности, которые их затрагивают, и исходный уровень серьезности каждой находки. После этого вы видите оценку и все критерии, которые MetaHub оценил для генерации этой оценки. Вся эта информация фильтруется, сортируется, группируется, загружается и настраивается.
Ниже приведен JSON-вывод для экземпляра EC2: посмотрите, как MetaHub организует всю информацию о его контексте вместе, в разделах associations, config, tags, account и cloudtrail, и, наконец, ключ impact с оценкой и всеми критериями, оцененными для генерации этой оценки.
MetaHub предоставляет множество способов вывода, управления и перечисления находок безопасности для расследования, подавления, обновления и интеграции с другими инструментами. Он предназначен для использования в качестве CLI инструмента или в автоматизированных рабочих процессах, таких как функции AWS Lambda. Он поддерживает различные выходные форматы, некоторые из них программные json, а также мощные html, xlsx и csv, которые вы можете настроить.
Если вы используете AWS Security Hub, MetaHub плавно интегрируется и расширяет его функциональность. Его можно использовать как пользовательское действие Security Hub, он поддерживает фильтры AWS Security Hub, вы можете управлять статусом рабочего процесса ваших находок и даже обогащать ваши находки непосредственно в AWS Security Hub.
MetaHub разработан для использования с AWS и поддерживает многоаккаунтные конфигурации. Вы можете запускать инструмент из любой среды, принимая роли в вашем master аккаунте AWS Security Hub и ваших дочерних/сервисных аккаунтах. Это позволяет получать агрегированные данные из нескольких аккаунтов с помощью реализации многоаккаунтного AWS Security Hub, а также получать и обогащать эти находки данными из аккаунтов, где работают ваши затронутые ресурсы. Для получения дополнительной информации обратитесь к разделу Настройка Security Hub.
Чтение находок безопасности из AWS Security Hub с фильтрами по умолчанию и выполнение опций контекста по умолчанию:```bash ./metahub
Читает конкретную (отфильтрованную по Id) находку безопасности из AWS Security Hub и выполняет опции контекста по умолчанию:```bash
./metahub --sh-filters Id=arn:aws:securityhub:us-east-1:123456789012:security-control/CloudFront.1/finding/8bd4d049-dcbc-445b-a5d1-595d8274b4c1
Читает все результаты безопасности, затрагивающие один ресурс, которые имеют статус ACTIVE (отфильтрованные по ResourceId и RecordState) из AWS Security Hub и выполняет опции контекста по умолчанию:```bash ./metahub --sh-filters RecordState=ACTIVE ResourceId=arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0b7d243ff90ebc03e
Прочитать все выводы безопасности, затрагивающие учетную запись AWS, которые являются ACTIVE (отфильтрованные по AwsAccountId и RecordState) для ресурсов с тегом `Environment` и значением `stg` и выполняет контекстные опции `config` и `tags`:```bash
./metahub --sh-filters RecordState=ACTIVE AwsAccountId=123456789012 --mh-filters-tags Environment=stg --context config tags
Читайте ваши результаты безопасности из Prowler как входной файл и выполняйте параметры контекста по умолчанию:```bash python3 prowler.py aws -M json-asff -q ./metahub --inputs file-asff --input-asff /path/to/prowler-findings.json.asff
Читает ваши результаты безопасности из Powerpipe как входной файл и выполняет параметры контекста по умолчанию:```bash
powerpipe benchmark run aws_compliance.benchmark.all_controls --export asff
./metahub --inputs file-asff --input-asff /path/to/powerpipe-findings.json.asff
Читает результаты безопасности из Trivy в качестве входного файла и выполняет параметры контекста по умолчанию:```bash export AWS_REGION=us-west-1 export AWS_ACCOUNT_ID=012345678901 trivy image --format template --template "@contrib/asff.tpl" -o trivy-findings.json.asff public.ecr.aws/n2p8q5p4/metahub:stable ./metahub --inputs file-asff --input-asff /path/to/trivy-findings.json.asff
# Контекст
В **MetaHub** **контекст** относится к информации о затронутых ресурсах, такой как их **конфигурация**, **связи**, **логи**, **теги** и **аккаунт**.
MetaHub не ограничивается затронутым ресурсом, но также анализирует любые связанные или прикрепленные ресурсы. Например, если нарушение безопасности существует в группе безопасности, **MetaHub** проанализирует группу безопасности и все, что с ней связано, такие как экземпляры EC2, которые ее используют. Для каждого связанного ресурса **MetaHub** получит его контекст. Если группа безопасности прикреплена к экземпляру EC2, **MetaHub** проанализирует экземпляр и все его связи, такие как роли IAM и политики. С одного нарушения безопасности в группе безопасности **MetaHub** получит контекст группы безопасности, экземпляра EC2, ролей IAM и политик IAM. Это критически важно для понимания влияния ваших нарушений безопасности.
Модуль **context** состоит из пяти основных частей: [**config**](#config) (который включает [**associations**](#associations)), [**tags**](#tags), [**cloudtrail**](#cloudtrail) и [**account**](#account). По умолчанию включены только **config**, **tags** и **account**, но вы можете изменить это поведение с помощью опции `--context` (например, используйте `--context config tags cloudtrail account` для включения всех ключей контекста, или `--context config` для включения только ключей config и associations):
## Config
Под ключом `config` вы можете найти важную конфигурацию затронутого ресурса. Например, если затронутый ресурс — это корзина S3, вы найдете информацию о ее политике корзины, ACL, конфигурации шифрования и т.д. Если затронутый ресурс — это экземпляр EC2, вы найдете информацию о его ключе, публичном и частном IP, метаданных и т.д. Информация о конфигурации, которую получает **MetaHub**, определяется типом ресурса. Если вы хотите добавить больше информации о конфигурации, смотрите [contributing](#contributing).
Вы можете фильтровать свои выводы на основе выходных данных config с помощью опции: `--mh-filters-config <key> {True/False}` (см. [config filters](#config-filters)).
<details>
<summary>Пример ключа config для корзины S3</summary>```json
"config": {
"resource_policy": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Test",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::metahub-bucket",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789012"
}
}
},
]
},
"website_enabled": false,
"bucket_acl": [
{
"Grantee": {
"DisplayName": "gabriel.soltz",
"ID": "1234564bd76c6c64080717b68eafaa588b41706daaf22d3d0705b398bd7cbd57",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
],
"cannonical_user_id": "1234564bd76c6c64080717b68eafaa588b41706daaf22d3d0705b398bd7cbd57",
"public_access_block_enabled": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
},
"account_public_access_block_enabled": false,
"public": false,
"bucket_encryption": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
},
"BucketKeyEnabled": false
}
]
},
В ключе associations вы найдете все связанные ресурсы затронутого ресурса. Например, если затронутым ресурсом является EC2 Instance, вы найдете такие ресурсы, как: Security Groups, IAM Roles, Volumes, VPC, Subnets, Auto Scaling Groups. Если затронутым ресурсом является IAM Role, вы найдете такие ресурсы, как IAM Policies, IAM Users, IAM Groups и другие. Каждый раз, когда MetaHub находит связь, он снова подключается к связанному ресурсу и извлекает его собственный контекст. Связи являются ключом к пониманию контекста и влияния ваших результатов безопасности.
Вы можете фильтровать свои результаты на основе выходных данных ассоциаций, используя опцию: --mh-filters-config <key> {True/False} (см. конфигурационные фильтры).
Под ключом tags вы найдете все теги, связанные с затронутым ресурсом. MetaHub использует AWS Resource Groups Tagging API для запроса тегов, связанных с вашими ресурсами. Обратите внимание, что не все типы ресурсов AWS поддерживают этот API. Вы можете проверить поддерживаемые сервисы.
Теги являются важнейшей частью понимания вашего контекста. Стратегии тегирования часто включают:
Если вы придерживаетесь правильной стратегии тегирования, вы можете фильтровать и генерировать интересные выходные данные. Например, вы можете перечислить все выводы, относящиеся к конкретной команде, и предоставить эти данные непосредственно этой команде.
Вы можете фильтровать свои выводы на основе выходных данных тегов с помощью опции: --mh-filters-tags TAG=VALUE (см. фильтры тегов).
Под ключом cloudtrail вы найдете критические события CloudTrail, связанные с затронутым ресурсом, такие как события создания. События CloudTrail, которые мы ищем, определяются по типу ресурса, и вы можете добавлять, удалять или изменять их, редактируя файл конфигурации resources.py. Например, для затронутого ресурса типа Security Group (группа безопасности), MetaHub будет искать следующие события: CreateSecurityGroup (событие создания группы безопасности) и AuthorizeSecurityGroupIngress (событие авторизации правила группы безопасности).
В разделе account вы найдете информацию об аккаунте, на котором работает затронутый ресурс, например, является ли он частью AWS Organizations, информацию о контактах и другое.
Модуль влияния в MetaHub фокусируется на понимании 7 ключевых свойств затронутого ресурса: экспозиция, доступ, шифрование, статус, окружение, приложение и владелец — и объединении их значений со значениями всех уязвимостей безопасности находок, влияющих на тот же ресурс, и их уровней серьезности для генерации оценки. Оценка влияния представляет собой число от 0 до 100, где 100 — наивысшее влияние.
Экспозиция оценивает, насколько затронутый ресурс доступен для других сетей. Например, является ли ресурс эффективно публичным или просто публичным, является ли он частью VPC, имеет ли публичный IP-адрес или защищен ли он брандмауэром или группой безопасности.
Доступ оценивает слой политик ресурсов. MetaHub проверяет все доступные политики, включая: управляемые политики IAM, встроенные политики IAM, политики ресурсов, ACL бакетов, а также любые связи с другими ресурсами, такими как роли IAM, чьи политики также анализируются. Неограниченная политика — это не только проблема самой политики, она затрагивает любой другой ресурс, который её использует.
Шифрование оценивает различные уровни шифрования на основе каждого типа ресурса. Например, для некоторых ресурсов проверяется, включены ли одновременно настройки шифрования at_rest и in_transit.
| Возможные статусы | Значение |
|---|
Статус оценивает состояние затронутого ресурса с точки зрения прикрепления или функционирования. Например, для экземпляра EC2 мы оцениваем, запущен ли ресурс, остановлен или завершен, но для таких ресурсов, как тома EBS и группы безопасности, мы оцениваем, прикреплены ли эти ресурсы к какому-либо другому ресурсу.
Окружение оценивает среду, в которой работает затронутый ресурс. По умолчанию MetaHub определяет 3 окружения: production, staging и development, но вы можете добавлять, удалять или изменять эти окружения в соответствии с вашими потребностями. MetaHub оценивает окружение на основе тегов затронутого ресурса, идентификатора учетной записи или псевдонима учетной записи. Вы можете определить свои собственные определения окружений и стратегию в файле конфигурации (см. Настройка конфигурации).
Приложение оценивает приложение, частью которого является затронутый ресурс. MetaHub использует функцию AWS myApplications, которая опирается на тег awsApplication, но вы можете расширить эту функциональность на основе вашего контекста, например, определив другие теги, которые вы используете для определения приложений или сервисов (такие как Service или любые другие), или положившись на ID или псевдоним учетной записи. Вы можете определить свои определения приложений и стратегию в файле конфигурации (см. Настройка конфигурации).
| Возможные статусы | Значение | Описание |
|---|---|---|
| 🔵 неизвестно | - | Ресурс не удалось проверить на принадлежность приложению. |
Владелец фокусируется на обнаружении владельца. Он может определить владельца затронутого ресурса различными способами. Эта информация может использоваться для автоматического назначения найденной проблемы безопасности правильному владельцу, эскалации или принятия решений на основе этой информации. Автоматизированный способ определения владельца ресурса критически важен для команд безопасности. Он позволяет им сосредоточиться на наиболее критических проблемах и как можно быстрее назначать их нужным людям в автоматизированных рабочих процессах. Вы можете определить свои правила и стратегию для владельца в файле конфигурации (см. Настройка конфигурации).
| Возможные статусы | Значение | Описание |
|---|---|---|
| 🔵 неизвестно | - | Ресурс не удалось проверить на владельца. |
В рамках расчета оценки воздействия мы также оцениваем общее количество обнаруженных уязвимостей и их критичность, затрагивающих ресурс. Для расчета этого показателя используется следующая формула:```sh (SUM of all (Finding Severity / Highest Severity) with a maximum of 1)
Например, если у затронутого ресурса есть два результата, один с `HIGH` и другой с `LOW` серьезностью, то **Оценка влияния результатов** будет:```sh
SUM(HIGH (3) / CRITICAL (4) + LOW (0.5) / CRITICAL (4)) = 0.875
MetaHub читает ваши находки безопасности из AWS Security Hub или любого ASFF-совместимого сканера безопасности. Затем он напрямую запрашивает затронутые ресурсы в соответствующем аккаунте, чтобы предоставить дополнительный контекст. Основываясь на этом контексте, он вычисляет его влияние. Наконец, он генерирует различные выходные данные в зависимости от ваших потребностей.
Некоторые варианты использования MetaHub включают:
MetaHub использует файлы конфигурации, которые позволяют настроить некоторые поведения проверок, фильтры по умолчанию и другое. Файлы конфигурации находятся в lib/config/.
Что можно настроить:
lib/config/configuration.py: Этот файл содержит конфигурацию по умолчанию для MetaHub. Вы можете изменить фильтры по умолчанию, режимы вывода по умолчанию, определения окружений и другое.
lib/config/impact.py: Этот файл содержит значения и их веса для формулы критериев влияния. Вы можете изменять значения и веса в соответствии со своими потребностями.
lib/config/reources.py: Этот файл содержит определения для каждого типа ресурсов, например, за какими событиями CloudTrail следует следить.
MetaHub — это программа на Python3. В вашей системе должен быть установлен Python3 и необходимые модули Python, описанные в файле requirements.txt.
Требования можно установить в вашей системе вручную (с помощью pip3) или с использованием виртуального окружения Python (рекомендуемый способ).
git clone [email protected]:gabrielsoltz/metahub.gitcd metahubpython3 -m venv venv/metahubsource venv/metahub/bin/activatepip3 install -r requirements.txt./metahub -hdeactivateВ следующий раз для использования программы вам понадобятся только шаги 4 и 6.
В качестве альтернативы вы можете запустить этот инструмент с помощью Docker.
MetaHub также доступен в виде Docker-образа. Вы можете запустить его напрямую из публичного Docker-образа или собрать локально.
Доступные теги для контейнеров MetaHub:
latest: синхронизировано с веткой master<x.y.z>: вы можете найти релизы здесьstable: этот тег всегда указывает на последний релиз.Для запуска из публичного реестра выполните следующую команду:```sh docker run -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h
## Учетные данные AWS и Docker
Если вы уже вошли в хост-машину AWS, вы можете беспрепятственно использовать те же учетные данные внутри контейнера Docker. Вы можете добиться этого, либо передав необходимые переменные окружения в контейнер, либо смонтировав файл учетных данных.
Например, вы можете выполнить следующую команду:```sh
docker run -e AWS_DEFAULT_REGION -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h
На другой стороне, если вы не вошли в систему на хост-машине, вам нужно будет войти снова из самого контейнера.
Или вы также можете собрать его локально:```sh git clone [email protected]:gabrielsoltz/metahub.git cd metahub docker build -t metahub . docker run -ti metahub ./metahub -h
# Run with Lambda
**MetaHub** готов к работе с Lambda и бессерверной архитектурой! Вы можете запускать MetaHub непосредственно на AWS Lambda без какой-либо дополнительной инфраструктуры.
Запуск MetaHub в Lambda-функции позволяет автоматизировать его выполнение на основе заданных вами триггеров. Например, вы можете:
- Запускать Lambda-функцию MetaHub каждый раз при появлении нового нарушения безопасности, чтобы обогатить это нарушение обратно в AWS Security Hub.
- Запускать Lambda-функцию MetaHub каждый раз при появлении нового нарушения безопасности для подавления на основе Context.
- Запускать Lambda-функцию MetaHub, чтобы определить затронутого владельца нарушения безопасности на основе Context и назначить его с помощью ваших внутренних систем.
- Запускать Lambda-функцию MetaHub, чтобы создать тикет с обогащенным контекстом.
## Развертывание Lambda
Код Terraform для развертывания Lambda-функции находится в папке `terraform/`.
Просто выполните следующие команды:```sh
cd terraform
terraform init
terraform apply
The код создаст zip-файл для кода Lambda и zip-файл для зависимостей Python, которые мы будем использовать в качестве слоя Lambda. Также будут созданы функция Lambda и все необходимые ресурсы.
Код Terraform также создаст пользовательское действие Security Hub и правило EventBridge для запуска функции Lambda при выполнении пользовательского действия. См. ниже.
Вы можете настроить параметры MetaHub для вашей лямбды, отредактировав файл lib/lambda.py. Вы можете изменить параметры по умолчанию для MetaHub, такие как фильтры, опции Meta* и другие.
Terraform создаст минимально необходимые разрешения для локального выполнения функции Lambda (в том же аккаунте). Если вы хотите, чтобы ваша Lambda принимала роль в других аккаунтах (например, это потребуется, если вы запускаете Lambda в главном аккаунте Security Hub, который агрегирует выводы из других аккаунтов), вам нужно указать роль для принятия, добавив опцию --mh-assume-role в конфигурацию функции Lambda (см. предыдущий шаг) и добавив соответствующую политику, разрешающую Lambda принимать эту роль в роли лямбды.
MetaHub может быть запущен как пользовательское действие Security Hub. Это позволяет запускать MetaHub непосредственно из консоли Security Hub для выбранного вывода или для выбранного набора выводов.
Пользовательское действие затем запустит функцию Lambda, которая выполнит MetaHub для выбранных выводов.
Когда вы запускаете Lambda с помощью пользовательского действия Security Hub, Lambda считывает выбранные выводы для своего контекста и выполняет MetaHub один раз для каждого вывода. По умолчанию никаких действий с выводами не предпринимается, но вы можете изменить это поведение. См. Настройка поведения Lambda.
Пользовательское действие Security Hub развертывается в составе кода Terraform. Подробнее см. в разделе Развертывание Lambda.
Убедитесь, что на вашем локальном компьютере (или в среде, откуда вы будете запускать MetaHub) настроены учетные данные AWS.
Например, вы можете использовать опцию aws configure.```sh
aws configure
Или вы можете экспортировать свои учетные данные в окружение.```sh
export AWS_DEFAULT_REGION="us-east-1"
export AWS_ACCESS_KEY_ID= "ASXXXXXXX"
export AWS_SECRET_ACCESS_KEY= "XXXXXXXXX"
export AWS_SESSION_TOKEN= "XXXXXXXXX"
Если вы используете MetaHub для настройки одной учетной записи AWS (AWS Security Hub не агрегирует результаты из разных учетных записей), вам не нужно использовать дополнительные параметры; MetaHub будет использовать учетные данные из вашего окружения. Тем не менее, если ваш IAM дизайн требует этого, можно войти и принять роль в той же учетной записи, в которую вы вошли. Просто используйте параметры --sh-assume-role для указания роли и --sh-account с тем же идентификатором учетной записи AWS, в которую вы вошли.
--sh-region: Регион AWS, в котором работает Security Hub. Если вы не укажете регион, будет использован тот, который настроен в вашем окружении. Если вы используете агрегацию между регионами AWS Security Hub, вы должны указать этот регион как параметр --sh-region, чтобы получать все результаты вместе.
--sh-account и --sh-assume-role: Идентификатор учетной записи AWS, в которой работает Security Hub, и роль IAM AWS, которую следует принять в этой учетной записи. Эти параметры полезны, когда вы вошли в другую учетную запись AWS, отличную от той, где работает AWS Security Hub, или при использовании AWS Security Hub в настройке с несколькими учетными записями AWS. Оба параметра должны использоваться вместе. Предоставленная роль должна иметь достаточные политики для получения и обновления результатов в AWS Security Hub (при необходимости). Если вы не укажете --sh-account, MetaHub будет считать учетную запись, в которую вы вошли.
--sh-profile: Вы также можете указать имя вашего профиля AWS для использования с AWS Security Hub. При использовании этого параметра вам не нужно указывать --sh-account или , так как MetaHub будет использовать учетные данные из профиля. Если вы используете и , эти параметры имеют приоритет над .
Это минимальная политика IAM, необходимая для чтения и записи данных из AWS Security Hub. Если вы не хотите обновлять свои результаты с помощью MetaHub, вы можете удалить действие securityhub:BatchUpdateFindings.```sh
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"security hub:GetFindings",
"security hub:ListFindingAggregators",
"security hub:BatchUpdateFindings",
"iam:ListAccountAliases"
],
"Resource": [
"*"
]
}
]
}
# Configuring Context
If you are running MetaHub for a multiple AWS Account setup (AWS Security Hub is aggregating findings from multiple AWS Accounts), you must provide the role to assume for Context queries because the affected resources are not in the same AWS Account that the AWS Security Hub findings. The `--mh-assume-role` will be used to connect with the affected resources directly in the affected account. This role needs to have enough policies for being able to describe resources.
## IAM Policy for Context
The minimum policy needed for context includes the managed policy `arn:aws:iam::aws:policy/SecurityAudit` and the following actions:
- `tag:GetResources`
- `lambda:GetFunction`
- `lambda:GetFunctionUrlConfig`
- `cloudtrail:LookupEvents`
- `account:GetAlternateContact`
- `organizations:DescribeAccount`
- `iam:ListAccountAliases`
# Inputs
MetaHub can read security findings directly from AWS Security Hub using its API. If you don't use Security Hub, you can use any ASFF-compatible scanner. Most cloud security scanners support the ASFF format like Prolwer, Steampipe, Trivy, and more.
If you want to read from an input ASFF file, you need to use the option (`--inputs file-asff`) and provide the path to the file. You can provide multiple files separated by a space.:```sh
./metahub.py --inputs file-asff --input-asff path/to/the/file.json.asff path/to/the/file2.json.asff
Вы также можете комбинировать результаты AWS Security Hub с входными ASFF-файлами, указав оба входа (--inputs file-asff securityhub). MetaHub обработает все результаты вместе и выдаст единый выходной файл.:```sh
./metahub.py --inputs file-asff securityhub --input-asff path/to/the/file.json.asff
При использовании файла в качестве входных данных вы не можете использовать опцию `--sh-filters` для фильтрации результатов, так как эта опция полагается на API AWS для фильтрации. Вы не можете использовать опции `--update-findings` или `--enrich-findings`, поскольку эти результаты не находятся в AWS Security Hub. Если вы одновременно читаете из обоих источников, обновлены будут только результаты из AWS Security Hub.
MetaHub также реализует некоторые **механизмы исправления** для формата ASFF, когда они отформатированы некорректно. Это подход с максимально возможными усилиями, чтобы сделать ASFF максимально полезным, но он не идеален, и его необходимо исправить в исходном сканере.
- Если ключ `Region` отсутствует в ресурсах и на корневом уровне, MetaHub вычислит регион на основе ARN затронутого ресурса.
- Если файл ASFF неверно задаёт тип ресурса ASFF, MetaHub вычислит его на основе ARN затронутого ресурса с помощью библиотеки [aws-arn](https://github.com/gabrielsoltz/aws-arn)
- Если отсутствует какое-либо другое поле, например `SeverityLabel`, `Workflow`, `RecordState`, `Compliance`, `Id`, `ProductArn` или `StandardsControlArn`, MetaHub установит для них значение `Unknown`.
# Выводы
**MetaHub** может генерировать различные программные и визуальные выводы. По умолчанию все режимы вывода включены: `json-short`, `json-full`, `json-statistics`, `json-inventory`, `html`, `csv` и `xlsx`. Если вы хотите сгенерировать только определённый режим вывода, вы можете использовать опцию `--output-modes` с нужным режимом вывода. Выводы будут сохранены в папке `outputs/` с датой выполнения.
Например, если вы хотите сгенерировать только вывод `json-short`, вы можете использовать:```sh
./metahub.py --output-modes json-short
Если вы хотите сгенерировать выводы json-short, json-full и html, вы можете использовать:```sh
./metahub.py --output-modes json-short json-full html
**MetaHub** организует результаты проверок безопасности, относящиеся к одному и тому же ресурсу, вместе под ключом `findings`, чтобы избежать затенения (когда две проверки ссылаются на одну и ту же проблему, но одна из них делает это более общим образом) и дублирования (когда вы используете более одного сканера и получаете одну и ту же проблему от нескольких). Вы можете наглядно увидеть это поведение в выводах `json-short`, `json-full` и `html`.
- [JSON](#json)
- [HTML](#html)
- [CSV](#csv)
- [XLSX](#xlsx)
- [SQLite](#sqlite)
## JSON
> :info: Для интерактивного изучения JSON-вывода можно использовать инструмент [fx](https://github.com/antonmedv/fx).
### JSON-Full
Показывает затронутый ресурс, используя его ARN в качестве ключа, а результаты проверок, влияющие на него, в виде списка под ключом `findings`. В дополнение к результатам проверок вы также получите следующие ключи: `ResourceType`, `Region`, `AwsAccountId`, `associations`, `config`, `tags`, `account`, `cloudtrail` и `impact`.```json
"arn:aws:ec2:eu-west-1:1234567890:instance/i-0a40b2be25dbac0ac": { --> The affected resource ARN
"findings": [ --> The findings affecting the resource
{
"EC2 instances should use Instance Metadata Service Version 2 (IMDSv2)": { --> The finding title
"SeverityLabel": "HIGH", --> The finding severity label
"Workflow":{ --> The finding workflow
"Status": "NEW",
},
"RecordState": "ACTIVE", --> The finding record state
"Compliance":{ --> The finding compliance
"Status": "FAILED",
},
"Id": "arn:aws:securityhub:eu-west-1:123456789012:security-control/EC2.8/finding/a1d4f19f-453e-4c3c-b486-8443c73e84f1",
"ProductArn": "arn:aws:securityhub:eu-west-1::product/aws/securityhub",
}
},
{"EC2 instances should be managed by AWS Systems Manager": {...}}, --> Another finding title
{"EC2 instances should not have a public IPv4 address": {...}} --> Another finding title
],
"ResourceType": "AwsEc2Instance", --> The affected resource type
"Region": "eu-west-1", --> The affected resource region
"AwsAccountId": "1234567890", --> The affected resource account id
"associations": { --> The associations of the affected resource
"security_groups": {}, --> The security groups associated with the affected resource
"iam_roles": {}, --> The IAM roles associated with the affected resource
"volumes": {}, --> The volumes associated with the affected resource
"autoscaling_groups": {}, --> The autoscaling groups associated with the affected resource
"vpcs": {}, --> The VPCs associated with the affected resource
"subnets": {}, --> The subnets associated with the affected resource
},
"config": { --> The configuration of the affected resource (based on it's type)
"public_ip": "200.200.200.200", --> The public IP of the affected resource, if any
"private_ip": "10.10.10.10", --> The private IP of the affected resource, if any
"key": "ssh-key", --> The key used for the affected resource, if any
"metadata_options": { --> The metadata options of the affected resource, if any
"State": "applied",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
},
},
"tags": { --> The tags of the affected resource
"Name": "test", --> The tag key and value
"Env": "prod",
"awsApplication": "arn:aws:resource-groups:eu-west-1:1234567890:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2"
},
"account": { --> The account of the affected resource
"Alias": "prod", --> The account alias
"AlternateContact": {}, --> The alternate contact of the account, if any
"Organizations": { --> The organization of the account, if any
"Id": "o-1234567890",
"Arn": "arn:aws:organizations::1234567890:organization/o-1234567890/o-1234567890",
"MasterAccountId": "1234567890",
"MasterAccountArn": "arn:aws:organizations::1234567890:account/o-1234567890/1234567890",
"MasterAccountEmail": "",
"Details": {
"ParentId": "p-k1234567890",
"ParentType": "ROOT",
"OU": "ROOT",
"Policies": { --> The policies of the account, if any
"p-FullAWSAccess": {...} --> The policy name and policy
}
}
},
},
"cloudtrail": { --> The CloudTrail events affecting the affected resource
"RunInstances": { --> The CloudTrail event name
"Username": "test", --> The username of the event, if any
"EventTime": "2021-01-01T00:00:00Z",
"EventId": "12345678-1234-1234-1234-123456789012",
}
},
"impact": { --> The impact of the affected resource
"exposure": {...}, --> The exposure impact
"access": {...}, --> The access impact
"encryption": {...}, --> The encryption impact
"status": {...}, --> The status impact
"environment": {...}, --> The environment impact
"application": {...}, --> The application impact
"owner": {...}, --> The owner impact
"findings": {...}, --> The findings impact
"score": {...} --> The total impact score
}
}
Показывает затронутый ресурс, используя его ARN в качестве ключа, а затронутые находки — как список под ключом findings. В дополнение к находкам вы также получите следующие ключи: ResourceType, Region, AwsAccountId, associations, config, tags, account, cloudtrail и impact.```json
"arn:aws:ec2:eu-west-1:1234567890:instance/i-0a40b2be25dbac0ac": { --> The affected resource ARN
"findings": [ --> The findings affecting the resource
"EC2 instances should use Instance Metadata Service Version 2 (IMDSv2)", --> The finding title
"EC2 instances should be managed by AWS Systems Manager", --> The finding title
"EC2 instances should not have a public IPv4 address" --> The finding title
],
"ResourceType": "AwsEc2Instance", --> The affected resource type
"Region": "eu-west-1", --> The affected resource region
"AwsAccountId": "1234567890", --> The affected resource account id
"associations": { --> The associations of the affected resource
"security_groups": {}, --> The security groups associated with the affected resource
"iam_roles": {}, --> The IAM roles associated with the affected resource
"volumes": {}, --> The volumes associated with the affected resource
"autoscaling_groups": {}, --> The autoscaling groups associated with the affected resource
"vpcs": {}, --> The VPCs associated with the affected resource
"subnets": {}, --> The subnets associated with the affected resource
},
"config": { --> The configuration of the affected resource (based on it's type)
"public_ip": "200.200.200.200", --> The public IP of the affected resource, if any
"private_ip": "10.10.10.10", --> The private IP of the affected resource, if any
"key": "ssh-key", --> The key used for the affected resource, if any
"metadata_options": { --> The metadata options of the affected resource, if any
"State": "applied",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
},
},
"tags": { --> The tags of the affected resource
"Name": "test", --> The tag key and value
"Env": "prod",
"awsApplication": "arn:aws:resource-groups:eu-west-1:1234567890:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2"
},
"account": { --> The account of the affected resource
"Alias": "prod", --> The account alias
"AlternateContact": {}, --> The alternate contact of the account, if any
"Organizations": { --> The organization of the account, if any
"Id": "o-1234567890",
"Arn": "arn:aws:organizations::1234567890:organization/o-1234567890/o-1234567890",
"MasterAccountId": "1234567890",
"MasterAccountArn": "arn:aws:organizations::1234567890:account/o-1234567890/1234567890",
"MasterAccountEmail": "",
"Details": {
"ParentId": "p-k1234567890",
"ParentType": "ROOT",
"OU": "ROOT",
"Policies": { --> The policies of the account, if any
"p-FullAWSAccess": {...} --> The policy name and policy
}
}
},
},
"cloudtrail": { --> The CloudTrail events affecting the affected resource
"RunInstances": { --> The CloudTrail event name
"Username": "test", --> The username of the event, if any
"EventTime": "2021-01-01T00:00:00Z",
"EventId": "12345678-1234-1234-1234-123456789012",
}
},
"impact": { --> The impact of the affected resource
"exposure": {...}, --> The exposure impact
"access": {...}, --> The access impact
"encryption": {...}, --> The encryption impact
"status": {...}, --> The status impact
"environment": {...}, --> The environment impact
"application": {...}, --> The application impact
"owner": {...}, --> The owner impact
"findings": {...}, --> The findings impact
"score": {...} --> The total impact score
}
}
### JSON-Inventory
Показать список всех ресурсов с их ARN.```json
[
"arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated",
"arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated"
]
Показывает статистику для каждого поля/значения. В выводе вы увидите каждое поле/значение и количество вхождений; например, следующий вывод показывает статистику для шести находок.```json { "Title": { "SageMaker.1 Amazon SageMaker notebook instances should not have direct internet access": 2, "SageMaker.2 SageMaker notebook instances should be launched in a custom VPC": 2, "SageMaker.3 Users should not have root access to SageMaker notebook instances": 2 }, "SeverityLabel": { "HIGH": 6 }, "Workflow": { "NEW": 6 }, "RecordState": { "ACTIVE": 6 }, "Compliance": { "FAILED": 6 }, "ProductArn": { "arn:aws:security hub:eu-west-1::product/aws/security hub": 3, "arn:aws:security hub:us-east-1::product/aws/security hub": 3 }, "ResourceType": { "AwsSageMakerNotebookInstance": 6 }, "AwsAccountId": { "obfuscated": 6 }, "Region": { "eu-west-1": 3, "us-east-1": 3 }, "ResourceId": { "arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated": 3, "arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated": 3 } }
## HTML
Вы можете создавать насыщенные HTML-отчёты о ваших результатах, добавляя в них свой контекст.
HTML-отчёты интерактивны во многих отношениях:
- Вы можете добавлять/удалять столбцы.
- Вы можете сортировать и фильтровать по любому столбцу.
- Вы можете автоматически фильтровать по любому столбцу
- Вы можете группировать/разгруппировать находки
- Вы также можете загрузить эти данные в форматах xlsx, CSV, HTML и JSON.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/21d785d2413698ed7cb3e9dc7e9b51dc6550395a598d777abc9fc358f8a23573.png" alt="html-example"/>
</p>
## CSV
Вы можете создавать CSV-отчёты о ваших результатах, добавляя в них свой контекст.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/66f15350123702e1cc317e47938401853bdcb1d86dad0ad4e48e73f15e00dd76.png" alt="csv-example"/>
</p>
## XLSX
Аналогично CSV, но с дополнительными возможностями форматирования.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/953a77917dc5b06e5185e6cb882ba7e711d785861e184599f10cd472efc42db9.png" alt="xlsx-example"/>
</p>
## Настройка выводов HTML, CSV или XLSX
Вы можете настроить, какие ключи контекста разворачивать в виде столбцов для ваших HTML, CSV и XLSX выводов, используя опции `--output-tag-columns` и `--output-config-columns` (как список столбцов). Если указанные ключи не существуют для затронутого ресурса, они будут пустыми. Вы также можете настроить эти столбцы по умолчанию в конфигурационном файле (см. [Настройка конфигурации](#customizing-configuration)).
Например, вы можете сгенерировать HTML-вывод с тегами и добавить "Owner" и "Environment" в качестве столбцов в ваш отчёт, используя:```sh
./metahub --output-modes html --output-tag-columns Owner Environment
MetaHub может сохранять результаты и контекст в базе данных SQLite. Эта база данных может быть использована для дальнейшего анализа, составления отчетов и интеграции с другими инструментами, такими как Powerpipe. База данных будет сохранена в папке outputs/ с датой выполнения и расширением .db.
Вы можете использовать базу данных SQLite, созданную MetaHub, вместе с Powerpipe. Модуль MetaHub для Powerpipe находится в папке powerpipe/.
Для использования необходимо установить Powerpipe в вашей системе.
После установки выполните следующую команду:```sh powerpipe server --database sqlite:../outputs/metahub-20240331-182942.db
### Создавайте собственные панели мониторинга
Создание панелей мониторинга с помощью Powerpipe очень просто и мощно. Вы можете ознакомиться с [документацией Powerpipe](https://powerpipe.io/docs) для получения дополнительной информации.
Ниже приведены таблицы, доступные в базе данных SQLite.
#### Ресурсы
| Название столбца | Тип данных | Описание |
| -------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------- |
| resource_arn | VARCHAR | Amazon Resource Name (ARN) ресурса, выступающий в качестве первичного ключа. |
| resource_type | VARCHAR | Тип ресурса. |
| resource_region | VARCHAR | Регион, в котором находится ресурс. |
| resource_account_id | VARCHAR | Идентификатор учетной записи, связанной с ресурсом. Внешний ключ, ссылающийся на accounts(account_id). |
| resource_account_alias | VARCHAR | Псевдоним учетной записи, связанной с ресурсом. |
| resource_tags | TEXT | Теги, связанные с ресурсом. |
| resource_exposure | VARCHAR | Уровень доступности ресурса. |
| resource_access | VARCHAR | Уровень доступа к ресурсу. |
| resource_encryption | VARCHAR | Статус шифрования ресурса. |
| resource_status | VARCHAR | Текущий статус ресурса. |
| resource_application | VARCHAR | Приложение, связанное с ресурсом. |
| resource_environment | VARCHAR | Среда (например, production, staging), в которой находится ресурс. |
| resource_owner | VARCHAR | Владелец ресурса. |
| resource_score | INTEGER | Оценка, связанная с ресурсом. |
| resource_findings_score | INTEGER | Оценка на основе выводов (findings), связанных с ресурсом. |
| resource_findings_critical | INTEGER | Количество критических выводов. |
| resource_findings_high | INTEGER | Количество выводов высокого уровня серьезности. |
| resource_findings_medium | INTEGER | Количество выводов среднего уровня серьезности. |
| resource_findings_low | INTEGER | Количество выводов низкого уровня серьезности. |
| resource_findings_informational | INTEGER | Количество информационных выводов. |
#### Выводы (Findings)
| Название столбца | Тип данных | Описание |
| ----------------------- | ---------- | --------------------------------------------------------------- |
| finding_id | VARCHAR | Уникальный идентификатор вывода, выступающий в качестве первичного ключа. |
| finding_title | VARCHAR | Название вывода. |
| finding_severity | VARCHAR | Серьезность вывода. |
| finding_workflowstatus | VARCHAR | Статус рабочего процесса вывода. |
| finding_recordstate | VARCHAR | Состояние записи вывода. |
| finding_compliancestatus| VARCHAR | Статус соответствия требованиям вывода. |
| finding_productarn | VARCHAR | ARN продукта, генерирующего вывод. |
| finding_resource_arn | VARCHAR | ARN связанного ресурса. |
#### Учетные записи (Accounts)
| Название столбца | Тип данных | Описание |
| -------------------------------- | ---------- | ---------------------------------------------------------------------------------- |
| account_id | INTEGER | Уникальный идентификатор учетной записи, выступающий в качестве первичного ключа. |
| account_alias | VARCHAR | Псевдоним учетной записи. |
| account_organizations_id | VARCHAR | Идентификатор организации, к которой относится учетная запись. |
| account_organizations_arn | VARCHAR | ARN организации, к которой относится учетная запись. |
| account_master_account_id | VARCHAR | Идентификатор главной учетной записи, если эта учетная запись является частью AWS Organization. |
| account_master_account_email | VARCHAR | Адрес электронной почты, связанный с главной учетной записью. |
| account_alternate_contact_type | VARCHAR | Тип альтернативного контакта (например, billing, security). |
| account_alternate_contact_name | VARCHAR | Имя альтернативного контакта. |
| account_alternate_contact_email | VARCHAR | Адрес электронной почты альтернативного контакта. |
| account_alternate_contact_phone | VARCHAR | Номер телефона альтернативного контакта. |
| account_alternate_contact_title | VARCHAR | Должность альтернативного контакта. |
# Фильтры
Вы можете фильтровать выводы безопасности и ресурсы, полученные из вашего источника, различными способами и комбинировать их для получения именно того, что вы ищете, а затем повторно использовать эти фильтры для создания автоматизации, оповещений, отчетов и многого другого.
- [Фильтрация Security Hub](#security-hub-filtering)
- [Фильтрация Security Hub с использованием YAML-шаблонов](#security-hub-filtering-using-yaml-templates)
- [Фильтры Config](#config-filters)
- [Фильтры тегов](#tags-filters)
- [Фильтры влияния](#impact-filters)
## Фильтрация Security Hub
MetaHub поддерживает фильтрацию выводов AWS Security Hub в формате `KEY=VALUE` с использованием опции `--sh-filters`, аналогично тому, как вы фильтруете с помощью AWS CLI, но с ограничением на сравнение `EQUALS`. Если вам нужно другое сравнение, используйте опцию `--sh-template` [Фильтрация Security Hub с использованием YAML-шаблонов](#security-hub-filtering-using-yaml-templates).
Вы можете ознакомиться с доступными фильтрами в [документации AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/securityhub.html#SecurityHub.Client.get_findings).```sh
./metahub --sh-filters <KEY=VALUE>
Если вы не укажете никаких фильтров, применяются фильтры по умолчанию: RecordState=ACTIVE WorkflowStatus=NEW
Передача фильтров с помощью этой опции сбрасывает фильтры по умолчанию. Если вы хотите добавить фильтры к стандартным, вам нужно указать их в дополнение к стандартным. Например, добавление SeverityLabel к стандартным фильтрам:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW
Если значение содержит пробелы, следует указывать его в двойных кавычках: `"ProductName="Security Hub"`
Вы можете добавить в запрос сколько угодно различных фильтров, а также добавить один и тот же ключ фильтра с разными значениями:
Примеры:
- Filter by Severity (CRITICAL):```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL
- Фильтровать по уровню опасности и аккаунту AWS:```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL AwsAccountId=1234567890
- Фильтр по типу ресурса AWS:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup
- Фильтровать по Finding Id:```sh
./metahub --sh-filters Id="arn:aws:security hub:eu-west-1:01234567890:subscription/aws-foundational-security-best-practices/v/1.0.0/EC2.19/finding/01234567890-1234-1234-1234-01234567890"
## Фильтрация Security Hub с помощью YAML-шаблонов
**MetaHub** позволяет создавать сложные фильтры с помощью YAML-файлов (шаблонов), которые можно повторно использовать при необходимости. YAML-шаблоны позволяют писать фильтры, используя любые сравнения, поддерживаемые AWS Security Hub, такие как 'EQUALS' | 'PREFIX' | 'NOT_EQUALS' | 'PREFIX_NOT_EQUALS'. Вы можете вызвать свой YAML-файл с помощью опции `--sh-template <<FILE>>`.
Примеры можно найти в папке [templates](https://github.com/gabrielsoltz/metahub/blob/HEAD/templates)
- Фильтрация с использованием YAML-шаблона default.yml:```sh
./metaHub --sh-template templates/default.yml
MetaHub поддерживает Config filters (и ассоциации) с использованием KEY=VALUE, где значение может быть только True или False, через опцию --mh-filters-config. Вы можете использовать столько фильтров, сколько нужно, разделяя их пробелами. Если указано более одного фильтра, вы получите все ресурсы, соответствующие всем фильтрам.
Config filters поддерживают только значения True или False:
True или с данными.False или без данных.Config filters выполняются после фильтров AWS Security Hub:
--sh-filters (или стандартных).--mh-filters-config, то есть это подмножество ресурсов из пункта 1.Примеры:
ResourceType=AwsEc2SecurityGroup) с находками AWS Security Hub, которые являются ACTIVE и NEW (RecordState=ACTIVE WorkflowStatus=NEW), только если они связаны с Network Interfaces (network_interfaces=True):```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-config network_interfaces=True- Получить все S3 Buckets (`ResourceType=AwsS3Bucket`) только если они публичные (`public=True`):```sh
./metahub --sh-filters ResourceType=AwsS3Bucket --mh-filters-config public=False
MetaHub поддерживает фильтры по тегам в формате KEY=VALUE, где KEY — имя тега, а VALUE — значение тега. Вы можете использовать столько фильтров, сколько хотите, разделяя их пробелами. Указание нескольких фильтров вернет все ресурсы, которые соответствуют хотя бы одному фильтру.
Фильтры по тегам применяются после фильтров AWS Security Hub:
--sh-filters (или значения по умолчанию).--mh-filters-tags, то есть это подмножество ресурсов из пункта 1.Примеры:
ResourceType=AwsEc2SecurityGroup) с результатами AWS Security Hub, которые ACTIVE и NEW (RecordState=ACTIVE WorkflowStatus=NEW), только если у них есть тег Environment со значением Production:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-tags Environment=Production## Фильтры воздействия
**MetaHub** поддерживает **фильтры воздействия** — вы можете фильтровать по [ключам воздействия](#impact), вычисленным MetaHub. Вы можете использовать любое количество фильтров, разделяя их пробелами. Если указано более одного фильтра, вы получите все ресурсы, соответствующие **всем** фильтрам.
Примеры:
- Отфильтровать все замечания безопасности, затрагивающие ресурсы с рассчитанным воздействием как effectively-public:```sh
./metahub --mh-filters-impact exposure=effectively-public
# Security Hub Actions
## Обновление статуса рабочего процесса
Вы можете использовать **MetaHub** для обновления статуса рабочего процесса ваших выводов AWS Security Hub (`NOTIFIED`, `NEW`, `RESOLVED`, `SUPPRESSED`) одной командой. Вы будете использовать опцию `--update-findings` для обновления всех выводов из вашего запроса MetaHub. Это означает, что вы можете обновить один, десять или тысячи выводов с помощью только одной команды. API AWS Security Hub ограничен 100 выводами на одно обновление. Metahub разобьет ваши результаты на порции по 100 элементов, чтобы обойти это ограничение и обновить ваши выводы независимо от количества.
Например, используя следующий фильтр: `./metahub --sh-filters ResourceType=AwsSageMakerNotebookInstance RecordState=ACTIVE WorkflowStatus=NEW` я нашел два затронутых ресурса, каждый с тремя выводами, что в сумме дает шесть выводов Security Hub.
Выполнение следующей команды обновления изменит статус рабочего процесса этих шести выводов на `NOTIFIED` с примечанием:```sh
./metahub --update-findings Workflow=NOTIFIED Note="Enter your ticket ID or reason here as a note that you will add to the finding as part of this update."
Параметр --update-findings запросит подтверждение перед обновлением ваших находок. Вы можете пропустить это подтверждение, используя опцию --no-actions-confirmation.
Вы можете использовать MetaHub для обратного обогащения ваших результатов AWS Security Hub выводом контекста с помощью опции --enrich-findings. Обогащение ваших находок означает их прямое обновление в AWS Security Hub. MetaHub использует для этого поле UserDefinedFields.
Обогащая ваши находки непосредственно в AWS Security Hub, вы можете воспользоваться такими функциями, как Insights и Filters, используя дополнительную информацию, ранее недоступную в Security Hub.
Например, вы хотите обогатить все результаты AWS Security Hub с WorkflowStatus=NEW, RecordState=ACTIVE и ResourceType=AwsS3Bucket, которые имеют public=True, выводами контекста:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsS3Bucket --mh-filters-checks public=True --enrich-findings
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/93a45d119a712b11ae5f23ea68e3a1f7d71e0e9511df7d7dadd2b462fcde71a2.png" alt="update-findings" width="850"/>
</p>
Параметр `--enrich-findings` запросит у вас подтверждение перед обогащением ваших находок. Вы можете пропустить это подтверждение, используя опцию `--no-actions-confirmation`.
# Вклад
Вы можете следовать этому руководству, если хотите внести вклад в модуль Context: [руководство](https://github.com/gabrielsoltz/metahub/blob/HEAD/docs/context.md).
| Возможные статусы | Значение | Описание |
|---|
| 🔴 effectively-public | 100% | Ресурс эффективно публичен из Интернета. |
| 🟠 restricted-public | 40% | Ресурс публичен, но с ограничением, например группой безопасности. |
| 🟠 unrestricted-private | 30% | Ресурс частный, но без ограничений, например открытая группа безопасности. |
| 🟠 launch-public | 10% | Это ресурсы, которые могут запускать другие ресурсы как публичные. Например, группа Auto Scaling или подсеть. |
| 🟢 restricted | 0% | Ресурс ограничен. |
| 🔵 unknown | - | Ресурс не удалось проверить |
| Возможные статусы | Значение | Описание |
|---|
| 🔴 unrestricted | 100% | Субъект не ограничен, без каких-либо условий или ограничений. |
| 🔴 untrusted-principal | 70% | Субъект является учетной записью AWS, не входящей в ваши доверенные учетные записи. |
| 🟠 unrestricted-principal | 40% | Субъект не ограничен, задан с помощью подстановочного знака. Могут быть условия, ограничивающие его, или другие ограничения, например, публичные блоки S3. |
| 🟠 cross-account-principal | 30% | Субъект из другой учетной записи AWS. |
| 🟠 unrestricted-actions | 30% | Действия заданы с помощью подстановочных знаков. |
| 🟠 dangerous-actions | 30% | Некоторые опасные действия определены в составе этой политики. |
| 🟠 unrestricted-service | 10% | Политика разрешает сервис AWS в качестве субъекта без ограничений. |
| 🟢 restricted | 0% | Политика ограничена. |
| 🔵 unknown | — | Политику не удалось проверить. |
| 🔴 не зашифрован | 100% | Ресурс не полностью зашифрован. |
| 🟢 зашифрован | 0% | Ресурс полностью зашифрован, включая все его ассоциации. |
| 🔵 неизвестно | - | Шифрование ресурса не удалось проверить. |
| Возможные статусы | Значение | Описание |
|---|
| 🟠 прикреплено | 100% | Ресурс поддерживает прикрепление и прикреплен. |
| 🟠 запущен | 100% | Ресурс поддерживает запуск и запущен. |
| 🟠 включено | 100% | Ресурс поддерживает включение и включен. |
| 🟢 не прикреплено | 0% | Ресурс поддерживает прикрепление и не прикреплен. |
| 🟢 не запущен | 0% | Ресурс поддерживает запуск и не запущен. |
| 🟢 не включено | 0% | Ресурс поддерживает включение и не включен. |
| 🔵 неизвестно | - | Состояние ресурса не удалось проверить. |
| Возможные статусы | Значение | Описание |
|---|
| 🟠 production | 100% | Это производственный ресурс. |
| 🟢 staging | 30% | Это ресурс промежуточного окружения. |
| 🟢 development | 0% | Это ресурс разработки. |
| 🔵 unknown | - | Не удалось проверить ресурс на предмет среды. |
--sh-assume-role--sh-account--sh-assume-role--sh-profile