diff --git a/lib/check/check.py b/lib/check/check.py index 43b76d6a..de5ab52f 100644 --- a/lib/check/check.py +++ b/lib/check/check.py @@ -3,6 +3,7 @@ import pkgutil from abc import ABC, abstractmethod from dataclasses import dataclass from types import ModuleType + from colorama import Fore, Style from config.config import groups_file @@ -158,11 +159,22 @@ def recover_modules_from_provider(provider: str, service: str = None) -> list: return modules +def set_output_options(quiet): + global output_options + output_options = Output_From_Options( + is_quiet=quiet + # set input options here + ) + return output_options + + def run_check(check): - print(f"\nCheck Name: {check.CheckName} - {Fore.MAGENTA}{check.ServiceName}{Fore.YELLOW}[{check.Severity}]{Style.RESET_ALL}") + print( + f"\nCheck Name: {check.CheckName} - {Fore.MAGENTA}{check.ServiceName}{Fore.YELLOW}[{check.Severity}]{Style.RESET_ALL}" + ) logger.debug(f"Executing check: {check.CheckName}") findings = check.execute() - report(findings) + report(findings, output_options) def import_check(check_path: str) -> ModuleType: @@ -182,6 +194,11 @@ class Check_Report: self.result_extended = "" +@dataclass +class Output_From_Options: + is_quiet: bool + + class Check(ABC): def __init__(self): try: diff --git a/lib/outputs.py b/lib/outputs.py index 35238589..ae52376c 100644 --- a/lib/outputs.py +++ b/lib/outputs.py @@ -1,13 +1,18 @@ from colorama import Fore, Style -def report(check_findings): +def report(check_findings, output_options): check_findings.sort(key=lambda x: x.region) for finding in check_findings: color = set_report_color(finding.status) - print( - f"{color}{finding.status}{Style.RESET_ALL} {finding.region}: {finding.result_extended}" - ) + if output_options.is_quiet and "FAIL" in finding.status: + print( + f"{color}{finding.status}{Style.RESET_ALL} {finding.region}: {finding.result_extended}" + ) + elif not output_options.is_quiet: + print( + f"{color}{finding.status}{Style.RESET_ALL} {finding.region}: {finding.result_extended}" + ) def set_report_color(status): diff --git a/prowler.py b/prowler.py index 84977d0f..69f50715 100644 --- a/prowler.py +++ b/prowler.py @@ -11,6 +11,7 @@ from lib.check.check import ( import_check, load_checks_to_execute, run_check, + set_output_options, ) from lib.logger import logger, logging_levels from providers.aws.aws_provider import provider_set_session @@ -40,6 +41,9 @@ if __name__ == "__main__": parser.add_argument( "-v", "--version", action="store_true", help="Show Prowler version" ) + parser.add_argument( + "-q", "--quiet", action="store_true", help="Show only Prowler failed findings" + ) parser.add_argument( "--log-level", choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], @@ -119,13 +123,16 @@ if __name__ == "__main__": if args.no_banner: print_banner() + # Setting output options + set_output_options(args.quiet) + # Set global session provider_set_session( args.profile, args.role, args.session_duration, args.external_id, - args.filter_region, + args.filter_region ) # Load checks to execute