From 8a7511cecb9beb5b6e110322a17e71a036e9ca59 Mon Sep 17 00:00:00 2001 From: Vlad Klokun Date: Fri, 3 Jun 2022 19:35:33 +0300 Subject: [PATCH 01/35] chore: add maintenance message --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 65a9b6b8..4e40133a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/armosec/kubescape)](https://goreportcard.com/report/github.com/armosec/kubescape) +**WARNING: Kubescape is currently under maintenance, but we’ll be back soon. Thank you for your patience ;)** + Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer and image vulnerabilities scanning. Kubescape scans K8s clusters, YAML files, and HELM charts, detecting misconfigurations according to multiple frameworks (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) , [MITRE ATT&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), software vulnerabilities, and RBAC (role-based-access-control) violations at early stages of the CI/CD pipeline, calculates risk score instantly and shows risk trends over time. From 91d1ec6c2fc4eb6dd9a3249156b96ce730da128d Mon Sep 17 00:00:00 2001 From: Rotem Refael <48656234+rotemamsa@users.noreply.github.com> Date: Mon, 6 Jun 2022 13:30:22 +0300 Subject: [PATCH 02/35] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 4e40133a..65a9b6b8 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/armosec/kubescape)](https://goreportcard.com/report/github.com/armosec/kubescape) -**WARNING: Kubescape is currently under maintenance, but we’ll be back soon. Thank you for your patience ;)** - Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer and image vulnerabilities scanning. Kubescape scans K8s clusters, YAML files, and HELM charts, detecting misconfigurations according to multiple frameworks (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) , [MITRE ATT&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), software vulnerabilities, and RBAC (role-based-access-control) violations at early stages of the CI/CD pipeline, calculates risk score instantly and shows risk trends over time. From 57874f399bdb53c70406135bf53dc76d1375065f Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Mon, 25 Jul 2022 12:31:34 +0300 Subject: [PATCH 03/35] Update Makefile To support the new build process in homebrew, we are not using the submodules, hence, adding a dash to ignore an error when git submodule command fails --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1fd42de0..f45b5953 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ export CGO_ENABLED=1 # build and install libgit2 libgit2: - git submodule update --init --recursive + -git submodule update --init --recursive cd git2go; make install-static # go build tags From c8c3ab76d67f0885dc4c935e8a3e2e72415f8fd2 Mon Sep 17 00:00:00 2001 From: vladklokun Date: Mon, 22 Aug 2022 17:19:45 +0300 Subject: [PATCH 04/35] Add a feature request template --- .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 22e1e8a82f4ad665a508bf5250291d1a0b85b420 Mon Sep 17 00:00:00 2001 From: vladklokun Date: Mon, 22 Aug 2022 17:28:56 +0300 Subject: [PATCH 05/35] chore: Add a Bug Report issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..d1587865 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +# Describe the bug +A clear and concise description of what the bug is. + +# Environment +OS: the OS + version you’re running Kubescape on, e.g Ubuntu 22.04 LTS +Version: the version that Kubescape reports when you run `kubescape version` +``` +Your current version is: +``` + +# Steps To Reproduce +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +# Expected behavior +A clear and concise description of what you expected to happen. + +# Actual Behavior +A clear and concise description of what happened. If applicable, add screenshots to help explain your problem. + +# Additional context +Add any other context about the problem here. From 52c2b4e85423fdea24d84115421b102294320bff Mon Sep 17 00:00:00 2001 From: Prajapati omkar <72141037+prajapatiomkar@users.noreply.github.com> Date: Mon, 22 Aug 2022 20:53:31 +0530 Subject: [PATCH 06/35] Made changes in Readme file by adding discord link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa355e3a..ae5cec78 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Want to contribute? Want to discuss something? Have an issue? * Feel free to pick a task from the [roadmap](docs/roadmap.md) or suggest a feature of your own. [Contact us](MAINTAINERS.md) directly for more information :) * Open a issue, we are trying to respond within 48 hours -* [Join us](https://armosec.github.io/kubescape) in a discussion on our discord server! +* [Join us](https://discord.com/invite/WKZRaCtBxN) in a discussion on our discord server! [logo](https://armosec.github.io/kubescape/) ![discord](https://img.shields.io/discord/893048809884643379) From 307b7be28d67dffe3d4012374d7c6fb343eed086 Mon Sep 17 00:00:00 2001 From: NirmitSawant Date: Mon, 22 Aug 2022 21:06:26 +0530 Subject: [PATCH 07/35] Updated the correct link on the discord button --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae5cec78..cd6ed45f 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Want to contribute? Want to discuss something? Have an issue? * Open a issue, we are trying to respond within 48 hours * [Join us](https://discord.com/invite/WKZRaCtBxN) in a discussion on our discord server! -[logo](https://armosec.github.io/kubescape/) +[logo](https://discord.com/invite/WKZRaCtBxN) ![discord](https://img.shields.io/discord/893048809884643379) From eeb1d8bff7788e6cda9a99c730fd4609e0c1a2c4 Mon Sep 17 00:00:00 2001 From: OmAxiani0 Date: Mon, 22 Aug 2022 22:05:43 +0530 Subject: [PATCH 08/35] Added simple PR template --- .github/PULL_REQUEST_TEMPLATE.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..f486c8b0 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,12 @@ +## Describe your changes + +## Screenshots - If Any (Optional) + +## Issue ticket number and link + +## Checklist before requesting a review +- [ ] My code follows the style guidelines of this project +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have performed a self-review of my code +- [ ] If it is a core feature, I have added thorough tests. +- [ ] New and existing unit tests pass locally with my changes From 7a51b461781da495ffd50d6c2a7bbf9c85b8eeb0 Mon Sep 17 00:00:00 2001 From: Yash Hegde <120CH0007@nitrkl.ac.in> Date: Tue, 23 Aug 2022 00:29:18 +0530 Subject: [PATCH 09/35] Correction of grammatical errors --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index cd6ed45f..27adce48 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer and image vulnerabilities scanning. Kubescape scans K8s clusters, YAML files, and HELM charts, detecting misconfigurations according to multiple frameworks (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository), [MITRE ATT&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), software vulnerabilities, and RBAC (role-based-access-control) violations at early stages of the CI/CD pipeline, calculates risk score instantly and shows risk trends over time. -It became one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins’ precious time, effort, and resources. +It has became one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins’ precious time, effort, and resources. Kubescape integrates natively with other DevOps tools, including Jenkins, CircleCI, Github workflows, Prometheus, and Slack, and supports multi-cloud K8s deployments like EKS, GKE, and AKS.
@@ -49,7 +49,7 @@ kubescape scan --submit --enable-host-scan --verbose
-> Kubescape is an open source project, we welcome your feedback and ideas for improvement. We’re also aiming to collaborate with the Kubernetes community to help make the tests themselves more robust and complete as Kubernetes develops. +> Kubescape is an open source project. We welcome your feedback and ideas for improvement. We’re also aiming to collaborate with the Kubernetes community to help make the tests more robust and complete as Kubernetes develops.
@@ -58,15 +58,15 @@ kubescape scan --submit --enable-host-scan --verbose
-# Being part of the team +# Being a part of the team We invite you to our team! We are excited about this project and want to return the love we get. Want to contribute? Want to discuss something? Have an issue? * Feel free to pick a task from the [roadmap](docs/roadmap.md) or suggest a feature of your own. [Contact us](MAINTAINERS.md) directly for more information :) -* Open a issue, we are trying to respond within 48 hours -* [Join us](https://discord.com/invite/WKZRaCtBxN) in a discussion on our discord server! +* Open an issue, we are trying to respond within 48 hours +* [Join us](https://discord.com/invite/WKZRaCtBxN) in the discussion on our discord server! [logo](https://discord.com/invite/WKZRaCtBxN) ![discord](https://img.shields.io/discord/893048809884643379) @@ -203,7 +203,7 @@ kubescape scan *.yaml --submit kubescape scan https://github.com/armosec/kubescape --submit ``` -#### Display all scanned resources (including the resources who passed) +#### Display all scanned resources (including the resources which passed) ``` kubescape scan --verbose ``` @@ -243,7 +243,7 @@ kubescape scan --exceptions examples/exceptions/exclude-kube-namespaces.json ``` kubescape scan --submit ``` -> Kubescape will load the default values file +> Kubescape will load the default value file ### Offline/Air-gaped Environment Support @@ -263,11 +263,11 @@ kubescape download artifacts --output path/to/local/dir kubescape scan --use-artifacts-from path/to/local/dir ``` -#### Download a single artifacts +#### Download a single artifact -You can also download a single artifacts and scan with the `--use-from` flag +You can also download a single artifact and scan with the `--use-from` flag -1. Download and save in file, if file name not specified, will save in `~/.kubescape/.json` +1. Download and save in file, if file name is not specified, will save in `~/.kubescape/.json` ``` kubescape download framework nsa --output /path/nsa.json ``` @@ -402,13 +402,13 @@ You can use the samples files below to setup your VS code environment for buildi # Under the hood ## Technology -Kubescape based on [OPA engine](https://github.com/open-policy-agent/opa) and ARMO's posture controls. +Kubescape is based on [OPA engine](https://github.com/open-policy-agent/opa) and ARMO's posture controls. -The tools retrieves Kubernetes objects from the API server and runs a set of [rego's snippets](https://www.openpolicyagent.org/docs/latest/policy-language/) developed by [ARMO](https://www.armosec.io?utm_source=github&utm_medium=repository). +The tools retrieve Kubernetes objects from the API server and run a set of [rego's snippets](https://www.openpolicyagent.org/docs/latest/policy-language/) developed by [ARMO](https://www.armosec.io?utm_source=github&utm_medium=repository). -The results by default printed in a pretty "console friendly" manner, but they can be retrieved in JSON format for further processing. +The results by default are printed in a pretty "console friendly" manner, but they can be retrieved in JSON format for further processing. -Kubescape is an open source project, we welcome your feedback and ideas for improvement. We’re also aiming to collaborate with the Kubernetes community to help make the tests themselves more robust and complete as Kubernetes develops. +Kubescape is an open source project, we welcome your feedback and ideas for improvement. We’re also aiming to collaborate with the Kubernetes community to help make the tests more robust and complete as Kubernetes develops. ## Thanks to all the contributors ❤️ From 4b96ce4a542f92424f02b2f7148eb063680809e5 Mon Sep 17 00:00:00 2001 From: Rakshit Gondwal <98955085+rakshitgondwal@users.noreply.github.com> Date: Tue, 23 Aug 2022 02:36:21 +0530 Subject: [PATCH 10/35] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 27adce48..c4e8e678 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ -Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer and image vulnerabilities scanning. +Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer, and image vulnerabilities scanning. Kubescape scans K8s clusters, YAML files, and HELM charts, detecting misconfigurations according to multiple frameworks (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository), [MITRE ATT&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), software vulnerabilities, and RBAC (role-based-access-control) violations at early stages of the CI/CD pipeline, calculates risk score instantly and shows risk trends over time. -It has became one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins’ precious time, effort, and resources. +It became one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins precious time, effort, and resources. Kubescape integrates natively with other DevOps tools, including Jenkins, CircleCI, Github workflows, Prometheus, and Slack, and supports multi-cloud K8s deployments like EKS, GKE, and AKS.
@@ -87,7 +87,7 @@ Want to contribute? Want to discuss something? Have an issue? * [Scan Kubescape on an air-gapped environment (offline support)](https://youtu.be/IGXL9s37smM) * [Managing exceptions in the Kubescape SaaS version](https://youtu.be/OzpvxGmCR80) * [Configure and run customized frameworks](https://youtu.be/12Sanq_rEhs) -* Customize controls configurations. [Kubescape CLI](https://youtu.be/955psg6TVu4), [Kubescape SaaS](https://youtu.be/lIMVSVhH33o) +* Customize control configurations. [Kubescape CLI](https://youtu.be/955psg6TVu4), [Kubescape SaaS](https://youtu.be/lIMVSVhH33o)
Windows @@ -357,7 +357,7 @@ View Kubescape scan results directly in [Lens IDE](https://k8slens.dev/) using k ## VS code configuration samples -You can use the samples files below to setup your VS code environment for building and debugging purposes. +You can use the sample files below to setup your VS code environment for building and debugging purposes.
.vscode/settings.json @@ -402,7 +402,7 @@ You can use the samples files below to setup your VS code environment for buildi # Under the hood ## Technology -Kubescape is based on [OPA engine](https://github.com/open-policy-agent/opa) and ARMO's posture controls. +Kubescape is based on the [OPA engine](https://github.com/open-policy-agent/opa) and ARMO's posture controls. The tools retrieve Kubernetes objects from the API server and run a set of [rego's snippets](https://www.openpolicyagent.org/docs/latest/policy-language/) developed by [ARMO](https://www.armosec.io?utm_source=github&utm_medium=repository). From 12619f4f3b0339763de50d8a9cffb952c06af832 Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Tue, 23 Aug 2022 08:19:01 +0300 Subject: [PATCH 11/35] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4e8e678..a2a04a6a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer, and image vulnerabilities scanning. Kubescape scans K8s clusters, YAML files, and HELM charts, detecting misconfigurations according to multiple frameworks (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository), [MITRE ATT&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), software vulnerabilities, and RBAC (role-based-access-control) violations at early stages of the CI/CD pipeline, calculates risk score instantly and shows risk trends over time. -It became one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins precious time, effort, and resources. +It has became one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins precious time, effort, and resources. Kubescape integrates natively with other DevOps tools, including Jenkins, CircleCI, Github workflows, Prometheus, and Slack, and supports multi-cloud K8s deployments like EKS, GKE, and AKS.
From cf6ae51f76b95e548b2c01e8084ab0498aa82fc1 Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Tue, 23 Aug 2022 08:20:15 +0300 Subject: [PATCH 12/35] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a2a04a6a..57b46f33 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,8 @@ Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer, and image vulnerabilities scanning. Kubescape scans K8s clusters, YAML files, and HELM charts, detecting misconfigurations according to multiple frameworks (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository), [MITRE ATT&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), software vulnerabilities, and RBAC (role-based-access-control) violations at early stages of the CI/CD pipeline, calculates risk score instantly and shows risk trends over time. -It has became one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins precious time, effort, and resources. + +It has become one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins precious time, effort, and resources. Kubescape integrates natively with other DevOps tools, including Jenkins, CircleCI, Github workflows, Prometheus, and Slack, and supports multi-cloud K8s deployments like EKS, GKE, and AKS.
From 240971172df325d3ba527c0a92ac507fe089ceac Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Tue, 23 Aug 2022 08:28:04 +0300 Subject: [PATCH 13/35] Requesting PRs should be opened against the dev branch --- .github/PULL_REQUEST_TEMPLATE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f486c8b0..f357279b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -10,3 +10,5 @@ - [ ] I have performed a self-review of my code - [ ] If it is a core feature, I have added thorough tests. - [ ] New and existing unit tests pass locally with my changes + +**Please opne the PR agains the `dev` branch (Unless the PR contains only documentation changes)** From b2763b1f4f16d1d59ae4c7420471584fafd66a7d Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Tue, 23 Aug 2022 15:54:22 +0530 Subject: [PATCH 14/35] Fixed typo --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f357279b..8d977ebe 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,4 +11,4 @@ - [ ] If it is a core feature, I have added thorough tests. - [ ] New and existing unit tests pass locally with my changes -**Please opne the PR agains the `dev` branch (Unless the PR contains only documentation changes)** +**Please open the PR agains the `dev` branch (Unless the PR contains only documentation changes)** From 4becfc6b885caf49c785d033a8aff9c9c9ee50b2 Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Tue, 23 Aug 2022 13:28:40 +0300 Subject: [PATCH 15/35] Update PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8d977ebe..b2d8493c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,4 +11,4 @@ - [ ] If it is a core feature, I have added thorough tests. - [ ] New and existing unit tests pass locally with my changes -**Please open the PR agains the `dev` branch (Unless the PR contains only documentation changes)** +**Please open the PR against the `dev` branch (Unless the PR contains only documentation changes)** From 23d44aef7ef0a2d6e77c799e704a4b8cc8da1423 Mon Sep 17 00:00:00 2001 From: Asim Bhatta Date: Tue, 23 Aug 2022 16:22:06 +0545 Subject: [PATCH 16/35] Edited few words --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f228a7ac..09450c91 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ When contributing, we categorize contributions into two: If you have a small change, feel free to fire up a Pull Request. When planning a bigger change, please first discuss the change you wish to make via issue, -email, or any other method with the owners of this repository before making a change. Most likely your changes or features are great, but sometimes we might already going to this direction (or the exact opposite ;-) ) and we don't want to waste your time. +email, or any other method with the owners of this repository before making a change. Most likely your changes or features are great, but sometimes we might be already going to this direction (or the exact opposite ;-) ) and we don't want to waste your time. Please note we have a code of conduct, please follow it in all your interactions with the project. @@ -55,12 +55,12 @@ advances * Other conduct which could reasonably be considered inappropriate in a professional setting -We will distance those who are constantly adhere to unacceptable behavior. +We will distance those who are constantly adhering to unacceptable behavior. ### Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in +behavior and are expected to take appropriate and fair corrective actions in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or From a45283b128036d628e1addc366fed3c99fc8aa8a Mon Sep 17 00:00:00 2001 From: Asim Bhatta Date: Tue, 23 Aug 2022 17:39:43 +0545 Subject: [PATCH 17/35] Edited here as well --- docs/proposals/container-image-vulnerability-adaptor.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/proposals/container-image-vulnerability-adaptor.md b/docs/proposals/container-image-vulnerability-adaptor.md index dce83f45..93a33870 100644 --- a/docs/proposals/container-image-vulnerability-adaptor.md +++ b/docs/proposals/container-image-vulnerability-adaptor.md @@ -7,11 +7,11 @@ source #287 ### Big picture * Kubescape team is planning to create controls which take into account image vulnerabilities, example: looking for public internet facing workloads with critical vulnerabilities. These are seriously effecting the security health of a cluster and therefore we think it is important to cover it. We think that most container registries are/will support image scanning like Harbor and therefore the ability to get information from them is important. -* There are information in the image repository which is important for existing controls as well. They are incomplete without it, example see this issue: Non-root containers check is broken #19 . These are not necessarily image vulnerability related. Can be information in the image manifest (like the issue before), but it can be the image BOM related. +* There are information in the image repository which is important for existing controls as well. They are incomplete without it, example see this issue: Non-root containers check is broken #19. These are not necessarily image vulnerability related. Can be information in the image manifest (like the issue before), but it can be the image BOM related. ### Relation to this proposal -There are multiple changes and design decisions needs to be made before Kubescape will support the before outlined controls. However, a focal point the whole picutre is the ability to access vulnerability databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, some major players are already do. Since there is no a single API available which all of these data sources support it is important to create an adaption layer within Kubescape so different datasources can serve Kubescape's goals. +There are multiple changes and design decisions needs to be made before Kubescape will support the before outlined controls. However, a focal point the whole picture is the ability to access vulnerability databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, some major players are already do. Since there is not a single API available which all of these data sources support it is important to create an adaption layer within Kubescape so different datasources can serve Kubescape's goals. ## High level design of Kubescape From bfdf24afb4f3ae285014cb0e19051f865cc80c4f Mon Sep 17 00:00:00 2001 From: Asim Bhatta Date: Tue, 23 Aug 2022 18:02:38 +0545 Subject: [PATCH 18/35] Edited few words --- docs/proposals/container-image-vulnerability-adaptor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/container-image-vulnerability-adaptor.md b/docs/proposals/container-image-vulnerability-adaptor.md index 93a33870..0b5c68a9 100644 --- a/docs/proposals/container-image-vulnerability-adaptor.md +++ b/docs/proposals/container-image-vulnerability-adaptor.md @@ -11,7 +11,7 @@ source #287 ### Relation to this proposal -There are multiple changes and design decisions needs to be made before Kubescape will support the before outlined controls. However, a focal point the whole picture is the ability to access vulnerability databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, some major players are already do. Since there is not a single API available which all of these data sources support it is important to create an adaption layer within Kubescape so different datasources can serve Kubescape's goals. +There are multiple changes and design decisions needs to be made before Kubescape will support the before outlined controls. However, a focal point the whole picture is the ability to access vulnerability databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, some major players already do. Since there is not a single API available which all of these data sources support it is important to create an adaption layer within Kubescape so different datasources can serve Kubescape's goals. ## High level design of Kubescape From 98c0be147b8419eee86318fb8a789c6237ee0475 Mon Sep 17 00:00:00 2001 From: Yash Hegde <120CH0007@nitrkl.ac.in> Date: Tue, 23 Aug 2022 19:07:36 +0530 Subject: [PATCH 19/35] Corrected grammatical errors --- .../container-image-vulnerability-adaptor.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/proposals/container-image-vulnerability-adaptor.md b/docs/proposals/container-image-vulnerability-adaptor.md index dce83f45..93a2941b 100644 --- a/docs/proposals/container-image-vulnerability-adaptor.md +++ b/docs/proposals/container-image-vulnerability-adaptor.md @@ -6,23 +6,23 @@ source #287 ### Big picture -* Kubescape team is planning to create controls which take into account image vulnerabilities, example: looking for public internet facing workloads with critical vulnerabilities. These are seriously effecting the security health of a cluster and therefore we think it is important to cover it. We think that most container registries are/will support image scanning like Harbor and therefore the ability to get information from them is important. -* There are information in the image repository which is important for existing controls as well. They are incomplete without it, example see this issue: Non-root containers check is broken #19 . These are not necessarily image vulnerability related. Can be information in the image manifest (like the issue before), but it can be the image BOM related. +* Kubescape team is planning to create controls which take into account image vulnerabilities, example: looking for public internet facing workloads with critical vulnerabilities. These are seriously affecting the security health of a cluster and therefore we think it is important to cover it. We think that most container registries are/will support image scanning like Harbor and therefore ,the ability to get information from them is important. +* There is information in the image repository which is important for the existing controls as well. They are incomplete without it, example see this issue: Non-root containers check is broken #19 . These are not necessarily image vulnerability related. Can be information in the image manifest (like the issue before), but it can be the image BOM related. ### Relation to this proposal -There are multiple changes and design decisions needs to be made before Kubescape will support the before outlined controls. However, a focal point the whole picutre is the ability to access vulnerability databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, some major players are already do. Since there is no a single API available which all of these data sources support it is important to create an adaption layer within Kubescape so different datasources can serve Kubescape's goals. +Multiple changes and design decisions need to be made before Kubescape will support the above outlined controls. However, a focal point in the whole picutre is the ability to access vulnerability of databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, like some major players already do. Since there is no single API available which all of these data sources support, it is important to create an adaption layer within Kubescape so that different datasources can serve Kubescape's goals. ## High level design of Kubescape ### Layers -* Controls and Rules: that actual control logic implementation, the "tests" themselves. Implemented in rego +* Controls and Rules: That actual control logic implementation, the "tests" themselves. Implemented in rego * OPA engine: the [OPA](https://github.com/open-policy-agent/opa) rego interpreter * Rules processor: Kubescape component, it enumerates and runs the controls while also preparing the all the input data that the controls need for running -* Data sources: set of different modules providing data to the Rules processor so it can run the controls with them. Examples: Kubernetes objects, cloud vendor API objects and adding in this proposal the vulnerability infomration -* Cloud Image Vulnerability adaption interface: the subject of this proposal, it gives a common interface for different registry/vulnerability vendors to adapt to. -* CIV adaptors: specific implementation of the CIV interface, example Harbor adaption +* Data sources: Set of different modules providing data to the Rules processor so that it can run the controls with them. Examples: Kubernetes objects, cloud vendor API objects and adding the vulnerability information in this proposal +* Cloud Image Vulnerability adaption interface: The subject of this proposal, it gives a common interface for different registry/vulnerability vendors to adapt to. +* CIV adaptors: Specific implementation of the CIV interface, example Harbor adaption ``` ----------------------- | Controls/Rules (rego) | @@ -62,7 +62,7 @@ The interface needs to cover the following functionalities: * Getting vulnerability information for a given image * Getting image information * Image manifests - * Image BOMs (bill of material) + * Image BOMs (Bill Of Material) ## Go API proposal @@ -102,7 +102,7 @@ type ContainerImageInformation struct { type IContainerImageVulnerabilityAdaptor interface { // Credentials are coming from user input (CLI or configuration file) and they are abstracted at string to string map level - // so and example use would be like registry: "simpledockerregistry:80" and credentials like {"username":"joedoe","password":"abcd1234"} + // so an example use would be like registry: "simpledockerregistry:80" and credentials like {"username":"joedoe","password":"abcd1234"} Login(registry string, credentials map[string]string) error // For "help" purposes @@ -132,7 +132,7 @@ The objects received from the interface will be converted to an Imetadata compat "name": "nginx:latest" }, "data": { - // returned by the adaptor API (structure like our backend gives for an image + // returned by the adaptor API (structure like our backend gives for an image) } } ``` @@ -168,9 +168,9 @@ The rego results will be a combination of the k8s artifact and the list of relev }, "data": { - // returned by the adaptor API (structure like our backend gives for an image + // returned by the adaptor API (structure like our backend gives for an image) } } ] } -``` \ No newline at end of file +``` From 38325c5af4fc9d47e58fb29991bb46d49223cffd Mon Sep 17 00:00:00 2001 From: Hirdey-1999 <71271612+Hirdey-1999@users.noreply.github.com> Date: Tue, 23 Aug 2022 21:33:05 +0530 Subject: [PATCH 20/35] Update roadmap.md --- docs/roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 144a462c..b1ea9768 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -59,7 +59,7 @@ The items in the Kubescape roadmap are split into 3 major groups based on the fe * Image vulnerability scanning based controls * Assisted remediation (telling where/what to fix) * Integration with Prometheus -* Confiugration of controls (customizing rules for a given environment) +* Configuration of controls (customizing rules for a given environment) * Installation in the cluster for continuous monitoring * Host scanner * Cloud vendor API integration From c3434814c19f5f6e09e1989b0a186e5d1c2aaa50 Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Tue, 23 Aug 2022 21:43:02 +0300 Subject: [PATCH 21/35] Fixed readme links --- README.md | 11 ++++++----- docs/roadmap.md | 2 +- httphandler/examples/prometheus/README.md | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c4fc63cf..9ff311a2 100644 --- a/README.md +++ b/README.md @@ -89,10 +89,10 @@ Want to contribute? Want to discuss something? Have an issue? * [Configure and run customized frameworks](https://youtu.be/12Sanq_rEhs) * Customize controls configurations. [Kubescape CLI](https://youtu.be/955psg6TVu4), [Kubescape SaaS](https://youtu.be/lIMVSVhH33o) -
Windows - ## Install on Windows +
Windows + **Requires powershell v5.0+** ``` powershell @@ -106,10 +106,11 @@ Set-ExecutionPolicy RemoteSigned -scope CurrentUser ```
-
MacOS ## Install on macOS +
MacOS + 1. ```sh brew tap kubescape/tap ``` @@ -118,10 +119,10 @@ Set-ExecutionPolicy RemoteSigned -scope CurrentUser ```
-
Nix/NixOS - ## Install on NixOS or with nix (Community) +
Nix/NixOS + Direct issues installing `kubescape` via `nix` through the channels mentioned [here](https://nixos.wiki/wiki/Support) You can use `nix` on Linux or macOS and on other platforms unofficially. diff --git a/docs/roadmap.md b/docs/roadmap.md index 144a462c..b1ea9768 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -59,7 +59,7 @@ The items in the Kubescape roadmap are split into 3 major groups based on the fe * Image vulnerability scanning based controls * Assisted remediation (telling where/what to fix) * Integration with Prometheus -* Confiugration of controls (customizing rules for a given environment) +* Configuration of controls (customizing rules for a given environment) * Installation in the cluster for continuous monitoring * Host scanner * Cloud vendor API integration diff --git a/httphandler/examples/prometheus/README.md b/httphandler/examples/prometheus/README.md index d97da1ee..6d785c20 100644 --- a/httphandler/examples/prometheus/README.md +++ b/httphandler/examples/prometheus/README.md @@ -23,7 +23,7 @@ All kubescape related metrics begin with `kubescape` -> `riskScore` is the output of an algorithm calculating the risk of the vulinrability. `0` indicates there is no risk and `100` indicates highest risk. +> `riskScore` is the output of an algorithm calculating the risk of the vulnerability. `0` indicates there is no risk and `100` indicates highest risk. #### Cluster scope metrics From 77f3806abfac321c826aa08fa5159c13e16eb919 Mon Sep 17 00:00:00 2001 From: Polok-Ghosh <57084217+Polokghosh53@users.noreply.github.com> Date: Wed, 24 Aug 2022 00:38:31 +0530 Subject: [PATCH 22/35] Update CONTRIBUTING.md Some minute changes in the contributing.md --- CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f228a7ac..5c966913 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ When contributing, we categorize contributions into two: If you have a small change, feel free to fire up a Pull Request. When planning a bigger change, please first discuss the change you wish to make via issue, -email, or any other method with the owners of this repository before making a change. Most likely your changes or features are great, but sometimes we might already going to this direction (or the exact opposite ;-) ) and we don't want to waste your time. +email, or any other method with the owners of this repository before making a change. Most likely your changes or features are great, but sometimes we might already be going in this direction (or the exact opposite ;-) ) and we don't want to waste your time. Please note we have a code of conduct, please follow it in all your interactions with the project. @@ -20,7 +20,7 @@ Please note we have a code of conduct, please follow it in all your interactions 2. Update the README.md with details of changes to the interface, this includes new environment variables, exposed ports, useful file locations and container parameters. 3. Open Pull Request to `dev` branch - we test the component before merging into the `master` branch -4. We will merge the Pull Request in once you have the sign-off. +4. We will merge the Pull Request once you have the sign-off. ## Code of Conduct @@ -55,7 +55,7 @@ advances * Other conduct which could reasonably be considered inappropriate in a professional setting -We will distance those who are constantly adhere to unacceptable behavior. +We will distance those who constantly adhere to unacceptable behavior. ### Our Responsibilities @@ -97,4 +97,4 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage], versi available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file +[version]: http://contributor-covenant.org/version/1/4/ From 26c0baefe7c6df9249c7f76ac52e95b868e1aafd Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Tue, 23 Aug 2022 22:33:04 +0300 Subject: [PATCH 23/35] Fixing building section links --- README.md | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 8ca20c32..f12dabb2 100644 --- a/README.md +++ b/README.md @@ -13,20 +13,11 @@ Kubescape integrates natively with other DevOps tools, including Jenkins, Circle
- - - # Kubescape CLI:
- - # TL;DR ## Install: ```sh @@ -300,9 +291,9 @@ View Kubescape scan results directly in [Lens IDE](https://k8slens.dev/) using k # Building Kubescape -
Windows +## Build on Windows -## Windows +
Windows 1. Install MSYS2 & build libgit _(needed only for the first time)_ @@ -325,9 +316,9 @@ View Kubescape scan results directly in [Lens IDE](https://k8slens.dev/) using k ```
-
Linux / MacOS +## Build on Linux/MacOS -## Linux / MacOS +
Linux / MacOS 1. Install libgit2 dependency _(needed only for the first time)_ From a03b0c94c4294758da74db14cd31a10c58aa7cd6 Mon Sep 17 00:00:00 2001 From: Om Raut <33827410+om2137@users.noreply.github.com> Date: Wed, 24 Aug 2022 02:18:56 +0530 Subject: [PATCH 24/35] Broken links fix in roadmap.md Planning, backlog, and wishlist links were not taking to the required section. --- docs/roadmap.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 144a462c..aa4e6d3a 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -12,9 +12,9 @@ The features serve different stages of the workflow of the users: The items in the Kubescape roadmap are split into 3 major groups based on the feature planning maturity: -* [Planning](#planning) - we have tickets open for these issues with a more or less clear vision of design. -* [Backlog](#backlog) - features that were discussed at a high level but are not ready for development -* [Wishlist](#wishlist) - features we are dreaming of in 😀 and want to push them gradually forward +* [Planning](#planning-) - we have tickets open for these issues with a more or less clear vision of design. +* [Backlog](#backlog-) - features that were discussed at a high level but are not ready for development +* [Wishlist](#wishlist-) - features we are dreaming of in 😀 and want to push them gradually forward ## Planning 👷 From eb33542e4aca091020923f13ad60393112a9bdaa Mon Sep 17 00:00:00 2001 From: Rohit Yandigeri <91059418+RohitYandigeri@users.noreply.github.com> Date: Wed, 24 Aug 2022 10:40:48 +0530 Subject: [PATCH 25/35] Update README.md --- httphandler/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httphandler/README.md b/httphandler/README.md index 28201936..18ee9264 100644 --- a/httphandler/README.md +++ b/httphandler/README.md @@ -155,7 +155,7 @@ curl --header "Content-Type: application/json" \ #### Data profiling Analyze profiled data using [pprof](https://github.com/google/pprof/blob/main/doc/README.md). -[How ro use](https://pkg.go.dev/net/http/pprof) +[How to use](https://pkg.go.dev/net/http/pprof) example: ```bash From daa6db164a1fc1c3285c469b401f15e74748b8b0 Mon Sep 17 00:00:00 2001 From: Benyamin Hirschberg <59160382+BenHirschbergCa@users.noreply.github.com> Date: Wed, 24 Aug 2022 09:11:01 +0300 Subject: [PATCH 26/35] Updating high level roadmap --- docs/roadmap.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 144a462c..8143fef4 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -18,21 +18,29 @@ The items in the Kubescape roadmap are split into 3 major groups based on the fe ## Planning 👷 + +* ##### Storing scan results in cluster + We want Kubescape scan results (both cluster and image scan) to be stored in the cluster locally as `CRD`s. This will enable easier integration with results by other projects as well as with scripting via `kubectl`. This will also make image scan based controls to avoid accessing external resources for image vulnerability scan results. + +* ##### Vulnerability prioritization based on workload file activity + Implementing an eBPF agent (based on Falco or Tracee) which tracks file activity in workloads to prioritize container image vulnerabilities. + +* ##### Prioritization engine using MITRE Attack matrix based attack chains + Create a security issue prioritization engine which scores resources based on control based attack chains. All of Kubescape controls can be arranged into attack categories of MITRE Attack matrix. The Attack matrix categories can be connected to each other based on a theoretical attack (ie. you can't have privilege escalation without initial access). Each of the Kubescape controls are to be categorized in these system and Kubescape will calculate priority score based on the interconnections between failed controls. + * ##### Integration with image registries We want to expand Kubescape to integrate with different image registries and read image vulnerability information from there. This will allow Kubescape to give contextual security information about vulnerabilities. Container registry integration -* ##### Kubescape as a microservice - Create a REST API for Kubescape so it can constantly run in a cluster, and other components like Prometheus can scrape results. * ##### Kubescape CLI control over cluster operations Add functionality to Kubescape CLI to trigger operations in Kubescape cluster components (example: trigger image scans, etc.) -* ##### Produce md/HTML reports - Create scan reports for different output formats. * ##### Git integration for pull requests Create insightful GitHub actions for Kubescape + ## Backlog 📅 * ##### JSON path for HELM charts Today, Kubescape can point to issues in the Kubernetes object. We want to develop this feature so Kubescape will be able to point to the misconfigured source file (HELM). * ##### Create Kubescape HELM plugin + Producing scan results in the context of HELM * ##### Kubescape based admission controller Implement admission controller API for Kubescape microservice to enable users to use Kubescape rules as policies From 1ee1c117001d4712b5d89116bb06c7d6d221a63c Mon Sep 17 00:00:00 2001 From: Benyamin Hirschberg <59160382+BenHirschbergCa@users.noreply.github.com> Date: Wed, 24 Aug 2022 09:15:33 +0300 Subject: [PATCH 27/35] removing ARMO from Kubescape logo --- docs/kubescape.png | Bin 54270 -> 60190 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/kubescape.png b/docs/kubescape.png index cfa8ffc1a75c7f9774b6105cc50f752d7f94eec4..e0de21e48c0aba8efd0b2a003c86bb12b85f9912 100755 GIT binary patch literal 60190 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

ps+qpD|9*wMf#} zVqd#-tWX~wq3!Pxz7_f0C%{u-j*jh$ycSueiM!l@UcQZ|(Q_s?5g(EIGKu1xwiMXu z{`N<|90QFw23I15m7!ea%ul03p3n;s-P?6$kIdYu+Wa(PPjaxD=UAr>?ik6Z8IE$B zjI{c>d4#FzgsFIR3ez65-oddc$SDb%|1Hne8uX~}Ldx(l^ZfPr9}>0#a|BO`sj9F{ zI(ix(!Q9`d^mnTXuupW@8 zC^`%f*FK<2 z)S(Qt^bpq?D^{Pv_iLri&l#}iXwiq=_WR1)M6}x_NL~GDV$QtqdC(*WF%w(&2#@~u zB-yTSc1YEyN%sdjCfwKBuJth0u*XCwK9xg0xNqIwg192pIviWaXPu7hC|aCeH_&U% zwHdsC8_3LO^w~$_Lx4P&o8BO0?up^t-RBwj>wDyKg+ZQ&qlVWu;v3bxq|HpU#EMfI zmE2qW$PSnzZ_ix8ru2OCo*T&!^GWV)V2ldI71krH!iF3=;*lPgrnb@_a!;s^TO=2> z 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 From bd4e0483d4bb978c353b7469a1326eb73987266f Mon Sep 17 00:00:00 2001 From: Benyamin Hirschberg <59160382+BenHirschbergCa@users.noreply.github.com> Date: Wed, 24 Aug 2022 09:31:16 +0300 Subject: [PATCH 28/35] small reame changes --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 57b46f33..7635d077 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,10 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/armosec/kubescape)](https://goreportcard.com/report/github.com/armosec/kubescape) +:sunglasses: [Want to contribute?](#being-a-part-of-the-team) :innocent: -Kubescape is a K8s open-source tool providing a multi-cloud K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer, and image vulnerabilities scanning. + +Kubescape is a K8s open-source tool providing a Kubernetes single pane of glass, including risk analysis, security compliance, RBAC visualizer, and image vulnerabilities scanning. Kubescape scans K8s clusters, YAML files, and HELM charts, detecting misconfigurations according to multiple frameworks (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository), [MITRE ATT&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), software vulnerabilities, and RBAC (role-based-access-control) violations at early stages of the CI/CD pipeline, calculates risk score instantly and shows risk trends over time. It has become one of the fastest-growing Kubernetes tools among developers due to its easy-to-use CLI interface, flexible output formats, and automated scanning capabilities, saving Kubernetes users and admins precious time, effort, and resources. From 971f0c06e787a3b3c7c6da3debedd6a74b5b3c4e Mon Sep 17 00:00:00 2001 From: Benyamin Hirschberg <59160382+BenHirschbergCa@users.noreply.github.com> Date: Wed, 24 Aug 2022 09:36:12 +0300 Subject: [PATCH 29/35] Adding "open for contribution" tickets in the team intro section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7635d077..3d35b6d8 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ We invite you to our team! We are excited about this project and want to return Want to contribute? Want to discuss something? Have an issue? -* Feel free to pick a task from the [roadmap](docs/roadmap.md) or suggest a feature of your own. [Contact us](MAINTAINERS.md) directly for more information :) +* Feel free to pick a task from the [issues](https://github.com/kubescape/kubescape/issues?q=is%3Aissue+is%3Aopen+label%3A%22open+for+contribution%22), [roadmap](docs/roadmap.md) or suggest a feature of your own. [Contact us](MAINTAINERS.md) directly for more information :) * Open an issue, we are trying to respond within 48 hours * [Join us](https://discord.com/invite/WKZRaCtBxN) in the discussion on our discord server! From 93f6f3aecfc6daec09ce9fe6e94e4b5f2d04df7c Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Wed, 24 Aug 2022 11:04:17 +0300 Subject: [PATCH 30/35] Update README.md --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3d35b6d8..f73f2bf0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ logo -[![build](https://github.com/armosec/kubescape/actions/workflows/build.yaml/badge.svg)](https://github.com/armosec/kubescape/actions/workflows/build.yaml) -[![Go Report Card](https://goreportcard.com/badge/github.com/armosec/kubescape)](https://goreportcard.com/report/github.com/armosec/kubescape) +[![build](https://github.com/kubescape/kubescape/actions/workflows/build.yaml/badge.svg)](https://github.com/armosec/kubescape/actions/workflows/build.yaml) +[![Go Report Card](https://goreportcard.com/badge/github.com/kubescape/kubescape)](https://goreportcard.com/report/github.com/kubescape/kubescape) :sunglasses: [Want to contribute?](#being-a-part-of-the-team) :innocent: @@ -15,12 +15,6 @@ Kubescape integrates natively with other DevOps tools, including Jenkins, Circle
- - - # Kubescape CLI: From 8ac41533b6a110671ff2555e02b7257906c4e123 Mon Sep 17 00:00:00 2001 From: Rahul Singh <110548934+rahuldhirendersingh@users.noreply.github.com> Date: Wed, 24 Aug 2022 14:07:49 +0530 Subject: [PATCH 31/35] typo correction: for better code readability There was some spelling mistakes at multiple places, so I've made those changes to increase the better code readability --- httphandler/listener/setup.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/httphandler/listener/setup.go b/httphandler/listener/setup.go index 57616657..634e4d70 100644 --- a/httphandler/listener/setup.go +++ b/httphandler/listener/setup.go @@ -19,7 +19,7 @@ const ( scanPath = "/v1/scan" statusPath = "/v1/status" resultsPath = "/v1/results" - prometheusMmeticsPath = "/v1/metrics" + prometheusMetricsPath = "/v1/metrics" livePath = "/livez" readyPath = "/readyz" ) @@ -45,7 +45,7 @@ func SetupHTTPListener() error { // listen httpHandler := handlerequestsv1.NewHTTPHandler() - rtr.HandleFunc(prometheusMmeticsPath, httpHandler.Metrics) + rtr.HandleFunc(prometheusMetricsPath, httpHandler.Metrics) rtr.HandleFunc(scanPath, httpHandler.Scan) rtr.HandleFunc(statusPath, httpHandler.Status) rtr.HandleFunc(resultsPath, httpHandler.Results) @@ -75,7 +75,7 @@ func loadTLSKey(certFile, keyFile string) (*tls.Certificate, error) { pair, err := tls.LoadX509KeyPair(certFile, keyFile) if err != nil { - return nil, fmt.Errorf("filed to load key pair: %v", err) + return nil, fmt.Errorf("failed to load key pair: %v", err) } return &pair, nil } From da24c9164a753079252e912072fca5c23612fceb Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Wed, 24 Aug 2022 13:27:24 +0300 Subject: [PATCH 32/35] auto close typo issues --- .github/workflows/close-typos-issues.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/close-typos-issues.yaml diff --git a/.github/workflows/close-typos-issues.yaml b/.github/workflows/close-typos-issues.yaml new file mode 100644 index 00000000..0b554a8e --- /dev/null +++ b/.github/workflows/close-typos-issues.yaml @@ -0,0 +1,18 @@ +on: + issues: + types: [opened, labeled] + +jobs: + build: + if: ${{ github.event.label.name == 'typo' }} + runs-on: ubuntu-latest + auto_close_issues: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Automatically close issues that don't follow the issue template + uses: lucasbento/auto-close-issues@v1.0.2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + issue-close-message: "@${issue.user.login}: Hello! :wave:\n\nThis issue is being automatically closed, Please open a PR with a relevant fix." \ No newline at end of file From da2adf305950b54567dc075aba131473ea446d80 Mon Sep 17 00:00:00 2001 From: Ben Hirschberg <59160382+slashben@users.noreply.github.com> Date: Wed, 24 Aug 2022 14:01:43 +0300 Subject: [PATCH 33/35] Update close-typos-issues.yaml --- .github/workflows/close-typos-issues.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/close-typos-issues.yaml b/.github/workflows/close-typos-issues.yaml index 0b554a8e..46b3275b 100644 --- a/.github/workflows/close-typos-issues.yaml +++ b/.github/workflows/close-typos-issues.yaml @@ -11,8 +11,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - - name: Automatically close issues that don't follow the issue template + - name: Automatically close typo issues uses: lucasbento/auto-close-issues@v1.0.2 with: github-token: ${{ secrets.GITHUB_TOKEN }} - issue-close-message: "@${issue.user.login}: Hello! :wave:\n\nThis issue is being automatically closed, Please open a PR with a relevant fix." \ No newline at end of file + issue-close-message: "@${issue.user.login}: Hello! :wave:\n\nThis issue is being automatically closed, Please open a PR with a relevant fix." From 3d8344f23c0af09e124bde45accc7e506478eb24 Mon Sep 17 00:00:00 2001 From: Rohit Yandigeri <91059418+RohitYandigeri@users.noreply.github.com> Date: Wed, 24 Aug 2022 19:07:54 +0530 Subject: [PATCH 34/35] Update container-image-vulnerability-adaptor.md --- docs/proposals/container-image-vulnerability-adaptor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/container-image-vulnerability-adaptor.md b/docs/proposals/container-image-vulnerability-adaptor.md index 93a2941b..2d8a5e78 100644 --- a/docs/proposals/container-image-vulnerability-adaptor.md +++ b/docs/proposals/container-image-vulnerability-adaptor.md @@ -11,7 +11,7 @@ source #287 ### Relation to this proposal -Multiple changes and design decisions need to be made before Kubescape will support the above outlined controls. However, a focal point in the whole picutre is the ability to access vulnerability of databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, like some major players already do. Since there is no single API available which all of these data sources support, it is important to create an adaption layer within Kubescape so that different datasources can serve Kubescape's goals. +Multiple changes and design decisions need to be made before Kubescape will support the above outlined controls. However, a focal point in the whole picture is the ability to access vulnerability of databases of container images. We anticipate that most container image repositories will support image vulnerability scanning, like some major players already do. Since there is no single API available which all of these data sources support, it is important to create an adaption layer within Kubescape so that different datasources can serve Kubescape's goals. ## High level design of Kubescape From 3bec2ef0b77a86f8e3467bc5aa0509d68d8e8082 Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Wed, 24 Aug 2022 17:10:18 +0300 Subject: [PATCH 35/35] override infoMap only if it's not nil --- core/pkg/resourcehandler/k8sresources.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/pkg/resourcehandler/k8sresources.go b/core/pkg/resourcehandler/k8sresources.go index 8035335e..52ab967f 100644 --- a/core/pkg/resourcehandler/k8sresources.go +++ b/core/pkg/resourcehandler/k8sresources.go @@ -104,7 +104,9 @@ func (k8sHandler *K8sResourceHandler) GetResources(sessionObj *cautils.OPASessio // using hostSensor mock cautils.SetInfoMapForResources("failed to init host scanner", hostResources, sessionObj.InfoMap) } else { - sessionObj.InfoMap = infoMap + if len(infoMap) > 0 { + sessionObj.InfoMap = infoMap + } } } else { cautils.SetInfoMapForResources("enable-host-scan flag not used. For more information: https://hub.armosec.io/docs/host-sensor", hostResources, sessionObj.InfoMap)