mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-30 23:34:27 +00:00
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:
1 parent
65185943ca
commit
a63c42f59c
6 files changed
+118
-55
No files matched your search
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user