Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
metahub — Инструмент автоматического обогащения выводов безопасности и оценки воздействия для AWS. Обогащает данные об уязвимостях контекстом ресурсов, связями и тегами для расчета контекстных показателей воздействия для приоритетного устранения. | Kitploit
Инструменты/GitHubGitHub/gabrielsoltz/metahub
Сканеры уязвимостейАнализ уязвимостейАудит конфигурацииБезопасность облачных средРазведка угрозРеагирование на Инциденты
GitHubgabrielsoltz/metahub

metahub

Инструмент автоматического обогащения выводов безопасности и оценки воздействия для AWS. Обогащает данные об уязвимостях контекстом ресурсов, связями и тегами для расчета контекстных показателей воздействия для приоритетного устранения.

Репозиторий
177195 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

MetaHub

MetaHub — это автоматизированный инструмент для контекстуального обогащения и оценки влияния находок безопасности для управления уязвимостями. Вы можете использовать его с AWS Security Hub или любым сканером безопасности, совместимым с ASFF. Перестаньте полагаться на бесполезные уровни серьезности и переключитесь на оценку влияния, основанную на ВАШЕМ контексте.

AWS ECR Gallery

Содержание

  • Описание
  • Быстрый запуск
  • Контекст
  • Влияние
  • Высокоуровневая архитектура
  • Варианты использования
  • Конфигурация
  • Запуск с Python
  • Запуск с Docker
  • Запуск с Lambda
  • Запуск с пользовательским действием Security Hub
  • Аутентификация AWS
  • Настройка Security Hub
  • Настройка контекста
  • Входные данные
  • Выходные данные
  • Фильтры
  • Действия Security Hub
  • Участие в разработке

Описание

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 с оценкой и всеми критериями, оцененными для генерации этой оценки.

Diagram

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

root@kitploit:~
Читает конкретную (отфильтрованную по 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

root@kitploit:~
Прочитать все выводы безопасности, затрагивающие учетную запись AWS, которые являются ACTIVE (отфильтрованные по AwsAccountId и RecordState) для ресурсов с тегом `Environment` и значением `stg` и выполняет контекстные опции `config` и `tags`:```bash
./metahub --sh-filters RecordState=ACTIVE AwsAccountId=123456789012 --mh-filters-tags Environment=stg --context config tags

Быстрый запуск (Чтение результатов из входного файла ASFF)

Читайте ваши результаты безопасности из Prowler как входной файл и выполняйте параметры контекста по умолчанию:```bash python3 prowler.py aws -M json-asff -q ./metahub --inputs file-asff --input-asff /path/to/prowler-findings.json.asff

root@kitploit:~
Читает ваши результаты безопасности из 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

root@kitploit:~
# Контекст

В **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} (см. конфигурационные фильтры).

Пример для ключа ассоциаций EC2 instance```json "associations": { "security_groups": { "arn:aws:ec2:eu-west-1:123456789012:security-group/sg-020cc749a58678e05": { "associations": { "vpcs": { "arn:aws:ec2:eu-west-1:123456789012:vpc/vpc-03cc56a1c2afb5760": { "associations": { "subnets": { "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-03d86f1ccd7729d85": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0ccfb8dea658f49ec": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-05e85a7b0ec9e404c": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0e177ea95bcc76256": {} } }, "config": { "cidr": "172.10.0.0/16", "default": false, "public": null } } }, "network_interfaces": { "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-041a6e5bb59c336ee": {} }, "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} } }, "config": { "public_ips": [ "100.100.100.100" ], "managed_services": [], "its_referenced_by_a_security_group": false, "security_group_rules": [ { "SecurityGroupRuleId": "sgr-08cdc9fdac8fd1a5b", "GroupId": "sg-020cc749a58678e05", "GroupOwnerId": "123456789012", "IsEgress": true, "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIpv4": "0.0.0.0/0", "Tags": [] }, { "SecurityGroupRuleId": "sgr-0e6cd39169dc137ab", "GroupId": "sg-020cc749a58678e05", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIpv4": "0.0.0.0/0", "Tags": [] } ], "public": true, "default": false, "attached": true, "resource_policy": null } }, }, "iam_roles": { "arn:aws:iam::123456789012:role/eu-west-1-stg-backend-iam-role": { "associations": { "iam_policies": { "arn:aws:iam::123456789012:policy/eu-west-1-stg-backend-iam-policy-cw": { "associations": { "iam_roles": { "arn:aws:iam::123456789012:role/eu-west-1-stg-backend-iam-role": {} }, "iam_groups": {}, "iam_users": {} }, "config": { "name": "eu-west-1-stg-backend-iam-policy-cw", "description": false, "customer_managed": true, "attached": true, "public": null, "resource_policy": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] } ] } } }, } }, "config": { "iam_inline_policies": {}, "instance_profile": "arn:aws:iam::123456789012:instance-profile/eu-west-1-stg-backend-iam-profile", "trust_policy": { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "permissions_boundary": false, "public": null, "resource_policy": null } } }, "volumes": { "arn:aws:ec2:eu-west-1:123456789012:volume/vol-0371a09e338f582da": { "associations": { "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} } }, "config": { "encrypted": true, "attached": true, "public": null, "resource_policy": null } } }, "autoscaling_groups": { "arn:aws:autoscaling:eu-west-1:123456789012:autoScalingGroup/stg-backend-20201205160228428400000002": { "associations": { "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} }, "launch_templates": { "arn:aws:ec2:eu-west-1:123456789012:launch-template/lt-06b73d2e77f10446f": {} }, "launch_configurations": {} }, "config": { "name": "stg-backend-20201205160228428400000002", "public": null, "resource_policy": null } } }, "vpcs": { "arn:aws:ec2:eu-west-1:123456789012:vpc/vpc-03cc56a1c2afb5760": { "associations": { "subnets": { "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-03d86f1ccd7729d85": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0ccfb8dea658f49ec": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-05e85a7b0ec9e404c": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0e177ea95bcc76256": {} } }, "config": { "cidr": "172.10.0.0/16", "default": false, "public": null } } }, "subnets": { "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-03d86f1ccd7729d85": { "associations": { "route_tables": { "arn:aws:ec2:eu-west-1:123456789012:route-table/rtb-0ebae6462f919943d": { "associations": {}, "config": { "default": false, "route_to_internet_gateway": [ { "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": "igw-0790540d8d726f9d4", "Origin": "CreateRoute", "State": "active" } ], "route_to_nat_gateway": [], "route_to_transit_gateway": [], "route_to_vpc_peering": [], "public": null } } }, "network_interfaces": { "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-0e8918fa31d2acd55": {}, "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-0f6c936934fd9d6a6": {}, "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-041a6e5bb59c336ee": {}, "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-0e5f6cfdc7c286224": {} }, "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} } }, "config": { "cidr": "172.11.11.0/24", "map_public_ip_on_launch_enabled": true, "default": false, "public": true, "resource_policy": null, "public_ips": [ "100.100.100.100", ], "managed_services": [ "ELB app/stg-alb-backend/3567d780bd062d75", "Interface for NAT Gateway nat-0805d9808347bba69" ], "attached": true } } }, } ```

Теги

Под ключом tags вы найдете все теги, связанные с затронутым ресурсом. MetaHub использует AWS Resource Groups Tagging API для запроса тегов, связанных с вашими ресурсами. Обратите внимание, что не все типы ресурсов AWS поддерживают этот API. Вы можете проверить поддерживаемые сервисы.

Теги являются важнейшей частью понимания вашего контекста. Стратегии тегирования часто включают:

  • Окружение (например, Production, Staging, Development и т.д.)
  • Классификация данных (например, Confidential, Restricted и т.д.)
  • Владелец (например, команда, отряд, бизнес-единица и т.д.)
  • Соответствие (например, PCI, SOX и т.д.)

Если вы придерживаетесь правильной стратегии тегирования, вы можете фильтровать и генерировать интересные выходные данные. Например, вы можете перечислить все выводы, относящиеся к конкретной команде, и предоставить эти данные непосредственно этой команде.

Вы можете фильтровать свои выводы на основе выходных данных тегов с помощью опции: --mh-filters-tags TAG=VALUE (см. фильтры тегов).

Пример для ключа тега инстанса EC2```json "tags": { "aws:autoscaling:groupName": "stg-backend-20201205160228428400000002", "environment": "stg", "terraform": "true", "aws:ec2launchtemplate:version": "8", "aws:ec2launchtemplate:id": "lt-06b73d2e77f10446f", "Name": "stg-backend" } ```

CloudTrail

Под ключом cloudtrail вы найдете критические события CloudTrail, связанные с затронутым ресурсом, такие как события создания. События CloudTrail, которые мы ищем, определяются по типу ресурса, и вы можете добавлять, удалять или изменять их, редактируя файл конфигурации resources.py. Например, для затронутого ресурса типа Security Group (группа безопасности), MetaHub будет искать следующие события: CreateSecurityGroup (событие создания группы безопасности) и AuthorizeSecurityGroupIngress (событие авторизации правила группы безопасности).

Пример для ключа cloudtrail EC2 instance```json "cloudtrail": { "RunInstances": { "Username": "root", "EventTime": "2023-11-15 06:10:07+01:00", "EventId": "4f122d76-812d-4438-bc33-3585a9e863cf" } } ```
Пример для ключа cloudtrail таблицы DynamoDB```json "cloudtrail": { "CreateTable": { "Username": "gabriel.soltz", "EventTime": "2023-12-05 14:34:25+01:00", "EventId": "7110e3ae-09a3-44b9-929a-1775e0fbedcf" } } ```

Аккаунт

В разделе account вы найдете информацию об аккаунте, на котором работает затронутый ресурс, например, является ли он частью AWS Organizations, информацию о контактах и другое.

Пример для ключа account```json "account": { "Alias": "metahub-demo", "AlternateContact": { "AlternateContactType": "SECURITY", "EmailAddress": "[email protected]", "Name": "Gabriel", "PhoneNumber": "+1234567890", "Title": "Security" }, "Organizations": { "Arn": "arn:aws:organizations::123456789012:organization/o-12349772jb", "Id": "o-12349772jb", "MasterAccountId": "123456789012", "MasterAccountEmail": "[email protected]", "FeatureSet": "ALL", "DelegatedAdministrators": {}, "Details": { "ParentId": "r-k123", "ParentType": "ROOT", "OU": "ROOT", "Policies": { "p-FullAWSAccess": { "Name": "FullAWSAccess", "Arn": "arn:aws:organizations::aws:policy/service_control_policy/p-FullAWSAccess", "Type": "SERVICE_CONTROL_POLICY", "Description": "Allows access to every operation", "AwsManaged": true, "Targets": [] } } } } }, ```

Влияние

Модуль влияния в MetaHub фокусируется на понимании 7 ключевых свойств затронутого ресурса: экспозиция, доступ, шифрование, статус, окружение, приложение и владелец — и объединении их значений со значениями всех уязвимостей безопасности находок, влияющих на тот же ресурс, и их уровней серьезности для генерации оценки. Оценка влияния представляет собой число от 0 до 100, где 100 — наивысшее влияние.


Экспозиция

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

Пример для effectively-public ресурса```json "exposure": { --> The exposure key "effectively-public": { --> The exposure value, effectively-public "entrypoint": "66.66.66.66", --> The entrypoint to the resource from the Internet (Ip, Domain, etc.) "unrestricted_ingress_rules": [ --> The unrestricted ingress rules, if any { "SecurityGroupRuleId": "sgr-0553206714e321b87", "GroupId": "sg-0a15a46e47f07d139", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIpv4": "0.0.0.0/0", "Tags": [] } ], "unrestricted_egress_rules": [ --> The unrestricted egress rules, if any { "SecurityGroupRuleId": "sgr-007b509667896ebe3", "GroupId": "sg-0a15a46e47f07d139", "GroupOwnerId": "123456789012", "IsEgress": true, "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIpv4": "0.0.0.0/0", "Tags": [] }, ], "resource_public_config": true --> The public configuration of the resource } } ```

Доступ

Доступ оценивает слой политик ресурсов. MetaHub проверяет все доступные политики, включая: управляемые политики IAM, встроенные политики IAM, политики ресурсов, ACL бакетов, а также любые связи с другими ресурсами, такими как роли IAM, чьи политики также анализируются. Неограниченная политика — это не только проблема самой политики, она затрагивает любой другой ресурс, который её использует.

Пример для ресурса с unrestricted-actions```json "access": { --> The access key "unrestricted-actions": { --> The access value, unrestricted-actions "wildcard_actions": { --> The wildcard policies, if any "arn:aws:iam::123456789012:policy/eu-west-1-stg-iam-policy-dynamodb-cache": [ { "Action": [ "dynamodb:*" --> The wildcard action ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:eu-west-1:123456789012:table/table", ] } ], } } ```

Шифрование

Шифрование оценивает различные уровни шифрования на основе каждого типа ресурса. Например, для некоторых ресурсов проверяется, включены ли одновременно настройки шифрования at_rest и in_transit.

Возможные статусыЗначение
Пример незашифрованного ресурса```json "encryption": { --> The encryption key "unencrypted": { --> The encryption value, unencrypted "unencrypted_resources": [ --> the unencrypted resources associated with the affected resource, if any "arn:aws:ec2:eu-west-1:012345678901:volume/vol-0ac713ec808a8d8bd" ], "resource_encryption_config": null --> The encryption configuration of the resource, if it has any } } ```

Статус

Статус оценивает состояние затронутого ресурса с точки зрения прикрепления или функционирования. Например, для экземпляра EC2 мы оцениваем, запущен ли ресурс, остановлен или завершен, но для таких ресурсов, как тома EBS и группы безопасности, мы оцениваем, прикреплены ли эти ресурсы к какому-либо другому ресурсу.

Пример для запущенного ресурса```json "status": { --> The status key "running": { --> The status value, running "status": "running", --> The status configuration of the resource, if it has any "attached": null --> The attachment configuration of the resource, if it has any } } ```

Окружение

Окружение оценивает среду, в которой работает затронутый ресурс. По умолчанию MetaHub определяет 3 окружения: production, staging и development, но вы можете добавлять, удалять или изменять эти окружения в соответствии с вашими потребностями. MetaHub оценивает окружение на основе тегов затронутого ресурса, идентификатора учетной записи или псевдонима учетной записи. Вы можете определить свои собственные определения окружений и стратегию в файле конфигурации (см. Настройка конфигурации).

Пример производственного ресурса, сопоставленного по тегам```json "environment": { --> The environment key "production": { --> The environment value, production "tags": { --> The parameters used for evaluating the environment, in this case tags "Env": "prod" --> The tag and key found used for evaluating the environment } } } ```

Приложение

Приложение оценивает приложение, частью которого является затронутый ресурс. MetaHub использует функцию AWS myApplications, которая опирается на тег awsApplication, но вы можете расширить эту функциональность на основе вашего контекста, например, определив другие теги, которые вы используете для определения приложений или сервисов (такие как Service или любые другие), или положившись на ID или псевдоним учетной записи. Вы можете определить свои определения приложений и стратегию в файле конфигурации (см. Настройка конфигурации).

Возможные статусыЗначениеОписание
🔵 неизвестно-Ресурс не удалось проверить на принадлежность приложению.
Пример ресурса, сопоставленного по тегу myApplication```json "application": { --> The application key "payments-app": { --> The application value, payments-app "tags": { --> The parameters used for evaluating the environment, in this case the tag awsApplication "awsApplication": "arn:aws:resource-groups:eu-west-1:123456789012:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2" --> The tag and key found used for evaluating the environment } } } ```

Владелец

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

Возможные статусыЗначениеОписание
🔵 неизвестно-Ресурс не удалось проверить на владельца.
Пример для ресурса, сопоставленного по идентификатору аккаунта```json "owner": { --> The owner key "payments-team": { --> The owner value, payments-app "account": { --> The parameters used for evaluating the environment, in this case the account "account_ids": ["123456789012"], --> The account ids found used for evaluating the environment "account_aliases": [], }, } } ```

Результаты

В рамках расчета оценки воздействия мы также оцениваем общее количество обнаруженных уязвимостей и их критичность, затрагивающих ресурс. Для расчета этого показателя используется следующая формула:```sh (SUM of all (Finding Severity / Highest Severity) with a maximum of 1)

root@kitploit:~
Например, если у затронутого ресурса есть два результата, один с `HIGH` и другой с `LOW` серьезностью, то **Оценка влияния результатов** будет:```sh
SUM(HIGH (3) / CRITICAL (4) + LOW (0.5) / CRITICAL (4)) = 0.875

Архитектура высокого уровня

MetaHub читает ваши находки безопасности из AWS Security Hub или любого ASFF-совместимого сканера безопасности. Затем он напрямую запрашивает затронутые ресурсы в соответствующем аккаунте, чтобы предоставить дополнительный контекст. Основываясь на этом контексте, он вычисляет его влияние. Наконец, он генерирует различные выходные данные в зависимости от ваших потребностей.

Диаграмма

Варианты использования

Некоторые варианты использования MetaHub включают:

  • Интеграция MetaHub с Prowler в качестве локального сканера для обогащения контекста
  • Автоматизация подавления находок Security Hub на основе тегирования
  • Интеграция MetaHub напрямую как пользовательское действие Security Hub для использования непосредственно из консоли AWS
  • Создание обогащённых HTML-отчётов по вашим находкам, которые можно фильтровать, сортировать, группировать и скачивать
  • Создание аналитических выводов (Insights) Security Hub на основе контекста MetaHub

Настройка конфигурации

MetaHub использует файлы конфигурации, которые позволяют настроить некоторые поведения проверок, фильтры по умолчанию и другое. Файлы конфигурации находятся в lib/config/.

Что можно настроить:

  • lib/config/configuration.py: Этот файл содержит конфигурацию по умолчанию для MetaHub. Вы можете изменить фильтры по умолчанию, режимы вывода по умолчанию, определения окружений и другое.

  • lib/config/impact.py: Этот файл содержит значения и их веса для формулы критериев влияния. Вы можете изменять значения и веса в соответствии со своими потребностями.

  • lib/config/reources.py: Этот файл содержит определения для каждого типа ресурсов, например, за какими событиями CloudTrail следует следить.

Запуск с помощью Python

MetaHub — это программа на Python3. В вашей системе должен быть установлен Python3 и необходимые модули Python, описанные в файле requirements.txt.

Требования можно установить в вашей системе вручную (с помощью pip3) или с использованием виртуального окружения Python (рекомендуемый способ).

Запуск с использованием виртуального окружения Python

  1. Клонируйте репозиторий: git clone [email protected]:gabrielsoltz/metahub.git
  2. Перейдите в каталог репозитория: cd metahub
  3. Создайте виртуальное окружение для этого проекта: python3 -m venv venv/metahub
  4. Активируйте только что созданное виртуальное окружение: source venv/metahub/bin/activate
  5. Установите зависимости Metahub: pip3 install -r requirements.txt
  6. Запустите: ./metahub -h
  7. Деактивируйте виртуальное окружение после завершения: deactivate

В следующий раз для использования программы вам понадобятся только шаги 4 и 6.

В качестве альтернативы вы можете запустить этот инструмент с помощью Docker.

Запуск с помощью Docker

MetaHub также доступен в виде Docker-образа. Вы можете запустить его напрямую из публичного Docker-образа или собрать локально.

Доступные теги для контейнеров MetaHub:

  • latest: синхронизировано с веткой master
  • <x.y.z>: вы можете найти релизы здесь
  • stable: этот тег всегда указывает на последний релиз.

Для запуска из публичного реестра выполните следующую команду:```sh docker run -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h

root@kitploit:~
## Учетные данные 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

На другой стороне, если вы не вошли в систему на хост-машине, вам нужно будет войти снова из самого контейнера.

Сборка и запуск Docker локально

Или вы также можете собрать его локально:```sh git clone [email protected]:gabrielsoltz/metahub.git cd metahub docker build -t metahub . docker run -ti metahub ./metahub -h

root@kitploit:~
# 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 при выполнении пользовательского действия. См. ниже.

Настройка поведения Lambda

Вы можете настроить параметры MetaHub для вашей лямбды, отредактировав файл lib/lambda.py. Вы можете изменить параметры по умолчанию для MetaHub, такие как фильтры, опции Meta* и другие.

Разрешения Lambda

Terraform создаст минимально необходимые разрешения для локального выполнения функции Lambda (в том же аккаунте). Если вы хотите, чтобы ваша Lambda принимала роль в других аккаунтах (например, это потребуется, если вы запускаете Lambda в главном аккаунте Security Hub, который агрегирует выводы из других аккаунтов), вам нужно указать роль для принятия, добавив опцию --mh-assume-role в конфигурацию функции Lambda (см. предыдущий шаг) и добавив соответствующую политику, разрешающую Lambda принимать эту роль в роли лямбды.

Запуск с помощью пользовательского действия Security Hub

MetaHub может быть запущен как пользовательское действие Security Hub. Это позволяет запускать MetaHub непосредственно из консоли Security Hub для выбранного вывода или для выбранного набора выводов.

пользовательское_действие

Пользовательское действие затем запустит функцию Lambda, которая выполнит MetaHub для выбранных выводов.

Когда вы запускаете Lambda с помощью пользовательского действия Security Hub, Lambda считывает выбранные выводы для своего контекста и выполняет MetaHub один раз для каждого вывода. По умолчанию никаких действий с выводами не предпринимается, но вы можете изменить это поведение. См. Настройка поведения Lambda.

Пользовательское действие Security Hub развертывается в составе кода Terraform. Подробнее см. в разделе Развертывание Lambda.

Если вы хотите развернуть его вручную, выполните следующие шаги:
  1. В Security Hub выберите Settings (Настройки), затем Custom Actions (Пользовательские действия).
  2. Выберите Create custom action (Создать пользовательское действие).
  3. Укажите Name (Имя), Description (Описание) и Custom action ID (Идентификатор пользовательского действия).
  4. Выберите Create custom action (Создать пользовательское действие). (Запишите ARN пользовательского действия. Он понадобится вам при создании правила для связи с этим действием в EventBridge.)
  5. В EventBridge выберите Rules (Правила), затем Create rule (Создать правило).
  6. Введите имя и описание правила.
  7. Для Event bus (Шина событий) выберите шину событий, с которой вы хотите связать это правило. Если вы хотите, чтобы это правило соответствовало событиям из вашего аккаунта, выберите default (по умолчанию). Когда служба AWS в вашем аккаунте генерирует событие, оно всегда отправляется в шину событий вашего аккаунта по умолчанию.
  8. Для Rule type (Тип правила) выберите правило с шаблоном события, затем нажмите Next (Далее).
  9. Для Event source (Источник события) выберите AWS events (События AWS).
  10. Для Creation method (Метод создания) выберите Use pattern form (Использовать форму шаблона).
  11. Для Event source (Источник события) выберите AWS services (Службы AWS).
  12. Для AWS service (Служба AWS) выберите Security Hub.
  13. Для Event type (Тип события) выберите Security Hub Findings - Custom Action (Выводы Security Hub - Пользовательское действие).
  14. Выберите Specific custom action ARNs (Конкретные ARN пользовательских действий) и добавьте ARN пользовательского действия.
  15. Нажмите Next (Далее).
  16. В разделе Select targets (Выбор целей) выберите функцию Lambda.
  17. Выберите функцию Lambda, созданную для MetaHub.

Аутентификация AWS

Убедитесь, что на вашем локальном компьютере (или в среде, откуда вы будете запускать MetaHub) настроены учетные данные AWS.

Например, вы можете использовать опцию aws configure.```sh aws configure

root@kitploit:~
Или вы можете экспортировать свои учетные данные в окружение.```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"

Настройка Security Hub

  • Если вы используете 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 для Security Hub

Это минимальная политика 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": [ "*" ] } ] }

root@kitploit:~
# 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

root@kitploit:~
При использовании файла в качестве входных данных вы не можете использовать опцию `--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

root@kitploit:~
**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
  }
}

JSON-Short

Показывает затронутый ресурс, используя его 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 } }

root@kitploit:~
### 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-Statistics

Показывает статистику для каждого поля/значения. В выводе вы увидите каждое поле/значение и количество вхождений; например, следующий вывод показывает статистику для шести находок.```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 } }

root@kitploit:~
## 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

SQLite

MetaHub может сохранять результаты и контекст в базе данных SQLite. Эта база данных может быть использована для дальнейшего анализа, составления отчетов и интеграции с другими инструментами, такими как Powerpipe. База данных будет сохранена в папке outputs/ с датой выполнения и расширением .db.

Использование с Powerpipe

Вы можете использовать базу данных SQLite, созданную MetaHub, вместе с Powerpipe. Модуль MetaHub для Powerpipe находится в папке powerpipe/.

Для использования необходимо установить Powerpipe в вашей системе.

После установки выполните следующую команду:```sh powerpipe server --database sqlite:../outputs/metahub-20240331-182942.db

root@kitploit:~
### Создавайте собственные панели мониторинга

Создание панелей мониторинга с помощью 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

root@kitploit:~
Если значение содержит пробелы, следует указывать его в двойных кавычках: `"ProductName="Security Hub"`

Вы можете добавить в запрос сколько угодно различных фильтров, а также добавить один и тот же ключ фильтра с разными значениями:

Примеры:

- Filter by Severity (CRITICAL):```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL
  • Фильтр по серьезности (CRITICAL and HIGH):```sh ./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL SeverityLabel=HIGH
root@kitploit:~
- Фильтровать по уровню опасности и аккаунту AWS:```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL AwsAccountId=1234567890
  • Фильтровать по названию проверки:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW Title="EC2.22 Unused EC2 security groups should be removed"
root@kitploit:~
- Фильтр по типу ресурса AWS:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup
  • Фильтровать по идентификатору ресурса:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceId="arn:aws:ec2:eu-west-1:01234567890:security-group/sg-01234567890"
root@kitploit:~
- Фильтровать по 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"
  • Фильтровать по статусу соответствия:```sh ./metahub --sh-filters ComplianceStatus=FAILED
root@kitploit:~
## Фильтрация 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

Config Filters

MetaHub поддерживает Config filters (и ассоциации) с использованием KEY=VALUE, где значение может быть только True или False, через опцию --mh-filters-config. Вы можете использовать столько фильтров, сколько нужно, разделяя их пробелами. Если указано более одного фильтра, вы получите все ресурсы, соответствующие всем фильтрам.

Config filters поддерживают только значения True или False:

  • Config filter, установленный в True, означает True или с данными.
  • Config filter, установленный в False, означает False или без данных.

Config filters выполняются после фильтров AWS Security Hub:

  1. MetaHub получает находки AWS Security на основе указанных вами фильтров с помощью --sh-filters (или стандартных).
  2. MetaHub выполняет Context для затронутых ресурсов AWS на основе предыдущего списка находок.
  3. MetaHub показывает только те ресурсы, которые соответствуют вашим --mh-filters-config, то есть это подмножество ресурсов из пункта 1.

Примеры:

  • Получить все Security Groups (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
root@kitploit:~
- Получить все 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:

  1. MetaHub извлекает результаты проверки безопасности AWS на основе указанных вами фильтров через --sh-filters (или значения по умолчанию).
  2. MetaHub выполняет поиск тегов для затронутых AWS-ресурсов на основе предыдущего списка результатов.
  3. MetaHub показывает только те ресурсы, которые соответствуют вашим --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
root@kitploit:~
## Фильтры воздействия

**MetaHub** поддерживает **фильтры воздействия** — вы можете фильтровать по [ключам воздействия](#impact), вычисленным MetaHub. Вы можете использовать любое количество фильтров, разделяя их пробелами. Если указано более одного фильтра, вы получите все ресурсы, соответствующие **всем** фильтрам.

Примеры:

- Отфильтровать все замечания безопасности, затрагивающие ресурсы с рассчитанным воздействием как effectively-public:```sh
./metahub --mh-filters-impact exposure=effectively-public
  • Отфильтровать все Security Findings, затрагивающие ресурсы со статусом, рассчитанным как not-attached:```sh ./metahub --mh-filters-impact status=not-attached
root@kitploit:~
# 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

update-findings

Параметр --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

root@kitploit:~
<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-public100%Ресурс эффективно публичен из Интернета.
🟠 restricted-public40%Ресурс публичен, но с ограничением, например группой безопасности.
🟠 unrestricted-private30%Ресурс частный, но без ограничений, например открытая группа безопасности.
🟠 launch-public10%Это ресурсы, которые могут запускать другие ресурсы как публичные. Например, группа Auto Scaling или подсеть.
🟢 restricted0%Ресурс ограничен.
🔵 unknown-Ресурс не удалось проверить
Возможные статусыЗначениеОписание
🔴 unrestricted100%Субъект не ограничен, без каких-либо условий или ограничений.
🔴 untrusted-principal70%Субъект является учетной записью AWS, не входящей в ваши доверенные учетные записи.
🟠 unrestricted-principal40%Субъект не ограничен, задан с помощью подстановочного знака. Могут быть условия, ограничивающие его, или другие ограничения, например, публичные блоки S3.
🟠 cross-account-principal30%Субъект из другой учетной записи AWS.
🟠 unrestricted-actions30%Действия заданы с помощью подстановочных знаков.
🟠 dangerous-actions30%Некоторые опасные действия определены в составе этой политики.
🟠 unrestricted-service10%Политика разрешает сервис AWS в качестве субъекта без ограничений.
🟢 restricted0%Политика ограничена.
🔵 unknown—Политику не удалось проверить.
Описание
🔴 не зашифрован100%Ресурс не полностью зашифрован.
🟢 зашифрован0%Ресурс полностью зашифрован, включая все его ассоциации.
🔵 неизвестно-Шифрование ресурса не удалось проверить.
Возможные статусыЗначениеОписание
🟠 прикреплено100%Ресурс поддерживает прикрепление и прикреплен.
🟠 запущен100%Ресурс поддерживает запуск и запущен.
🟠 включено100%Ресурс поддерживает включение и включен.
🟢 не прикреплено0%Ресурс поддерживает прикрепление и не прикреплен.
🟢 не запущен0%Ресурс поддерживает запуск и не запущен.
🟢 не включено0%Ресурс поддерживает включение и не включен.
🔵 неизвестно-Состояние ресурса не удалось проверить.
Возможные статусыЗначениеОписание
🟠 production100%Это производственный ресурс.
🟢 staging30%Это ресурс промежуточного окружения.
🟢 development0%Это ресурс разработки.
🔵 unknown-Не удалось проверить ресурс на предмет среды.
--sh-assume-role
--sh-account
--sh-assume-role
--sh-profile