mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-24 13:01:56 +00:00
feat(db-connector): Include UUID for findings ID (#1368)
This commit is contained in:
@@ -360,36 +360,40 @@ Configure a `~/.pgpass` file into the root folder of the user that is going to l
|
||||
- `POSTGRES_TABLE`
|
||||
> *Note*: If you are using a schema different than postgres please include it at the beginning of the `POSTGRES_TABLE` variable, like: `export POSTGRES_TABLE=prowler.findings`
|
||||
|
||||
Also you need to have enabled the `uuid` postgresql extension, to enable it:
|
||||
|
||||
`CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`
|
||||
|
||||
Create a table in your PostgreSQL database to store the Prowler's data. You can use the following SQL statement to create the table:
|
||||
```
|
||||
CREATE TABLE IF NOT EXISTS prowler_findings (
|
||||
audit_id TEXT,
|
||||
finding_id TEXT,
|
||||
profile TEXT,
|
||||
account_number TEXT,
|
||||
region TEXT,
|
||||
check_id TEXT,
|
||||
result TEXT,
|
||||
item_scored TEXT,
|
||||
item_level TEXT,
|
||||
check_title TEXT,
|
||||
result_extended TEXT,
|
||||
check_asff_compliance_type TEXT,
|
||||
severity TEXT,
|
||||
service_name TEXT,
|
||||
check_asff_resource_type TEXT,
|
||||
check_asff_type TEXT,
|
||||
risk TEXT,
|
||||
remediation TEXT,
|
||||
documentation TEXT,
|
||||
check_caf_epic TEXT,
|
||||
resource_id TEXT,
|
||||
account_details_email TEXT,
|
||||
account_details_name TEXT,
|
||||
account_details_arn TEXT,
|
||||
account_details_org TEXT,
|
||||
account_details_tags TEXT,
|
||||
prowler_start_time TEXT
|
||||
id uuid,
|
||||
audit_id uuid ,
|
||||
profile text,
|
||||
account_number text,
|
||||
region text,
|
||||
check_id text,
|
||||
result text,
|
||||
item_scored text,
|
||||
item_level text,
|
||||
check_title text,
|
||||
result_extended text,
|
||||
check_asff_compliance_type text,
|
||||
severity text,
|
||||
service_name text,
|
||||
check_asff_resource_type text,
|
||||
check_asff_type text,
|
||||
risk text,
|
||||
remediation text,
|
||||
documentation text,
|
||||
check_caf_epic text,
|
||||
resource_id text,
|
||||
account_details_email text,
|
||||
account_details_name text,
|
||||
account_details_arn text,
|
||||
account_details_org text,
|
||||
account_details_tags text,
|
||||
prowler_start_time text
|
||||
);
|
||||
```
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ export SUPPORTED_DB_PROVIDERS
|
||||
postgresql_connector () {
|
||||
|
||||
CSV_REGISTRY="${1}"
|
||||
psql -q -U "${POSTGRES_USER}" -h "${POSTGRES_HOST}" -d "${POSTGRES_DB}" -c "copy ${POSTGRES_TABLE} from stdin with null as E'\'\'' delimiter ','" <<< "${CSV_REGISTRY}"
|
||||
psql -q -U "${POSTGRES_USER}" -h "${POSTGRES_HOST}" -d "${POSTGRES_DB}" -c "INSERT INTO ${POSTGRES_TABLE} VALUES (uuid_generate_v4(),${CSV_REGISTRY})"
|
||||
}
|
||||
|
||||
db_exit_abnormally() {
|
||||
|
||||
+31
-2
@@ -197,14 +197,43 @@ general_output() {
|
||||
#checking database provider
|
||||
if [[ ${DATABASE_PROVIDER} == 'postgresql' ]]
|
||||
then
|
||||
FINDING_ID="$(LC_ALL=C echo -e -n "${CHECK_RESULT_EXTENDED}" | tr -cs '[:alnum:]._~-' '_')"
|
||||
END_STRIPPED_TITLE_TEXT=${TITLE_TEXT%%\]*}
|
||||
CHECK_ID="${END_STRIPPED_TITLE_TEXT##\[}"
|
||||
POSTGRES_LINE="${AUDIT_ID//,/--}${SEP}${FINDING_ID//,/--}${SEP}${PROFILE//,/--}${SEP}${ACCOUNT_NUM//,/--}${SEP}${REGION_FROM_CHECK//,/--}${SEP}${CHECK_ID//,/--}${SEP}${CHECK_RESULT//,/--}${SEP}${ITEM_SCORED//,/--}${SEP}${ITEM_CIS_LEVEL//,/--}${SEP}${TITLE_TEXT//,/--}${SEP}${CHECK_RESULT_EXTENDED//,/--}${SEP}${CHECK_ASFF_COMPLIANCE_TYPE//,/--}${SEP}${CHECK_SEVERITY//,/--}${SEP}${CHECK_SERVICENAME//,/--}${SEP}${CHECK_ASFF_RESOURCE_TYPE//,/--}${SEP}${CHECK_ASFF_TYPE//,/--}${SEP}${CHECK_RISK//,/--}${SEP}${CHECK_REMEDIATION//,/--}${SEP}${CHECK_DOC//,/--}${SEP}${CHECK_CAF_EPIC//,/--}${SEP}${CHECK_RESOURCE_ID//,/--}${SEP}${ACCOUNT_DETAILS_EMAIL//,/--}${SEP}${ACCOUNT_DETAILS_NAME//,/--}${SEP}${ACCOUNT_DETAILS_ARN//,/--}${SEP}${ACCOUNT_DETAILS_ORG//,/--}${SEP}${ACCOUNT_DETAILS_TAGS//,/--}${SEP}${PROWLER_START_TIME//,/--}"
|
||||
stripPostgresFields
|
||||
DB_SEP="','"
|
||||
POSTGRES_LINE="'${AUDIT_ID//,/--}${DB_SEP}${PROFILE//,/--}${DB_SEP}${ACCOUNT_NUM//,/--}${DB_SEP}${REGION_FROM_CHECK//,/--}${DB_SEP}${CHECK_ID//,/--}${DB_SEP}${CHECK_RESULT//,/--}${DB_SEP}${ITEM_SCORED//,/--}${DB_SEP}${ITEM_CIS_LEVEL//,/--}${DB_SEP}${TITLE_TEXT//,/--}${DB_SEP}${CHECK_RESULT_EXTENDED//,/--}${DB_SEP}${CHECK_ASFF_COMPLIANCE_TYPE//,/--}${DB_SEP}${CHECK_SEVERITY//,/--}${DB_SEP}${CHECK_SERVICENAME//,/--}${DB_SEP}${CHECK_ASFF_RESOURCE_TYPE//,/--}${DB_SEP}${CHECK_ASFF_TYPE//,/--}${DB_SEP}${CHECK_RISK//,/--}${DB_SEP}${CHECK_REMEDIATION//,/--}${DB_SEP}${CHECK_DOC//,/--}${DB_SEP}${CHECK_CAF_EPIC//,/--}${DB_SEP}${CHECK_RESOURCE_ID//,/--}${DB_SEP}${ACCOUNT_DETAILS_EMAIL//,/--}${DB_SEP}${ACCOUNT_DETAILS_NAME//,/--}${DB_SEP}${ACCOUNT_DETAILS_ARN//,/--}${DB_SEP}${ACCOUNT_DETAILS_ORG//,/--}${DB_SEP}${ACCOUNT_DETAILS_TAGS//,/--}${DB_SEP}${PROWLER_START_TIME//,/--}'"
|
||||
postgresql_connector "${POSTGRES_LINE}"
|
||||
fi
|
||||
}
|
||||
|
||||
stripPostgresFields(){
|
||||
AUDIT_ID=${AUDIT_ID//\'/´}
|
||||
PROFILE=${PROFILE//\'/´}
|
||||
ACCOUNT_NUM=${ACCOUNT_NUM//\'/´}
|
||||
REGION_FROM_CHECK=${REGION_FROM_CHECK//\'/´}
|
||||
CHECK_ID=${CHECK_ID//\'/´}
|
||||
CHECK_RESULT=${CHECK_RESULT//\'/´}
|
||||
ITEM_SCORED=${ITEM_SCORED//\'/´}
|
||||
ITEM_CIS_LEVEL=${ITEM_CIS_LEVEL//\'/´}
|
||||
TITLE_TEXT=${TITLE_TEXT//\'/´}
|
||||
CHECK_RESULT_EXTENDED=${CHECK_RESULT_EXTENDED//\'/´}
|
||||
CHECK_ASFF_COMPLIANCE_TYPE=${CHECK_ASFF_COMPLIANCE_TYPE//\'/´}
|
||||
CHECK_SEVERITY=${CHECK_SEVERITY//\'/´}
|
||||
CHECK_SERVICENAME=${CHECK_SERVICENAME//\'/´}
|
||||
CHECK_ASFF_RESOURCE_TYPE=${CHECK_ASFF_RESOURCE_TYPE//\'/´}
|
||||
CHECK_ASFF_TYPE=${CHECK_ASFF_TYPE//\'/´}
|
||||
CHECK_RISK=${CHECK_RISK//\'/´}
|
||||
CHECK_REMEDIATION=${CHECK_REMEDIATION//\'/´}
|
||||
CHECK_DOC=${CHECK_DOC//\'/´}
|
||||
CHECK_CAF_EPIC=${CHECK_CAF_EPIC//\'/´}
|
||||
ACCOUNT_DETAILS_EMAIL=${ACCOUNT_DETAILS_EMAIL//\'/´}
|
||||
ACCOUNT_DETAILS_NAME=${ACCOUNT_DETAILS_NAME//\'/´}
|
||||
ACCOUNT_DETAILS_ARN=${ACCOUNT_DETAILS_ARN//\'/´}
|
||||
ACCOUNT_DETAILS_ORG=${ACCOUNT_DETAILS_ORG//\'/´}
|
||||
ACCOUNT_DETAILS_TAGS=${CHECK_RESOURCE_ID//\'/´}
|
||||
PROWLER_START_TIME=${PROWLER_START_TIME//\'/´}
|
||||
}
|
||||
|
||||
textPass(){
|
||||
CHECK_RESULT="PASS"
|
||||
CHECK_RESULT_EXTENDED="${1}"
|
||||
|
||||
Reference in New Issue
Block a user