chore(compliance): add manual checks to compliance CSV (#1872)

Co-authored-by: Pepe Fagoaga <pepe@verica.io>
This commit is contained in:
Sergio Garcia
2023-02-10 12:38:13 +01:00
committed by GitHub
parent d22d4c4c83
commit 25c9bc07b2
3 changed files with 82 additions and 1 deletions

View File

@@ -4,6 +4,7 @@ from prowler.lib.check.compliance_models import (
Compliance_Base_Model,
Compliance_Requirement,
)
from prowler.lib.check.models import Check_Report_AWS
from prowler.lib.logger import logger
@@ -17,6 +18,7 @@ def update_checks_metadata_with_compliance(
for framework in bulk_compliance_frameworks.values():
for requirement in framework.Requirements:
compliance_requirements = []
# Verify if check is in the requirement
if check in requirement.Checks:
# Create the Compliance_Requirement
requirement = Compliance_Requirement(
@@ -41,6 +43,64 @@ def update_checks_metadata_with_compliance(
check_compliance.append(compliance)
# Save it into the check's metadata
bulk_checks_metadata[check].Compliance = check_compliance
# Add requirements of Manual Controls
for framework in bulk_compliance_frameworks.values():
for requirement in framework.Requirements:
compliance_requirements = []
# Verify if requirement is Manual
if not requirement.Checks:
compliance_requirements.append(requirement)
# Create the Compliance_Model
compliance = Compliance_Base_Model(
Framework=framework.Framework,
Provider=framework.Provider,
Version=framework.Version,
Description=framework.Description,
Requirements=compliance_requirements,
)
# Include the compliance framework for the check
check_compliance.append(compliance)
# Create metadata for Manual Control
manual_check_metadata = """{
"Provider" : "aws",
"CheckID" : "manual_check",
"CheckTitle" : "Manual Check",
"CheckType" : [],
"ServiceName" : "",
"SubServiceName" : "",
"ResourceIdTemplate" : "",
"Severity" : "",
"ResourceType" : "",
"Description" : "",
"Risk" : "",
"RelatedUrl" : "",
"Remediation": {
"Code": {
"CLI": "",
"NativeIaC": "",
"Other": "",
"Terraform": ""
},
"Recommendation": {
"Text": "",
"Url": ""
}
},
"Categories" : [],
"Tags" : {},
"DependsOn" : [],
"RelatedTo" : [],
"Notes" : ""
}"""
manual_check = Check_Report_AWS(manual_check_metadata)
manual_check.status = "INFO"
manual_check.status_extended = "Manual check"
manual_check.resource_id = "manual_check"
manual_check.Compliance = check_compliance
# Save it into the check's metadata
bulk_checks_metadata["manual_check"] = manual_check
return bulk_checks_metadata
except Exception as e:
logger.critical(f"{e.__class__.__name__}[{e.__traceback__.tb_lineno}] -- {e}")

View File

@@ -14,6 +14,21 @@ from prowler.lib.outputs.models import (
)
def add_manual_controls(output_options, audit_info, file_descriptors):
try:
# Check if MANUAL control was already added to output
if "manual_check" in output_options.bulk_checks_metadata:
manual_finding = output_options.bulk_checks_metadata["manual_check"]
fill_compliance(
output_options, manual_finding, audit_info, file_descriptors
)
del output_options.bulk_checks_metadata["manual_check"]
except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
def fill_compliance(output_options, finding, audit_info, file_descriptors):
try:
# We have to retrieve all the check's compliance requirements

View File

@@ -12,7 +12,7 @@ from prowler.config.config import (
orange_color,
)
from prowler.lib.logger import logger
from prowler.lib.outputs.compliance import fill_compliance
from prowler.lib.outputs.compliance import add_manual_controls, fill_compliance
from prowler.lib.outputs.file_descriptors import fill_file_descriptors
from prowler.lib.outputs.html import fill_html
from prowler.lib.outputs.json import fill_json_asff
@@ -94,6 +94,12 @@ def report(check_findings, output_options, audit_info):
file_descriptors,
)
add_manual_controls(
output_options,
audit_info,
file_descriptors,
)
if "html" in file_descriptors:
fill_html(file_descriptors["html"], finding)
file_descriptors["html"].write("")