From 009221aa982ffae4faaceff5c0f542742c845253 Mon Sep 17 00:00:00 2001 From: dwertent Date: Mon, 10 Jan 2022 10:21:42 +0200 Subject: [PATCH] report --- cautils/reportv2tov1.go | 18 +++++-- opaprocessor/processorhandlerutils.go | 1 + .../reporter/v1/reporteventreceiver.go | 8 +-- .../reporter/v2/reporteventreceiver.go | 51 ++++++++++++------- 4 files changed, 53 insertions(+), 25 deletions(-) diff --git a/cautils/reportv2tov1.go b/cautils/reportv2tov1.go index 2edd8774..5b1562ed 100644 --- a/cautils/reportv2tov1.go +++ b/cautils/reportv2tov1.go @@ -1,6 +1,7 @@ package cautils import ( + "github.com/armosec/k8s-interface/workloadinterface" "github.com/armosec/opa-utils/reporthandling" helpersv1 "github.com/armosec/opa-utils/reporthandling/helpers/v1" "github.com/armosec/opa-utils/reporthandling/results/v1/reportsummary" @@ -57,6 +58,7 @@ func ReportV2ToV1(opaSessionObj *OPASessionObj) { opaSessionObj.PostureReport.FrameworkReports = frameworks + // opaSessionObj.Report.SummaryDetails.Score = 0 // for i := range frameworks { // for j := range frameworks[i].ControlReports { // // frameworks[i].ControlReports[j].Score @@ -74,7 +76,9 @@ func ReportV2ToV1(opaSessionObj *OPASessionObj) { // opaSessionObj.Report.SummaryDetails.Controls[frameworks[i].ControlReports[j].ControlID] = c // } // } + // opaSessionObj.Report.SummaryDetails.Score += opaSessionObj.PostureReport.FrameworkReports[i].Score // } + // opaSessionObj.Report.SummaryDetails.Score /= float32(len(opaSessionObj.Report.SummaryDetails.Frameworks)) } func controlReportV2ToV1(opaSessionObj *OPASessionObj, frameworkName string, controls map[string]reportsummary.ControlSummary) []reporthandling.ControlReport { @@ -84,7 +88,8 @@ func controlReportV2ToV1(opaSessionObj *OPASessionObj, frameworkName string, con crv1.ControlID = controlID crv1.BaseScore = crv2.ScoreFactor crv1.Name = crv2.GetName() - + crv1.Control_ID = controlID + // crv1.Attributes = crv2. crv1.Score = crv2.GetScore() // TODO - add fields @@ -100,6 +105,9 @@ func controlReportV2ToV1(opaSessionObj *OPASessionObj, frameworkName string, con if _, ok := rulesv1[rulev2.GetName()]; !ok { rulesv1[rulev2.GetName()] = reporthandling.RuleReport{ Name: rulev2.GetName(), + RuleStatus: reporthandling.RuleStatus{ + Status: "success", + }, } } @@ -120,10 +128,11 @@ func controlReportV2ToV1(opaSessionObj *OPASessionObj, frameworkName string, con } if fullRessource, ok := opaSessionObj.AllResources[resourceID]; ok { - ruleResponse.AlertObject.K8SApiObjects = append(ruleResponse.AlertObject.K8SApiObjects, fullRessource.GetObject()) + tmp := fullRessource.GetObject() + workloadinterface.RemoveFromMap(tmp, "spec") + ruleResponse.AlertObject.K8SApiObjects = append(ruleResponse.AlertObject.K8SApiObjects, tmp) } rulev1.RuleResponses = append(rulev1.RuleResponses, ruleResponse) - } rulev1.ListInputKinds = append(rulev1.ListInputKinds, resourceID) @@ -136,6 +145,9 @@ func controlReportV2ToV1(opaSessionObj *OPASessionObj, frameworkName string, con crv1.RuleReports = append(crv1.RuleReports, rulesv1[i]) } } + if len(crv1.RuleReports) == 0 { + crv1.RuleReports = []reporthandling.RuleReport{} + } controlRepors = append(controlRepors, crv1) } return controlRepors diff --git a/opaprocessor/processorhandlerutils.go b/opaprocessor/processorhandlerutils.go index 906e953f..392985be 100644 --- a/opaprocessor/processorhandlerutils.go +++ b/opaprocessor/processorhandlerutils.go @@ -201,6 +201,7 @@ func removeSecretData(workload workloadinterface.IWorkload) { func removePodData(workload workloadinterface.IWorkload) { workload.RemoveAnnotation("kubectl.kubernetes.io/last-applied-configuration") workloadinterface.RemoveFromMap(workload.GetObject(), "metadata", "managedFields") + workloadinterface.RemoveFromMap(workload.GetObject(), "status") containers, err := workload.GetContainers() if err != nil || len(containers) == 0 { diff --git a/resultshandling/reporter/v1/reporteventreceiver.go b/resultshandling/reporter/v1/reporteventreceiver.go index 9e575295..3d7bf16b 100644 --- a/resultshandling/reporter/v1/reporteventreceiver.go +++ b/resultshandling/reporter/v1/reporteventreceiver.go @@ -50,8 +50,8 @@ func (report *ReportEventReceiver) ActionSendReport(opaSessionObj *cautils.OPASe } opaSessionObj.PostureReport.ReportID = uuid.NewV4().String() - opaSessionObj.PostureReport.CustomerGUID = report.clusterName - opaSessionObj.PostureReport.ClusterName = report.customerGUID + opaSessionObj.PostureReport.CustomerGUID = report.customerGUID + opaSessionObj.PostureReport.ClusterName = report.clusterName if err := report.prepareReport(opaSessionObj.PostureReport, opaSessionObj.AllResources); err != nil { report.message = err.Error() @@ -124,11 +124,13 @@ func (report *ReportEventReceiver) sendReport(host string, postureReport *report if err != nil { return fmt.Errorf("in 'sendReport' failed to json.Marshal, reason: %v", err) } + // fmt.Printf("\n\n%s\n\n", reqBody) + msg, err := getter.HttpPost(report.httpClient, host, nil, reqBody) if err != nil { return fmt.Errorf("%s, %v:%s", host, err, msg) } - return err + return nil } func (report *ReportEventReceiver) generateMessage() { diff --git a/resultshandling/reporter/v2/reporteventreceiver.go b/resultshandling/reporter/v2/reporteventreceiver.go index 4d6adb4d..71f681df 100644 --- a/resultshandling/reporter/v2/reporteventreceiver.go +++ b/resultshandling/reporter/v2/reporteventreceiver.go @@ -49,11 +49,13 @@ func (report *ReportEventReceiver) ActionSendReport(opaSessionObj *cautils.OPASe return nil } opaSessionObj.Report.ReportID = uuid.NewV4().String() - opaSessionObj.Report.CustomerGUID = report.clusterName - opaSessionObj.Report.ClusterName = report.customerGUID + opaSessionObj.Report.CustomerGUID = report.customerGUID + opaSessionObj.Report.ClusterName = report.clusterName if err := report.prepareReport(opaSessionObj.Report); err != nil { report.message = err.Error() + } else { + report.generateMessage() } return nil } @@ -73,24 +75,29 @@ func (report *ReportEventReceiver) prepareReport(postureReport *reporthandlingv2 cautils.StartSpinner() defer cautils.StopSpinner() + reportCounter := 0 + + // send results + if err := report.sendResults(host, postureReport, &reportCounter); err != nil { + return err + } + reportCounter++ + + // send resources + if err := report.sendResources(host, postureReport, &reportCounter); err != nil { + return err + } + reportCounter++ + // send framework results - if err := report.sendReport(host, postureReport); err != nil { + if err := report.sendSummary(host, postureReport, &reportCounter); err != nil { return err } - // send resources - if err := report.sendResults(host, postureReport); err != nil { - return err - } - - // send resources - if err := report.sendResources(host, postureReport); err != nil { - return err - } return nil } -func (report *ReportEventReceiver) sendResources(host string, postureReport *reporthandlingv2.PostureReport) error { +func (report *ReportEventReceiver) sendResources(host string, postureReport *reporthandlingv2.PostureReport, reportCounter *int) error { splittedPostureReport := setSubReport(postureReport) counter := 0 @@ -103,9 +110,10 @@ func (report *ReportEventReceiver) sendResources(host string, postureReport *rep if counter+len(r) >= MAX_REPORT_SIZE && len(splittedPostureReport.Resources) > 0 { // send report - if err := report.sendReport(host, splittedPostureReport); err != nil { + if err := report.sendReport(host, splittedPostureReport, *reportCounter, false); err != nil { return err } + *reportCounter++ // delete resources splittedPostureReport.Resources = []reporthandlingv2.Resource{} @@ -118,10 +126,10 @@ func (report *ReportEventReceiver) sendResources(host string, postureReport *rep splittedPostureReport.Resources = append(splittedPostureReport.Resources, v) } - return report.sendReport(host, splittedPostureReport) + return report.sendReport(host, splittedPostureReport, *reportCounter, false) } -func (report *ReportEventReceiver) sendResults(host string, postureReport *reporthandlingv2.PostureReport) error { +func (report *ReportEventReceiver) sendResults(host string, postureReport *reporthandlingv2.PostureReport, reportCounter *int) error { splittedPostureReport := setSubReport(postureReport) counter := 0 @@ -134,9 +142,10 @@ func (report *ReportEventReceiver) sendResults(host string, postureReport *repor if counter+len(r) >= MAX_REPORT_SIZE && len(splittedPostureReport.Resources) > 0 { // send report - if err := report.sendReport(host, splittedPostureReport); err != nil { + if err := report.sendReport(host, splittedPostureReport, *reportCounter, false); err != nil { return err } + *reportCounter++ // delete results splittedPostureReport.Results = []resourcesresults.Result{} @@ -149,12 +158,16 @@ func (report *ReportEventReceiver) sendResults(host string, postureReport *repor splittedPostureReport.Results = append(splittedPostureReport.Results, v) } - return report.sendReport(host, splittedPostureReport) + return report.sendReport(host, splittedPostureReport, *reportCounter, false) } -func (report *ReportEventReceiver) sendReport(host string, postureReport *reporthandlingv2.PostureReport) error { + +func (report *ReportEventReceiver) sendSummary(host string, postureReport *reporthandlingv2.PostureReport, reportCounter *int) error { splittedPostureReport := setSubReport(postureReport) splittedPostureReport.SummaryDetails = postureReport.SummaryDetails + return report.sendReport(host, splittedPostureReport, *reportCounter, true) +} +func (report *ReportEventReceiver) sendReport(host string, postureReport *reporthandlingv2.PostureReport, counter int, isLastReport bool) error { reqBody, err := json.Marshal(postureReport) if err != nil { return fmt.Errorf("in 'sendReport' failed to json.Marshal, reason: %v", err)