This commit is contained in:
dwertent
2022-01-10 10:21:42 +02:00
parent c652da130d
commit 009221aa98
4 changed files with 53 additions and 25 deletions
+15 -3
View File
@@ -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
+1
View File
@@ -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 {
@@ -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() {
@@ -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)