Files
prowler/util/generate_compliance_json_from_csv_for_cis15.py
2025-05-21 12:38:34 +02:00

59 lines
2.2 KiB
Python

import csv
import json
import sys
# Convert a CSV file following the CIS 1.5 AWS benchmark into a Prowler v3.0 Compliance JSON file
# CSV fields:
# ID Title Check Section # SubSection Profile Assessment Status Description Rationale Statement Impact Statement Remediation Procedure Audit Procedure Additional Information References Default Value
# get the CSV filename to convert from
file_name = sys.argv[1]
# read the CSV file rows and use the column fields to form the Prowler compliance JSON file 'ens_rd2022_aws.json'
output = {"Framework": "CIS-AWS", "Version": "1.5", "Requirements": []}
with open(file_name, newline="", encoding="utf-8") as f:
reader = csv.reader(f, delimiter=",")
for row in reader:
if len(row[4]) > 0:
attribute = {
"Section": row[3],
"SubSection": row[4],
"Profile": row[5],
"AssessmentStatus": row[6],
"Description": row[7],
"RationaleStatement": row[8],
"ImpactStatement": row[9],
"RemediationProcedure": row[10],
"AuditProcedure": row[11],
"AdditionalInformation": row[12],
"References": row[13],
"DefaultValue": row[14],
}
else:
attribute = {
"Section": row[3],
"Profile": row[5],
"AssessmentStatus": row[6],
"Description": row[7],
"RationaleStatement": row[8],
"ImpactStatement": row[9],
"RemediationProcedure": row[10],
"AuditProcedure": row[11],
"AdditionalInformation": row[12],
"References": row[13],
"DefaultValue": row[14],
}
output["Requirements"].append(
{
"Id": row[0],
"Description": row[1],
"Checks": list(map(str.strip, row[2].split(","))),
"Attributes": [attribute],
}
)
# Write the output Prowler compliance JSON file 'cis_1.5_aws.json' locally
with open("cis_1.5_aws.json", "w", encoding="utf-8") as outfile:
json.dump(output, outfile, indent=4, ensure_ascii=False)