#!/usr/bin/env bash # Prowler - the handy cloud security tool (copyright 2020) by Toni de la Fuente # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy # of the License at http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software distributed # under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR # CONDITIONS OF ANY KIND, either express or implied. See the License for the # specific language governing permissions and limitations under the License. ## This script helps to generate a single html report from a single or multiple csv # output reports. # I use it when I want to visualize multiple accounts reports in a single view. # Report information and Assessment Summary will be empty due to the variables # that are not set here. ## First: Remove the CSV header from each output report. ## Second: If you want to aggretate all csv files in you can do like this: # find . -type f -name '*.csv' -exec cat {} + > prowler-output-unified-csv.file # use .file instead of .csv unless you want to get into an infinite loop ;) ## Third: Usage ./generate-html-from-csv.sh aggregated-reports-csv.file OUTPUT_FILE_NAME="report-unified-csv" EXTENSION_HTML="html" INPUT=$1 IFS=',' # used inside the while loop for csv delimiter HTML_LOGO_URL="https://github.com/prowler-cloud/prowler/" HTML_LOGO_IMG="https://raw.githubusercontent.com/prowler-cloud/prowler/master/util/html/prowler-logo-new.png" [ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; } addHtmlHeader() { if [[ $PROFILE == "" ]];then PROFILE="ENV" fi if [[ -z $HTML_REPORT_INIT ]]; then cat < Prowler - AWS Security Assesments
Report Information
  • Version: $PROWLER_VERSION
  • Parameters used: $PROWLER_PARAMETERS
  • Date: $TIMESTAMP
  • prowler-logo
Assesment Summary
  • AWS Account: $ACCOUNT_NUM
  • AWS-CLI Profile: $PROFILE
  • API Region: $REGION
  • User Id: $USER_ID
  • Caller Identity ARN: $CALLER_ARN
* Sortable columns are CheckID (default) and Result
EOF fi } addHtmlFooter() { cat <
Status Result Severity AccountID Region Compliance Service CheckID Check Title Check Output
EOF unset HTML_REPORT_INIT } addHtmlHeader > ${OUTPUT_FILE_NAME}.$EXTENSION_HTML while IFS=, read -r PROFILE ACCOUNT_NUM REPREGION TITLE_ID RESULT SCORED LEVEL TITLE_TEXT NOTES ASFF_COMPLIANCE_TYPE CHECK_SEVERITY CHECK_SERVICENAME;do if [[ $RESULT == "INFO" ]]; then echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo 'INFO' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SEVERITY'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$REPREGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ASFF_COMPLIANCE_TYPE'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SERVICENAME'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_ID'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_TEXT'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$NOTES'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML fi if [[ $RESULT == "PASS" ]]; then echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo 'PASS' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SEVERITY'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$REPREGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ASFF_COMPLIANCE_TYPE'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SERVICENAME'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_ID'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_TEXT'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$NOTES'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML fi if [[ $RESULT == "FAIL" ]]; then echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ' ' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo 'FAIL' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SEVERITY'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$REPREGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ASFF_COMPLIANCE_TYPE'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SERVICENAME'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_ID'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_TEXT'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$NOTES'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML fi if [[ $RESULT == "WARNING" ]]; then echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo 'WARN' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SEVERITY'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$REPREGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$ASFF_COMPLIANCE_TYPE'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$CHECK_SERVICENAME'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_ID'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$TITLE_TEXT'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo ''$NOTES'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML echo '' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML fi done < $INPUT addHtmlFooter >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML