fixed report

This commit is contained in:
dwertent
2022-01-04 18:28:48 +02:00
parent 1213e8d6ac
commit e1eec47a22
5 changed files with 83 additions and 75 deletions
+15 -10
View File
@@ -8,6 +8,7 @@ import (
"github.com/armosec/kubescape/cautils"
"github.com/armosec/opa-utils/objectsenvelopes"
"github.com/armosec/opa-utils/reporthandling"
"github.com/armosec/opa-utils/reporthandling/apis"
"github.com/armosec/opa-utils/reporthandling/results/v1/resourcesresults"
"github.com/open-policy-agent/opa/storage"
@@ -176,7 +177,11 @@ func (opap *OPAProcessor) processRule(rule *reporthandling.PolicyRule) (map[stri
}
inputResources = objectsenvelopes.ListMapToMeta(enumeratedData)
for i := range inputResources {
resources[inputResources[i].GetID()] = nil
resources[inputResources[i].GetID()] = &resourcesresults.ResourceAssociatedRule{
Name: rule.Name,
ControlConfigurations: postureControlInputs,
Status: apis.StatusPassed,
}
opap.AllResources[inputResources[i].GetID()] = inputResources[i]
}
@@ -185,19 +190,19 @@ func (opap *OPAProcessor) processRule(rule *reporthandling.PolicyRule) (map[stri
// TODO - Handle error
glog.Error(err)
} else {
// ruleResponse to ruleResult
for i := range ruleResponses {
ruleResult := resourcesresults.ResourceAssociatedRule{}
ruleResult.SetName(rule.Name)
ruleResult.ControlConfigurations = postureControlInputs
for j := range ruleResponses[i].FailedPaths {
ruleResult.Paths = append(ruleResult.Paths, resourcesresults.Path{FailedPath: ruleResponses[i].FailedPaths[j]})
}
failedResources := objectsenvelopes.ListMapToMeta(ruleResponses[i].GetFailedResources())
for j := range failedResources {
resources[failedResources[j].GetID()] = &ruleResult
ruleResult := &resourcesresults.ResourceAssociatedRule{}
if r, k := resources[failedResources[j].GetID()]; k {
ruleResult = r
}
ruleResult.Status = apis.StatusFailed
for j := range ruleResponses[i].FailedPaths {
ruleResult.Paths = append(ruleResult.Paths, resourcesresults.Path{FailedPath: ruleResponses[i].FailedPaths[j]})
}
resources[failedResources[j].GetID()] = ruleResult
}
}
}
+18 -18
View File
@@ -81,29 +81,29 @@ func TestProcessResourcesResult(t *testing.T) {
assert.Equal(t, 1, len(opaSessionObj.ResourcesResult))
res := opaSessionObj.ResourcesResult[deployment.GetID()]
assert.Equal(t, 2, len(res.ListControls(nil).All()))
assert.Equal(t, 1, len(res.ListControls(nil).Failed()))
assert.Equal(t, 1, len(res.ListControls(nil).Passed()))
assert.Equal(t, 2, len(res.ListControlsIDs(nil).All()))
assert.Equal(t, 1, len(res.ListControlsIDs(nil).Failed()))
assert.Equal(t, 1, len(res.ListControlsIDs(nil).Passed()))
assert.True(t, res.GetStatus(nil).IsFailed())
assert.False(t, res.GetStatus(nil).IsPassed())
assert.Equal(t, deployment.GetID(), opaSessionObj.ResourcesResult[deployment.GetID()].ResourceID)
opap.updateResults()
res = opaSessionObj.ResourcesResult[deployment.GetID()]
assert.Equal(t, 2, len(res.ListControls(nil).All()))
assert.Equal(t, 2, len(res.ListControls(nil).All()))
assert.Equal(t, 1, len(res.ListControls(nil).Failed()))
assert.Equal(t, 1, len(res.ListControls(nil).Passed()))
assert.Equal(t, 2, len(res.ListControlsIDs(nil).All()))
assert.Equal(t, 2, len(res.ListControlsIDs(nil).All()))
assert.Equal(t, 1, len(res.ListControlsIDs(nil).Failed()))
assert.Equal(t, 1, len(res.ListControlsIDs(nil).Passed()))
assert.True(t, res.GetStatus(nil).IsFailed())
assert.False(t, res.GetStatus(nil).IsPassed())
assert.Equal(t, deployment.GetID(), opaSessionObj.ResourcesResult[deployment.GetID()].ResourceID)
// test resource counters
summaryDetails := opaSessionObj.Report.SummaryDetails
assert.Equal(t, 1, summaryDetails.NumberOf().All())
assert.Equal(t, 1, summaryDetails.NumberOf().Failed())
assert.Equal(t, 0, summaryDetails.NumberOf().Excluded())
assert.Equal(t, 0, summaryDetails.NumberOf().Passed())
assert.Equal(t, 1, summaryDetails.NumberOfResources().All())
assert.Equal(t, 1, summaryDetails.NumberOfResources().Failed())
assert.Equal(t, 0, summaryDetails.NumberOfResources().Excluded())
assert.Equal(t, 0, summaryDetails.NumberOfResources().Passed())
// test resource listing
assert.Equal(t, 1, len(summaryDetails.ListResourcesIDs().All()))
@@ -112,19 +112,19 @@ func TestProcessResourcesResult(t *testing.T) {
assert.Equal(t, 0, len(summaryDetails.ListResourcesIDs().Passed()))
// test control listing
assert.Equal(t, len(res.ListControls(nil).All()), len(summaryDetails.ListControls().All()))
assert.Equal(t, len(res.ListControls(nil).Passed()), len(summaryDetails.ListControls().Passed()))
assert.Equal(t, len(res.ListControls(nil).Failed()), len(summaryDetails.ListControls().Failed()))
assert.Equal(t, len(res.ListControls(nil).Excluded()), len(summaryDetails.ListControls().Excluded()))
assert.Equal(t, len(res.ListControlsIDs(nil).All()), len(summaryDetails.ListControls().All()))
assert.Equal(t, len(res.ListControlsIDs(nil).Passed()), len(summaryDetails.ListControls().Passed()))
assert.Equal(t, len(res.ListControlsIDs(nil).Failed()), len(summaryDetails.ListControls().Failed()))
assert.Equal(t, len(res.ListControlsIDs(nil).Excluded()), len(summaryDetails.ListControls().Excluded()))
assert.True(t, summaryDetails.GetStatus().IsFailed())
opaSessionObj.Exceptions = []armotypes.PostureExceptionPolicy{*mocks.MockExceptionAllKinds(&armotypes.PosturePolicy{FrameworkName: frameworks[0].Name})}
opap.updateResults()
res = opaSessionObj.ResourcesResult[deployment.GetID()]
assert.Equal(t, 2, len(res.ListControls(nil).All()))
assert.Equal(t, 1, len(res.ListControls(nil).Excluded()))
assert.Equal(t, 1, len(res.ListControls(nil).Passed()))
assert.Equal(t, 2, len(res.ListControlsIDs(nil).All()))
assert.Equal(t, 1, len(res.ListControlsIDs(nil).Excluded()))
assert.Equal(t, 1, len(res.ListControlsIDs(nil).Passed()))
assert.True(t, res.GetStatus(nil).IsExcluded())
assert.False(t, res.GetStatus(nil).IsPassed())
assert.False(t, res.GetStatus(nil).IsFailed())
+2
View File
@@ -24,6 +24,8 @@ func ConvertFrameworksToSummaryDetails(summaryDetails *reportsummary.SummaryDeta
id := frameworks[i].Controls[j].ControlID
c := reportsummary.ControlSummary{
Name: frameworks[i].Controls[j].Name,
ControlID: id,
ScoreFactor: frameworks[i].Controls[j].BaseScore,
Description: frameworks[i].Controls[j].Description,
Remediation: frameworks[i].Controls[j].Remediation,
}
+41 -47
View File
@@ -30,7 +30,7 @@ func (resultsHandler *ResultsHandler) HandleResults(scanInfo *cautils.ScanInfo)
opaSessionObj := <-*resultsHandler.opaSessionObj
resultsHandler.reportV2ToV1(opaSessionObj)
reportV2ToV1(opaSessionObj)
resultsHandler.printerObj.ActionPrint(opaSessionObj)
@@ -61,7 +61,7 @@ func CalculatePostureScore(postureReport *reporthandling.PostureReport) float32
return (float32(len(allResources)) - float32(len(failedResources))) / float32(len(allResources))
}
func (resultsHandler *ResultsHandler) reportV2ToV1(opaSessionObj *cautils.OPASessionObj) {
func reportV2ToV1(opaSessionObj *cautils.OPASessionObj) {
opaSessionObj.PostureReport.ReportID = opaSessionObj.Report.ReportID
opaSessionObj.PostureReport.CustomerGUID = opaSessionObj.Report.CustomerGUID
@@ -75,9 +75,6 @@ func (resultsHandler *ResultsHandler) reportV2ToV1(opaSessionObj *cautils.OPASes
fwv1 := reporthandling.FrameworkReport{}
fwv1.Name = fwv2.GetName()
fwv1.Score = fwv2.GetScore()
fwv1.WarningResources = fwv2.NumberOf().Excluded()
fwv1.FailedResources = fwv2.NumberOf().Failed()
fwv1.TotalResources = fwv2.NumberOf().All()
fwv1.ControlReports = append(fwv1.ControlReports, controlReportV2ToV1(opaSessionObj, fwv2.GetName(), fwv2.Controls)...)
frameworks = append(frameworks, fwv1)
@@ -87,9 +84,6 @@ func (resultsHandler *ResultsHandler) reportV2ToV1(opaSessionObj *cautils.OPASes
fwv1 := reporthandling.FrameworkReport{}
fwv1.Name = ""
fwv1.Score = 0
fwv1.WarningResources = opaSessionObj.Report.SummaryDetails.NumberOf().Excluded()
fwv1.FailedResources = opaSessionObj.Report.SummaryDetails.NumberOf().Failed()
fwv1.TotalResources = opaSessionObj.Report.SummaryDetails.NumberOf().All()
fwv1.ControlReports = append(fwv1.ControlReports, controlReportV2ToV1(opaSessionObj, "", opaSessionObj.Report.SummaryDetails.Controls)...)
frameworks = append(frameworks, fwv1)
@@ -97,18 +91,15 @@ func (resultsHandler *ResultsHandler) reportV2ToV1(opaSessionObj *cautils.OPASes
for f := range frameworks {
// // set exceptions
// exceptions.SetFrameworkExceptions(&opap.PostureReport.FrameworkReports[f], opap.Exceptions, cautils.ClusterName)
// exceptions.SetFrameworkExceptions(frameworks, opap.Exceptions, cautils.ClusterName)
// // set counters
// reporthandling.SetUniqueResourcesCounter(&opap.PostureReport.FrameworkReports[f])
// set counters
reporthandling.SetUniqueResourcesCounter(&frameworks[f])
// set default score
reporthandling.SetDefaultScore(&frameworks[f])
}
// vv, _ := json.Marshal(frameworks)
// fmt.Printf("\n\n\n\n%s\n\n\n\n", vv)
// update score
scoreutil := score.NewScore(opaSessionObj.AllResources)
scoreutil.Calculate(frameworks)
@@ -137,14 +128,13 @@ func (resultsHandler *ResultsHandler) reportV2ToV1(opaSessionObj *cautils.OPASes
func controlReportV2ToV1(opaSessionObj *cautils.OPASessionObj, frameworkName string, controls map[string]reportsummary.ControlSummary) []reporthandling.ControlReport {
controlRepors := []reporthandling.ControlReport{}
for _, crv2 := range controls {
for controlID, crv2 := range controls {
crv1 := reporthandling.ControlReport{}
crv1.ControlID = crv2.GetID()
crv1.ControlID = controlID
crv1.BaseScore = crv2.ScoreFactor
crv1.Name = crv2.GetName()
crv1.Score = crv2.GetScore()
crv1.WarningResources = crv2.NumberOf().Excluded()
crv1.FailedResources = crv2.NumberOf().Failed()
crv1.TotalResources = crv2.NumberOf().All()
// TODO - add fields
crv1.Description = crv2.Description
@@ -153,43 +143,47 @@ func controlReportV2ToV1(opaSessionObj *cautils.OPASessionObj, frameworkName str
rulesv1 := map[string]reporthandling.RuleReport{} // ruleName: rules
for _, resourceID := range crv2.List().All() {
if resource, ok := opaSessionObj.ResourcesResult[resourceID]; ok {
for _, rulev2 := range resource.ListRules() {
if result, ok := opaSessionObj.ResourcesResult[resourceID]; ok {
for _, rulev2 := range result.ListRulesOfControl(crv2.GetID(), "") {
// add to rule
if _, ok := rulesv1[rulev2.GetName()]; !ok {
rulesv1[rulev2.GetName()] = reporthandling.RuleReport{}
rulesv1[rulev2.GetName()] = reporthandling.RuleReport{
Name: rulev2.GetName(),
}
}
}
}
}
for _, resourceID := range crv2.List().All() {
if result, ok := opaSessionObj.ResourcesResult[resourceID]; ok {
for _, rulev2 := range result.ListRulesOfControl(crv2.GetID(), "") {
rulev1 := rulesv1[rulev2.GetName()]
rulev1.Name = rulev2.GetName()
status := rulev2.GetStatus(&v1.Filters{FrameworkNames: []string{frameworkName}})
if status.IsFailed() || status.IsExcluded() {
// rule response
ruleResponse := reporthandling.RuleResponse{}
ruleResponse.Rulename = rulev2.GetName()
for i := range rulev2.Paths {
ruleResponse.FailedPaths = append(ruleResponse.FailedPaths, rulev2.Paths[i].FailedPath)
}
ruleResponse.RuleStatus = string(status.Status())
if len(rulev2.Exception) > 0 {
ruleResponse.Exception = &rulev2.Exception[0]
}
if fullRessource, ok := opaSessionObj.AllResources[resourceID]; ok {
ruleResponse.AlertObject.K8SApiObjects = append(ruleResponse.AlertObject.K8SApiObjects, fullRessource.GetObject())
}
rulev1.RuleResponses = append(rulev1.RuleResponses, ruleResponse)
// rule response
ruleResponse := reporthandling.RuleResponse{}
ruleResponse.Rulename = rulev2.GetName()
for i := range rulev2.Paths {
ruleResponse.FailedPaths = append(ruleResponse.FailedPaths, rulev2.Paths[i].FailedPath)
}
ruleResponse.RuleStatus = string(rulev2.GetStatus(&v1.Filters{FrameworkNames: []string{frameworkName}}).Status())
if len(rulev2.Exception) > 0 {
ruleResponse.Exception = &rulev2.Exception[0]
}
if fullRessource, ok := opaSessionObj.AllResources[resourceID]; ok {
ruleResponse.AlertObject.K8SApiObjects = append(ruleResponse.AlertObject.K8SApiObjects, fullRessource.GetObject())
}
rulev1.ResourceUniqueCounter.TotalResources++
if rulev2.GetStatus(&v1.Filters{FrameworkNames: []string{frameworkName}}).IsFailed() {
rulev1.ResourceUniqueCounter.FailedResources++
} else if rulev2.GetStatus(&v1.Filters{FrameworkNames: []string{frameworkName}}).IsExcluded() {
rulev1.ResourceUniqueCounter.WarningResources++
} else {
rulev1.ResourceUniqueCounter.TotalResources++
}
rulev1.RuleResponses = append(rulev1.RuleResponses, ruleResponse)
rulev1.ListInputKinds = append(rulev1.ListInputKinds, resourceID)
rulesv1[rulev2.GetName()] = rulev1
}
}
File diff suppressed because one or more lines are too long