feat(custom_filename): custom output filename (#1345)

* feat(s3_output): send outputs to S3 bucket

* feat(custom_filename): custom output filename

Co-authored-by: sergargar <sergio@verica.io>
This commit is contained in:
Sergio Garciaandsergargar authored and GitHub committed 2022-08-26 13:08:34 +02:00
1 parent 65185943ca
commit a63c42f59c
6 files changed
+118 -55

No files matched your search

+44 -19
View File
@@ -6,7 +6,7 @@ import sys
from os import mkdir
from os.path import isdir
from config.config import default_output_directory
from config.config import default_output_directory, output_file_timestamp
from lib.banner import print_banner, print_version
from lib.check.check import (
bulk_load_checks_metadata,
@@ -23,7 +23,7 @@ from lib.check.check import (
)
from lib.check.checks_loader import load_checks_to_execute
from lib.logger import logger, set_logging_config
from lib.outputs.outputs import close_json
from lib.outputs.outputs import close_json, send_to_s3_bucket
from providers.aws.aws_provider import provider_set_session
from providers.aws.lib.security_hub import resolve_security_hub_previous_findings
@@ -132,9 +132,16 @@ if __name__ == "__main__":
help="Output mode, by default csv",
choices=["csv", "json", "json-asff"],
)
parser.add_argument(
"-F",
"--output-filename",
nargs="?",
default=None,
help="Custom output report name, if not specified will use default output/prowler-output-ACCOUNT_NUM-OUTPUT_DATE.format.",
)
parser.add_argument(
"-o",
"--custom-output-directory",
"--output-directory",
nargs="?",
help="Custom output directory, by default the folder where Prowler is stored",
default=default_output_directory,
@@ -151,6 +158,13 @@ if __name__ == "__main__":
action="store_true",
help="Send check output to AWS Security Hub",
)
parser.add_argument(
"-B",
"--output-bucket",
nargs="?",
default=None,
help="Custom output bucket, requires -M <mode> and it can work also with -o flag.",
)
# Parse Arguments
args = parser.parse_args()
@@ -162,7 +176,8 @@ if __name__ == "__main__":
services = args.services
groups = args.groups
checks_file = args.checks_file
output_directory = args.custom_output_directory
output_directory = args.output_directory
output_filename = args.output_filename
severities = args.severity
output_modes = args.output_modes
@@ -238,21 +253,11 @@ if __name__ == "__main__":
else:
output_modes.append("json-asff")
# Setting output options
audit_output_options = set_output_options(
args.quiet, output_modes, output_directory, args.security_hub
)
# Check output directory, if it is default and not created -> create it
# If is custom and not created -> error
# Check output directory, if it is not created -> create it
if output_directory:
if not isdir(output_directory):
if output_directory == default_output_directory:
if output_modes:
mkdir(default_output_directory)
else:
logger.critical("Output directory does not exist")
sys.exit()
if output_modes:
mkdir(output_directory)
# Set global session
audit_info = provider_set_session(
@@ -264,6 +269,17 @@ if __name__ == "__main__":
args.organizations_role,
)
# Check if custom output filename was input, if not, set the default
if not output_filename:
output_filename = (
f"prowler-output-{audit_info.audited_account}-{output_file_timestamp}"
)
# Setting output options
audit_output_options = set_output_options(
args.quiet, output_modes, output_directory, args.security_hub, output_filename
)
# Execute checks
if len(checks_to_execute):
for check_name in checks_to_execute:
@@ -291,11 +307,20 @@ if __name__ == "__main__":
"There are no checks to execute. Please, check your input arguments"
)
# Close json file if exists
if output_modes:
for mode in output_modes:
# Close json file if exists
if mode == "json" or mode == "json-asff":
close_json(output_directory, audit_info.audited_account, mode)
close_json(output_filename, output_directory, mode)
# Send output to S3 if needed
if args.output_bucket:
send_to_s3_bucket(
output_filename,
output_directory,
mode,
args.output_bucket,
audit_info.audit_session,
)
# Resolve previous fails of Security Hub
if args.security_hub: