diff --git a/util/html/generate-html-from-csv.sh b/util/html/generate-html-from-csv.sh new file mode 100755 index 00000000..ae7e1a72 --- /dev/null +++ b/util/html/generate-html-from-csv.sh @@ -0,0 +1,224 @@ +#!/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/toniblyx/prowler/" +HTML_LOGO_IMG="https://raw.githubusercontent.com/toniblyx/prowler/master/util/html/prowler-logo.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 < +
StatusResultAccountIDRegionGroupCheckIDCheck TitleCheck Output
+
+
+
+ + + + + + + + + + + + + + + +EOF + +unset HTML_REPORT_INIT +} + + +addHtmlHeader > ${OUTPUT_FILE_NAME}.$EXTENSION_HTML +while read PROFILE ACCOUNT_NUM REGION TITLE_ID RESULT SCORED LEVEL TITLE_TEXT NOTES;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 ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$REGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$LEVEL'' >> ${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 ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$REGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$LEVEL'' >> ${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 ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$REGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$LEVEL'' >> ${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 ''$ACCOUNT_NUM'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$REGION'' >> ${OUTPUT_FILE_NAME}.$EXTENSION_HTML + echo ''$LEVEL'' >> ${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 + + +