From 0cac7cb1a5768f6dc811fdf900cc6b518a883b80 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 21 Dec 2021 09:23:38 +0200 Subject: [PATCH 1/9] fix kubeletcmd for marshalling --- go.mod | 2 +- go.sum | 4 ++-- hostsensorutils/hostsensorgetfrompod.go | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4f903f82..ac4d14f5 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/armosec/armoapi-go v0.0.23 - github.com/armosec/k8s-interface v0.0.44 + github.com/armosec/k8s-interface v0.0.45 github.com/armosec/opa-utils v0.0.68 github.com/armosec/rbac-utils v0.0.9 github.com/armosec/utils-go v0.0.3 diff --git a/go.sum b/go.sum index b12f132f..21f29534 100644 --- a/go.sum +++ b/go.sum @@ -89,8 +89,8 @@ github.com/armosec/armoapi-go v0.0.23/go.mod h1:iaVVGyc23QGGzAdv4n+szGQg3Rbpixn9 github.com/armosec/k8s-interface v0.0.8/go.mod h1:xxS+V5QT3gVQTwZyAMMDrYLWGrfKOpiJ7Jfhfa0w9sM= github.com/armosec/k8s-interface v0.0.37/go.mod h1:vHxGWqD/uh6+GQb9Sqv7OGMs+Rvc2dsFVc0XtgRh1ZU= github.com/armosec/k8s-interface v0.0.43/go.mod h1:vHxGWqD/uh6+GQb9Sqv7OGMs+Rvc2dsFVc0XtgRh1ZU= -github.com/armosec/k8s-interface v0.0.44 h1:UsmVPo0GyyBuTVIP+F8rgHpEaZqQE7sUYjj1DT3kHmc= -github.com/armosec/k8s-interface v0.0.44/go.mod h1:vHxGWqD/uh6+GQb9Sqv7OGMs+Rvc2dsFVc0XtgRh1ZU= +github.com/armosec/k8s-interface v0.0.45 h1:LnncyBfarM29vXB0JwteSiLphVsiu7ONrNmmWSi377M= +github.com/armosec/k8s-interface v0.0.45/go.mod h1:vHxGWqD/uh6+GQb9Sqv7OGMs+Rvc2dsFVc0XtgRh1ZU= github.com/armosec/opa-utils v0.0.64/go.mod h1:6tQP8UDq2EvEfSqh8vrUdr/9QVSCG4sJfju1SXQOn4c= github.com/armosec/opa-utils v0.0.68 h1:qsmDjEVPdfJ6+hlSeoBZF5sgeR63HdtPfpVQIg0r1G0= github.com/armosec/opa-utils v0.0.68/go.mod h1:NVJEQ7695VyylqC7dHw2nD7MHIGJrRIXLgyej1onF64= diff --git a/hostsensorutils/hostsensorgetfrompod.go b/hostsensorutils/hostsensorgetfrompod.go index e6e9f480..2f77ba70 100644 --- a/hostsensorutils/hostsensorgetfrompod.go +++ b/hostsensorutils/hostsensorgetfrompod.go @@ -80,6 +80,13 @@ func (hsh *HostSensorHandler) sendAllPodsHTTPGETRequest(path, requestKind string hostSensorDataEnvelope.SetApiVersion(k8sinterface.JoinGroupVersion(hostsensor.GroupHostSensor, hostsensor.Version)) hostSensorDataEnvelope.SetKind(requestKind) hostSensorDataEnvelope.SetName(podList[podName]) + if requestKind == "KubeletCommandLine" { + data := map[string]interface{}{"fullCommand": string(resBytes)} + resBytesMarshal, err := json.Marshal(data) + if err == nil { + resBytes = resBytesMarshal + } + } hostSensorDataEnvelope.SetData(resBytes) res = append(res, hostSensorDataEnvelope) } From a1c34646f1ca3f30b0300f84661b79d37c20c95c Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 21 Dec 2021 13:34:31 +0200 Subject: [PATCH 2/9] waning for host sensor --- clihandler/initcliutils.go | 3 +- hostsensorutils/hostsensorgetfrompod.go | 44 ++++++++++++++++++++----- resourcehandler/k8sresources.go | 2 +- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/clihandler/initcliutils.go b/clihandler/initcliutils.go index 55a35b4e..9521d937 100644 --- a/clihandler/initcliutils.go +++ b/clihandler/initcliutils.go @@ -58,11 +58,12 @@ func getHostSensorHandler(scanInfo *cautils.ScanInfo, k8s *k8sinterface.Kubernet // we need to determined which controls needs host sensor if scanInfo.HostSensor.Get() == nil && hasHostSensorControls { scanInfo.HostSensor.SetBool(askUserForHostSensor()) + cautils.WarningDisplay(os.Stdout, "Warning: K8S nodes scanning is disabled. This is required to collect valuable data for certain controls. You can enable it using the --enable-host-scan flag\n") } if hostSensorVal := scanInfo.HostSensor.Get(); hostSensorVal != nil && *hostSensorVal { hostSensorHandler, err := hostsensorutils.NewHostSensorHandler(k8s) if err != nil { - glog.Errorf("failed to create host sensor: %v", err) + cautils.WarningDisplay(os.Stdout, fmt.Sprintf("Warning: failed to create host sensor: %v\n", err.Error())) return &hostsensorutils.HostSensorHandlerMock{} } return hostSensorHandler diff --git a/hostsensorutils/hostsensorgetfrompod.go b/hostsensorutils/hostsensorgetfrompod.go index 2f77ba70..c82f3d33 100644 --- a/hostsensorutils/hostsensorgetfrompod.go +++ b/hostsensorutils/hostsensorgetfrompod.go @@ -3,6 +3,7 @@ package hostsensorutils import ( "encoding/json" "fmt" + "strings" "sync" "github.com/armosec/k8s-interface/k8sinterface" @@ -80,13 +81,6 @@ func (hsh *HostSensorHandler) sendAllPodsHTTPGETRequest(path, requestKind string hostSensorDataEnvelope.SetApiVersion(k8sinterface.JoinGroupVersion(hostsensor.GroupHostSensor, hostsensor.Version)) hostSensorDataEnvelope.SetKind(requestKind) hostSensorDataEnvelope.SetName(podList[podName]) - if requestKind == "KubeletCommandLine" { - data := map[string]interface{}{"fullCommand": string(resBytes)} - resBytesMarshal, err := json.Marshal(data) - if err == nil { - resBytes = resBytesMarshal - } - } hostSensorDataEnvelope.SetData(resBytes) res = append(res, hostSensorDataEnvelope) } @@ -112,7 +106,41 @@ func (hsh *HostSensorHandler) GetLinuxSecurityHardeningStatus() ([]hostsensor.Ho // return list of KubeletCommandLine func (hsh *HostSensorHandler) GetKubeletCommandLine() ([]hostsensor.HostSensorDataEnvelope, error) { // loop over pods and port-forward it to each of them - return hsh.sendAllPodsHTTPGETRequest("/kubeletCommandLine", "KubeletCommandLine") + resps, err := hsh.sendAllPodsHTTPGETRequest("/kubeletCommandLine", "KubeletCommandLine") + if err != nil { + return resps, err + } + for resp := range resps { + data := makeCmdLineMap(string(resps[resp].Data)) + resBytesMarshal, err := json.Marshal(data) + // TODO catch error + if err == nil { + resps[resp].Data = json.RawMessage(resBytesMarshal) + } + } + + return resps, nil + +} + +func makeCmdLineMap(fullCommand string) map[string]interface{} { + + commands := strings.Split(fullCommand, " ") + if len(commands) < 1 { + return nil + } + command := commands[0] + var cmdMap = make(map[string]interface{}) + cmdMap["command"] = command + for _, cmd := range commands { + splitted := strings.Split(cmd, "=") + if len(splitted) == 2 { + if strings.HasPrefix(splitted[0], "--") { + cmdMap[splitted[0][2:]] = splitted[1] + } + } + } + return cmdMap } // return list of diff --git a/resourcehandler/k8sresources.go b/resourcehandler/k8sresources.go index 4bcc499f..5e56a696 100644 --- a/resourcehandler/k8sresources.go +++ b/resourcehandler/k8sresources.go @@ -59,7 +59,7 @@ func (k8sHandler *K8sResourceHandler) GetResources(frameworks []reporthandling.F return k8sResourcesMap, allResources, err } if err := k8sHandler.collectHostResources(allResources, k8sResourcesMap); err != nil { - return k8sResourcesMap, allResources, err + cautils.WarningDisplay(os.Stdout, "Warning: failed to collect host sensor resources\n") } if err := k8sHandler.collectRbacResources(allResources); err != nil { From 35682bf5b858d41c9265817b59c25259b1db43b9 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 21 Dec 2021 19:02:16 +0200 Subject: [PATCH 3/9] pull regoes from dev --- cautils/getter/downloadreleasedpolicy.go | 2 +- hostsensorutils/hostsensorgetfrompod.go | 2 +- opaprocessor/processorhandler.go | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cautils/getter/downloadreleasedpolicy.go b/cautils/getter/downloadreleasedpolicy.go index 9b6f9f86..75ca0529 100644 --- a/cautils/getter/downloadreleasedpolicy.go +++ b/cautils/getter/downloadreleasedpolicy.go @@ -18,7 +18,7 @@ type DownloadReleasedPolicy struct { func NewDownloadReleasedPolicy() *DownloadReleasedPolicy { return &DownloadReleasedPolicy{ - gs: gitregostore.NewDefaultGitRegoStore(-1), + gs: gitregostore.InitGitRegoStore("https://api.github.com/repos", "armosec", "regolibrary", "git/trees", "", "dev", -1), } } diff --git a/hostsensorutils/hostsensorgetfrompod.go b/hostsensorutils/hostsensorgetfrompod.go index 69d81301..30519bd5 100644 --- a/hostsensorutils/hostsensorgetfrompod.go +++ b/hostsensorutils/hostsensorgetfrompod.go @@ -157,7 +157,7 @@ func (hsh *HostSensorHandler) GetOsReleaseFile() ([]hostsensor.HostSensorDataEnv // return list of func (hsh *HostSensorHandler) GetKubeletConfigurations() ([]hostsensor.HostSensorDataEnvelope, error) { // loop over pods and port-forward it to each of them - res, err := hsh.sendAllPodsHTTPGETRequest("/kubeletConfigurations", "KubeletConfigurations") // empty kind, will be overridden + res, err := hsh.sendAllPodsHTTPGETRequest("/kubeletConfigurations", "KubeletConfiguration") // empty kind, will be overridden for resIdx := range res { jsonBytes, err := yaml.YAMLToJSON(res[resIdx].Data) if err != nil { diff --git a/opaprocessor/processorhandler.go b/opaprocessor/processorhandler.go index 7a320b92..6015be54 100644 --- a/opaprocessor/processorhandler.go +++ b/opaprocessor/processorhandler.go @@ -171,7 +171,6 @@ func (opap *OPAProcessor) processRule(rule *reporthandling.PolicyRule) (*reporth } inputRawResources := workloadinterface.ListMetaToMap(inputResources) - ruleReport, err := opap.runOPAOnSingleRule(rule, inputRawResources, ruleData) if err != nil { // ruleReport.RuleStatus.Status = reporthandling.StatusFailed From 972793b98a7b0faa5915e7af5a83380716876354 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 21 Dec 2021 20:27:23 +0200 Subject: [PATCH 4/9] print json --- opaprocessor/processorhandler.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/opaprocessor/processorhandler.go b/opaprocessor/processorhandler.go index 6015be54..6a03d967 100644 --- a/opaprocessor/processorhandler.go +++ b/opaprocessor/processorhandler.go @@ -2,6 +2,7 @@ package opaprocessor import ( "context" + "encoding/json" "fmt" "time" @@ -171,6 +172,9 @@ func (opap *OPAProcessor) processRule(rule *reporthandling.PolicyRule) (*reporth } inputRawResources := workloadinterface.ListMetaToMap(inputResources) + jsonStr, _ := json.Marshal(inputRawResources) + fmt.Println(jsonStr) + ruleReport, err := opap.runOPAOnSingleRule(rule, inputRawResources, ruleData) if err != nil { // ruleReport.RuleStatus.Status = reporthandling.StatusFailed From cfa3993b79dfd8fdf0dbf0631af304f928d56f31 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 21 Dec 2021 20:31:12 +0200 Subject: [PATCH 5/9] print json --- opaprocessor/processorhandler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opaprocessor/processorhandler.go b/opaprocessor/processorhandler.go index 6a03d967..374f1923 100644 --- a/opaprocessor/processorhandler.go +++ b/opaprocessor/processorhandler.go @@ -173,7 +173,7 @@ func (opap *OPAProcessor) processRule(rule *reporthandling.PolicyRule) (*reporth inputRawResources := workloadinterface.ListMetaToMap(inputResources) jsonStr, _ := json.Marshal(inputRawResources) - fmt.Println(jsonStr) + fmt.Println(string(jsonStr)) ruleReport, err := opap.runOPAOnSingleRule(rule, inputRawResources, ruleData) if err != nil { From ad94ac7595e3ddbb8881f958ea07af70e6c71359 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Wed, 22 Dec 2021 08:29:35 +0200 Subject: [PATCH 6/9] rm json print --- opaprocessor/processorhandler.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/opaprocessor/processorhandler.go b/opaprocessor/processorhandler.go index 374f1923..7a320b92 100644 --- a/opaprocessor/processorhandler.go +++ b/opaprocessor/processorhandler.go @@ -2,7 +2,6 @@ package opaprocessor import ( "context" - "encoding/json" "fmt" "time" @@ -172,8 +171,6 @@ func (opap *OPAProcessor) processRule(rule *reporthandling.PolicyRule) (*reporth } inputRawResources := workloadinterface.ListMetaToMap(inputResources) - jsonStr, _ := json.Marshal(inputRawResources) - fmt.Println(string(jsonStr)) ruleReport, err := opap.runOPAOnSingleRule(rule, inputRawResources, ruleData) if err != nil { From e49499f08574cbfd21182b83530224d389b2c5bd Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Mon, 27 Dec 2021 08:45:50 +0200 Subject: [PATCH 7/9] use regoes from master --- cautils/getter/downloadreleasedpolicy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cautils/getter/downloadreleasedpolicy.go b/cautils/getter/downloadreleasedpolicy.go index 75ca0529..9b6f9f86 100644 --- a/cautils/getter/downloadreleasedpolicy.go +++ b/cautils/getter/downloadreleasedpolicy.go @@ -18,7 +18,7 @@ type DownloadReleasedPolicy struct { func NewDownloadReleasedPolicy() *DownloadReleasedPolicy { return &DownloadReleasedPolicy{ - gs: gitregostore.InitGitRegoStore("https://api.github.com/repos", "armosec", "regolibrary", "git/trees", "", "dev", -1), + gs: gitregostore.NewDefaultGitRegoStore(-1), } } From accd80eda8c8da6d7aefa1ec5fd936085b307850 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 28 Dec 2021 09:07:50 +0200 Subject: [PATCH 8/9] rm cmdline map --- go.mod | 4 ++-- go.sum | 7 ++++--- hostsensorutils/hostsensorgetfrompod.go | 24 ++---------------------- 3 files changed, 8 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 72545313..ce063198 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/armosec/kubescape go 1.17 require ( - github.com/armosec/armoapi-go v0.0.23 + github.com/armosec/armoapi-go v0.0.40 github.com/armosec/k8s-interface v0.0.50 - github.com/armosec/opa-utils v0.0.75 + github.com/armosec/opa-utils v0.0.78 github.com/armosec/rbac-utils v0.0.9 github.com/armosec/utils-go v0.0.3 github.com/briandowns/spinner v1.18.0 diff --git a/go.sum b/go.sum index eea11167..525a97a2 100644 --- a/go.sum +++ b/go.sum @@ -84,15 +84,16 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armosec/armoapi-go v0.0.2/go.mod h1:vIK17yoKbJRQyZXWWLe3AqfqCRITxW8qmSkApyq5xFs= -github.com/armosec/armoapi-go v0.0.23 h1:jqoLIWM5CR7DCD9fpFgN0ePqtHvOCoZv/XzCwsUluJU= github.com/armosec/armoapi-go v0.0.23/go.mod h1:iaVVGyc23QGGzAdv4n+szGQg3Rbpixn9yQTU3qWRpaw= +github.com/armosec/armoapi-go v0.0.40 h1:KQRJXFqw95s6cV7HoGgw1x8qrRZ9eNVze//yQbo24Lk= +github.com/armosec/armoapi-go v0.0.40/go.mod h1:iaVVGyc23QGGzAdv4n+szGQg3Rbpixn9yQTU3qWRpaw= github.com/armosec/k8s-interface v0.0.8/go.mod h1:xxS+V5QT3gVQTwZyAMMDrYLWGrfKOpiJ7Jfhfa0w9sM= github.com/armosec/k8s-interface v0.0.37/go.mod h1:vHxGWqD/uh6+GQb9Sqv7OGMs+Rvc2dsFVc0XtgRh1ZU= github.com/armosec/k8s-interface v0.0.50 h1:iLPGI0j85vwKANr9QDAnba4Efjg3DyIJg15jRJdvOnc= github.com/armosec/k8s-interface v0.0.50/go.mod h1:vHxGWqD/uh6+GQb9Sqv7OGMs+Rvc2dsFVc0XtgRh1ZU= github.com/armosec/opa-utils v0.0.64/go.mod h1:6tQP8UDq2EvEfSqh8vrUdr/9QVSCG4sJfju1SXQOn4c= -github.com/armosec/opa-utils v0.0.75 h1:GBI3K18xc3WXJHIorIu4bGNAsfMYHUc1x7zueDz2ZbY= -github.com/armosec/opa-utils v0.0.75/go.mod h1:L7d+uiIIXAZ3LEyKtmEIbMcI1hWgWaXGpn5zVCqzwSU= +github.com/armosec/opa-utils v0.0.78 h1:wFkVqJ1vEftn3E1hHdUfKlp5xHgof616ljyKKebuNkI= +github.com/armosec/opa-utils v0.0.78/go.mod h1:ZOXYVTtuyrV4TldcfbzgRqP6F9Drlf4hB0zr210OXgM= github.com/armosec/rbac-utils v0.0.1/go.mod h1:pQ8CBiij8kSKV7aeZm9FMvtZN28VgA7LZcYyTWimq40= github.com/armosec/rbac-utils v0.0.9 h1:rIOWp4K7BELUNX32ktSjVbb8d/0SpH7W76W6Tf+8rzw= github.com/armosec/rbac-utils v0.0.9/go.mod h1:Ex/IdGWhGv9HZq6Hs8N/ApzCKSIvpNe/ETqDfnuyah0= diff --git a/hostsensorutils/hostsensorgetfrompod.go b/hostsensorutils/hostsensorgetfrompod.go index 30519bd5..906e7ca9 100644 --- a/hostsensorutils/hostsensorgetfrompod.go +++ b/hostsensorutils/hostsensorgetfrompod.go @@ -3,7 +3,6 @@ package hostsensorutils import ( "encoding/json" "fmt" - "strings" "sync" "github.com/armosec/k8s-interface/k8sinterface" @@ -110,7 +109,8 @@ func (hsh *HostSensorHandler) GetKubeletCommandLine() ([]hostsensor.HostSensorDa return resps, err } for resp := range resps { - data := makeCmdLineMap(string(resps[resp].Data)) + var data = make(map[string]interface{}) + data["fullCommand"] = string(resps[resp].Data) resBytesMarshal, err := json.Marshal(data) // TODO catch error if err == nil { @@ -122,26 +122,6 @@ func (hsh *HostSensorHandler) GetKubeletCommandLine() ([]hostsensor.HostSensorDa } -func makeCmdLineMap(fullCommand string) map[string]interface{} { - - commands := strings.Split(fullCommand, " ") - if len(commands) < 1 { - return nil - } - command := commands[0] - var cmdMap = make(map[string]interface{}) - cmdMap["command"] = command - for _, cmd := range commands { - splitted := strings.Split(cmd, "=") - if len(splitted) == 2 { - if strings.HasPrefix(splitted[0], "--") { - cmdMap[splitted[0][2:]] = splitted[1] - } - } - } - return cmdMap -} - // return list of func (hsh *HostSensorHandler) GetKernelVersion() ([]hostsensor.HostSensorDataEnvelope, error) { // loop over pods and port-forward it to each of them From 5f7391a76b228328376e3378ce20d6cb4be656b6 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 28 Dec 2021 09:20:05 +0200 Subject: [PATCH 9/9] stdout to stderror --- clihandler/initcliutils.go | 6 +++--- resourcehandler/k8sresources.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/clihandler/initcliutils.go b/clihandler/initcliutils.go index cc7ebb35..47c9bdfe 100644 --- a/clihandler/initcliutils.go +++ b/clihandler/initcliutils.go @@ -58,12 +58,12 @@ func getHostSensorHandler(scanInfo *cautils.ScanInfo, k8s *k8sinterface.Kubernet // we need to determined which controls needs host sensor if scanInfo.HostSensor.Get() == nil && hasHostSensorControls { scanInfo.HostSensor.SetBool(askUserForHostSensor()) - cautils.WarningDisplay(os.Stdout, "Warning: K8S nodes scanning is disabled. This is required to collect valuable data for certain controls. You can enable it using the --enable-host-scan flag\n") + cautils.WarningDisplay(os.Stderr, "Warning: Kubernetes cluster nodes scanning is disabled. This is required to collect valuable data for certain controls. You can enable it using the --enable-host-scan flag\n") } if hostSensorVal := scanInfo.HostSensor.Get(); hostSensorVal != nil && *hostSensorVal { hostSensorHandler, err := hostsensorutils.NewHostSensorHandler(k8s) if err != nil { - cautils.WarningDisplay(os.Stdout, fmt.Sprintf("Warning: failed to create host sensor: %v\n", err.Error())) + cautils.WarningDisplay(os.Stderr, fmt.Sprintf("Warning: failed to create host sensor: %v\n", err.Error())) return &hostsensorutils.HostSensorHandlerMock{} } return hostSensorHandler @@ -153,7 +153,7 @@ func setPolicyGetter(scanInfo *cautils.ScanInfo, customerGUID string) { func setDownloadReleasedPolicy(scanInfo *cautils.ScanInfo) { g := getter.NewDownloadReleasedPolicy() // download policy from github release if err := g.SetRegoObjects(); err != nil { // if failed to pull policy, fallback to cache - cautils.WarningDisplay(os.Stdout, "Warning: failed to get policies from github release, loading policies from cache\n") + cautils.WarningDisplay(os.Stderr, "Warning: failed to get policies from github release, loading policies from cache\n") scanInfo.PolicyGetter = getter.NewLoadPolicy(getDefaultFrameworksPaths()) } else { scanInfo.PolicyGetter = g diff --git a/resourcehandler/k8sresources.go b/resourcehandler/k8sresources.go index 3aa926ad..75528038 100644 --- a/resourcehandler/k8sresources.go +++ b/resourcehandler/k8sresources.go @@ -61,14 +61,14 @@ func (k8sHandler *K8sResourceHandler) GetResources(frameworks []reporthandling.F return k8sResourcesMap, allResources, err } if err := k8sHandler.collectHostResources(allResources, k8sResourcesMap); err != nil { - cautils.WarningDisplay(os.Stdout, "Warning: failed to collect host sensor resources\n") + cautils.WarningDisplay(os.Stderr, "Warning: failed to collect host sensor resources\n") } if err := k8sHandler.collectRbacResources(allResources); err != nil { - cautils.WarningDisplay(os.Stdout, "Warning: failed to collect rbac resources\n") + cautils.WarningDisplay(os.Stderr, "Warning: failed to collect rbac resources\n") } if err := getCloudProviderDescription(allResources, k8sResourcesMap); err != nil { - cautils.WarningDisplay(os.Stdout, fmt.Sprintf("Warning: %v\n", err.Error())) + cautils.WarningDisplay(os.Stderr, fmt.Sprintf("Warning: %v\n", err.Error())) } cautils.StopSpinner()