devsecops-engine-tools 1.7.12__py3-none-any.whl → 1.7.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of devsecops-engine-tools might be problematic. Click here for more details.
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +1 -1
- devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +4 -4
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +7 -33
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py +10 -45
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py +31 -55
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py +1 -1
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py +24 -28
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +6 -2
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +4 -1
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +29 -11
- devsecops_engine_tools/version.py +1 -1
- devsecops_engine_tools-1.7.14.dist-info/METADATA +120 -0
- {devsecops_engine_tools-1.7.12.dist-info → devsecops_engine_tools-1.7.14.dist-info}/RECORD +16 -16
- devsecops_engine_tools-1.7.12.dist-info/METADATA +0 -156
- {devsecops_engine_tools-1.7.12.dist-info → devsecops_engine_tools-1.7.14.dist-info}/WHEEL +0 -0
- {devsecops_engine_tools-1.7.12.dist-info → devsecops_engine_tools-1.7.14.dist-info}/entry_points.txt +0 -0
- {devsecops_engine_tools-1.7.12.dist-info → devsecops_engine_tools-1.7.14.dist-info}/top_level.txt +0 -0
|
@@ -110,7 +110,7 @@ class HandleScan:
|
|
|
110
110
|
else:
|
|
111
111
|
secret_sca = dict_args["token_engine_container"]
|
|
112
112
|
findings_list, input_core = runner_engine_container(
|
|
113
|
-
dict_args, config_tool, secret_sca, self.devops_platform_gateway
|
|
113
|
+
dict_args, config_tool["ENGINE_CONTAINER"]["TOOL"], secret_sca, self.devops_platform_gateway
|
|
114
114
|
)
|
|
115
115
|
if (
|
|
116
116
|
dict_args["use_vulnerability_management"] == "true"
|
devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py
CHANGED
|
@@ -18,12 +18,12 @@ from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.drive
|
|
|
18
18
|
)
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def runner_engine_container(dict_args,
|
|
21
|
+
def runner_engine_container(dict_args, tool, token, tool_remote):
|
|
22
22
|
try:
|
|
23
|
-
if
|
|
23
|
+
if tool.lower() == "trivy":
|
|
24
24
|
tool_run = TrivyScan()
|
|
25
25
|
tool_deseralizator = TrivyDeserializator()
|
|
26
|
-
elif
|
|
26
|
+
elif tool.lower() == "prisma":
|
|
27
27
|
tool_run = PrismaCloudManagerScan()
|
|
28
28
|
tool_deseralizator = PrismaDeserealizator()
|
|
29
29
|
tool_images = DockerImages()
|
|
@@ -34,7 +34,7 @@ def runner_engine_container(dict_args, config_tool, token, tool_remote):
|
|
|
34
34
|
tool_deseralizator,
|
|
35
35
|
dict_args,
|
|
36
36
|
token,
|
|
37
|
-
|
|
37
|
+
tool,
|
|
38
38
|
)
|
|
39
39
|
|
|
40
40
|
except Exception as e:
|
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
|
|
2
|
-
DevopsPlatformGateway,
|
|
3
|
-
)
|
|
4
1
|
from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateways.tool_gateway import (
|
|
5
2
|
ToolGateway,
|
|
6
3
|
)
|
|
@@ -11,33 +8,23 @@ from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateway
|
|
|
11
8
|
DeseralizatorGateway,
|
|
12
9
|
)
|
|
13
10
|
|
|
11
|
+
|
|
14
12
|
class ContainerScaScan:
|
|
15
13
|
def __init__(
|
|
16
14
|
self,
|
|
17
15
|
tool_run: ToolGateway,
|
|
18
|
-
|
|
16
|
+
remote_config,
|
|
19
17
|
tool_images: ImagesGateway,
|
|
20
18
|
tool_deseralizator: DeseralizatorGateway,
|
|
21
|
-
|
|
19
|
+
build_id,
|
|
22
20
|
token,
|
|
23
|
-
skip_flag
|
|
24
21
|
):
|
|
25
22
|
self.tool_run = tool_run
|
|
26
|
-
self.
|
|
23
|
+
self.remote_config = remote_config
|
|
27
24
|
self.tool_images = tool_images
|
|
28
25
|
self.tool_deseralizator = tool_deseralizator
|
|
29
|
-
self.
|
|
26
|
+
self.build_id = build_id
|
|
30
27
|
self.token = token
|
|
31
|
-
self.skip_flag = skip_flag
|
|
32
|
-
|
|
33
|
-
def get_remote_config(self, file_path):
|
|
34
|
-
"""
|
|
35
|
-
Get remote configuration.
|
|
36
|
-
|
|
37
|
-
Returns:
|
|
38
|
-
dict: Remote configuration.
|
|
39
|
-
"""
|
|
40
|
-
return self.tool_remote.get_remote_config(self.dict_args["remote_config_repo"], file_path)
|
|
41
28
|
|
|
42
29
|
def scan_image(self):
|
|
43
30
|
"""
|
|
@@ -48,15 +35,6 @@ class ContainerScaScan:
|
|
|
48
35
|
"""
|
|
49
36
|
return self.tool_images.list_images()
|
|
50
37
|
|
|
51
|
-
def get_variable(self, variable):
|
|
52
|
-
"""
|
|
53
|
-
Get variable.
|
|
54
|
-
|
|
55
|
-
Returns:
|
|
56
|
-
dict: Remote variable.
|
|
57
|
-
"""
|
|
58
|
-
return self.tool_remote.get_variable(variable)
|
|
59
|
-
|
|
60
38
|
def process(self):
|
|
61
39
|
"""
|
|
62
40
|
Process SCA scanning.
|
|
@@ -65,11 +43,7 @@ class ContainerScaScan:
|
|
|
65
43
|
dict: SCA scanning results.
|
|
66
44
|
"""
|
|
67
45
|
return self.tool_run.run_tool_container_sca(
|
|
68
|
-
self.
|
|
69
|
-
self.token,
|
|
70
|
-
self.scan_image(),
|
|
71
|
-
self.get_variable("build_id"),
|
|
72
|
-
self.skip_flag
|
|
46
|
+
self.remote_config, self.token, self.scan_image(), self.build_id
|
|
73
47
|
)
|
|
74
48
|
|
|
75
49
|
def deseralizator(self, image_scanned):
|
|
@@ -79,4 +53,4 @@ class ContainerScaScan:
|
|
|
79
53
|
Returns:
|
|
80
54
|
list: Deserialized list of findings.
|
|
81
55
|
"""
|
|
82
|
-
return self.tool_deseralizator.get_list_findings(image_scanned)
|
|
56
|
+
return self.tool_deseralizator.get_list_findings(image_scanned)
|
|
@@ -1,67 +1,32 @@
|
|
|
1
1
|
import re
|
|
2
|
-
from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
|
|
3
|
-
DevopsPlatformGateway,
|
|
4
|
-
)
|
|
5
2
|
|
|
6
3
|
|
|
7
4
|
class HandleRemoteConfigPatterns:
|
|
8
|
-
def __init__(
|
|
9
|
-
self
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
):
|
|
13
|
-
self.tool_remote = tool_remote
|
|
14
|
-
self.dict_args = dict_args
|
|
5
|
+
def __init__(self, remote_config, exclusions, pipeline_name):
|
|
6
|
+
self.remote_config = remote_config
|
|
7
|
+
self.exclusions = exclusions
|
|
8
|
+
self.pipeline_name = pipeline_name
|
|
15
9
|
|
|
16
|
-
def get_remote_config(self, file_path):
|
|
17
|
-
"""
|
|
18
|
-
Get remote configuration
|
|
19
|
-
Return: dict: Remote configuration
|
|
20
|
-
"""
|
|
21
|
-
return self.tool_remote.get_remote_config(
|
|
22
|
-
self.dict_args["remote_config_repo"], file_path
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
def get_variable(self, variable):
|
|
26
|
-
"""
|
|
27
|
-
Get variable.
|
|
28
|
-
|
|
29
|
-
Returns:
|
|
30
|
-
dict: Remote variable.
|
|
31
|
-
"""
|
|
32
|
-
return self.tool_remote.get_variable(variable)
|
|
33
|
-
|
|
34
10
|
def ignore_analysis_pattern(self):
|
|
35
11
|
"""
|
|
36
12
|
Handle analysis pattern.
|
|
37
13
|
Return: bool: False -> not scan, True -> scan.
|
|
38
14
|
"""
|
|
39
|
-
ignore = self.
|
|
40
|
-
if re.match(ignore, self.
|
|
15
|
+
ignore = self.remote_config["IGNORE_SEARCH_PATTERN"]
|
|
16
|
+
if re.match(ignore, self.pipeline_name, re.IGNORECASE):
|
|
41
17
|
return False
|
|
42
18
|
else:
|
|
43
19
|
return True
|
|
44
|
-
|
|
45
|
-
def
|
|
20
|
+
|
|
21
|
+
def skip_from_exclusion(self):
|
|
46
22
|
"""
|
|
47
23
|
Handle skip tool.
|
|
48
24
|
|
|
49
25
|
Return: bool: True -> skip tool, False -> not skip tool.
|
|
50
26
|
"""
|
|
51
|
-
if (pipeline_name in exclusions) and (
|
|
52
|
-
exclusions[pipeline_name].get("SKIP_TOOL", 0)
|
|
27
|
+
if (self.pipeline_name in self.exclusions) and (
|
|
28
|
+
self.exclusions[self.pipeline_name].get("SKIP_TOOL", 0)
|
|
53
29
|
):
|
|
54
30
|
return True
|
|
55
31
|
else:
|
|
56
32
|
return False
|
|
57
|
-
|
|
58
|
-
def process_handle_skip_tool(self):
|
|
59
|
-
"""
|
|
60
|
-
Process handle skip tool.
|
|
61
|
-
|
|
62
|
-
Return: bool: True -> skip tool, False -> not skip tool.
|
|
63
|
-
"""
|
|
64
|
-
return self.handle_skip_tool(
|
|
65
|
-
self.get_remote_config("engine_sca/engine_container/Exclusions.json"),
|
|
66
|
-
self.get_variable("pipeline_name"),
|
|
67
|
-
)
|
|
@@ -1,54 +1,34 @@
|
|
|
1
1
|
from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
|
|
2
2
|
from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
|
|
3
|
-
|
|
4
|
-
DevopsPlatformGateway,
|
|
5
|
-
)
|
|
3
|
+
|
|
6
4
|
|
|
7
5
|
from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
|
|
8
6
|
|
|
9
7
|
|
|
10
8
|
class SetInputCore:
|
|
11
|
-
def __init__(self,
|
|
12
|
-
self.
|
|
13
|
-
self.
|
|
14
|
-
self.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def get_exclusions(self, exclusions_data, pipeline_name, config_tool):
|
|
35
|
-
list_exclusions = []
|
|
36
|
-
for key, value in exclusions_data.items():
|
|
37
|
-
if (key == "All") or (key == pipeline_name):
|
|
38
|
-
exclusions = [
|
|
39
|
-
Exclusions(
|
|
40
|
-
id=item.get("id", ""),
|
|
41
|
-
where=item.get("where", ""),
|
|
42
|
-
cve_id=item.get("cve_id", ""),
|
|
43
|
-
create_date=item.get("create_date", ""),
|
|
44
|
-
expired_date=item.get("expired_date", ""),
|
|
45
|
-
severity=item.get("severity", ""),
|
|
46
|
-
hu=item.get("hu", ""),
|
|
47
|
-
reason=item.get("reason", "Risk acceptance"),
|
|
48
|
-
)
|
|
49
|
-
for item in value[config_tool["ENGINE_CONTAINER"]["TOOL"]]
|
|
50
|
-
]
|
|
51
|
-
list_exclusions.extend(exclusions)
|
|
9
|
+
def __init__(self, remote_config, exclusions, pipeline_name, tool, stage):
|
|
10
|
+
self.remote_config = remote_config
|
|
11
|
+
self.exclusions = exclusions
|
|
12
|
+
self.pipeline_name = pipeline_name
|
|
13
|
+
self.tool = tool
|
|
14
|
+
self.stage = stage
|
|
15
|
+
|
|
16
|
+
def get_exclusions(self, exclusions_data, pipeline_name, tool):
|
|
17
|
+
list_exclusions = [
|
|
18
|
+
Exclusions(
|
|
19
|
+
id=item.get("id", ""),
|
|
20
|
+
where=item.get("where", ""),
|
|
21
|
+
cve_id=item.get("cve_id", ""),
|
|
22
|
+
create_date=item.get("create_date", ""),
|
|
23
|
+
expired_date=item.get("expired_date", ""),
|
|
24
|
+
severity=item.get("severity", ""),
|
|
25
|
+
hu=item.get("hu", ""),
|
|
26
|
+
reason=item.get("reason", "Risk acceptance"),
|
|
27
|
+
)
|
|
28
|
+
for key, value in exclusions_data.items()
|
|
29
|
+
if key in {"All", pipeline_name} and value.get(tool)
|
|
30
|
+
for item in value[tool]
|
|
31
|
+
]
|
|
52
32
|
return list_exclusions
|
|
53
33
|
|
|
54
34
|
def set_input_core(self, images_scanned):
|
|
@@ -60,17 +40,13 @@ class SetInputCore:
|
|
|
60
40
|
"""
|
|
61
41
|
return InputCore(
|
|
62
42
|
self.get_exclusions(
|
|
63
|
-
self.
|
|
64
|
-
self.
|
|
65
|
-
self.
|
|
66
|
-
),
|
|
67
|
-
Threshold(
|
|
68
|
-
self.get_remote_config("engine_sca/engine_container/ConfigTool.json")["THRESHOLD"]
|
|
43
|
+
self.exclusions,
|
|
44
|
+
self.pipeline_name,
|
|
45
|
+
self.tool,
|
|
69
46
|
),
|
|
47
|
+
Threshold(self.remote_config["THRESHOLD"]),
|
|
70
48
|
images_scanned[-1] if images_scanned else None,
|
|
71
|
-
self.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
self.get_variable("pipeline_name"),
|
|
75
|
-
self.get_variable("stage").capitalize(),
|
|
49
|
+
self.remote_config["MESSAGE_INFO_ENGINE_CONTAINER"],
|
|
50
|
+
self.pipeline_name,
|
|
51
|
+
self.stage.capitalize(),
|
|
76
52
|
)
|
|
@@ -19,4 +19,4 @@ class DockerImages(ImagesGateway):
|
|
|
19
19
|
print("Created date last image:", latest_image.attrs["Created"])
|
|
20
20
|
return latest_image
|
|
21
21
|
except subprocess.CalledProcessError as e:
|
|
22
|
-
raise ValueError(f"Error listing images:{e.stderr}")
|
|
22
|
+
raise ValueError(f"Error listing images:{e.stderr}")
|
|
@@ -3,7 +3,6 @@ import requests
|
|
|
3
3
|
import os
|
|
4
4
|
import subprocess
|
|
5
5
|
import logging
|
|
6
|
-
import re
|
|
7
6
|
import base64
|
|
8
7
|
from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.helpers.images_scanned import (
|
|
9
8
|
ImagesScanned,
|
|
@@ -87,37 +86,34 @@ class PrismaCloudManagerScan(ToolGateway):
|
|
|
87
86
|
|
|
88
87
|
return images_scanned
|
|
89
88
|
|
|
90
|
-
def run_tool_container_sca(
|
|
91
|
-
self, remoteconfig, prisma_secret_key, image, build_id, skip_flag
|
|
92
|
-
):
|
|
89
|
+
def run_tool_container_sca(self, remoteconfig, prisma_secret_key, image, build_id):
|
|
93
90
|
images_scanned = []
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
)
|
|
91
|
+
try:
|
|
92
|
+
file_path = os.path.join(
|
|
93
|
+
os.getcwd(), remoteconfig["PRISMA_CLOUD"]["TWISTCLI_PATH"]
|
|
94
|
+
)
|
|
99
95
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
)
|
|
96
|
+
if not os.path.exists(file_path):
|
|
97
|
+
self.download_twistcli(
|
|
98
|
+
file_path,
|
|
99
|
+
remoteconfig["PRISMA_CLOUD"]["PRISMA_ACCESS_KEY"],
|
|
100
|
+
prisma_secret_key,
|
|
101
|
+
remoteconfig["PRISMA_CLOUD"]["PRISMA_CONSOLE_URL"],
|
|
102
|
+
remoteconfig["PRISMA_CLOUD"]["PRISMA_API_VERSION"],
|
|
103
|
+
)
|
|
104
|
+
images_scanned.extend(
|
|
105
|
+
self.scan_image(
|
|
106
|
+
file_path,
|
|
107
|
+
image,
|
|
108
|
+
remoteconfig,
|
|
109
|
+
prisma_secret_key,
|
|
110
|
+
build_id,
|
|
116
111
|
)
|
|
112
|
+
)
|
|
117
113
|
|
|
118
|
-
|
|
114
|
+
return images_scanned
|
|
119
115
|
|
|
120
|
-
|
|
121
|
-
|
|
116
|
+
except Exception as ex:
|
|
117
|
+
logger.error(f"An overall error occurred: {ex}")
|
|
122
118
|
|
|
123
119
|
return images_scanned
|
|
@@ -31,8 +31,12 @@ class PrismaDeserealizator(DeseralizatorGateway):
|
|
|
31
31
|
image_object = file.read()
|
|
32
32
|
|
|
33
33
|
json_data = json.loads(image_object)
|
|
34
|
-
vulnerabilities_data =
|
|
35
|
-
|
|
34
|
+
vulnerabilities_data = (
|
|
35
|
+
json_data["results"][0]["vulnerabilities"]
|
|
36
|
+
if "vulnerabilities" in json_data["results"][0]
|
|
37
|
+
else []
|
|
38
|
+
)
|
|
39
|
+
|
|
36
40
|
# Create a list of findings instances from the JSON data
|
|
37
41
|
vulnerabilities = [
|
|
38
42
|
Finding(
|
|
@@ -9,6 +9,7 @@ from dataclasses import dataclass
|
|
|
9
9
|
import json
|
|
10
10
|
from datetime import datetime
|
|
11
11
|
|
|
12
|
+
|
|
12
13
|
@dataclass
|
|
13
14
|
class TrivyDeserializator(DeseralizatorGateway):
|
|
14
15
|
def get_list_findings(self, images_scanned: list) -> "list[Finding]":
|
|
@@ -34,7 +35,9 @@ class TrivyDeserializator(DeseralizatorGateway):
|
|
|
34
35
|
+ vul.get("InstalledVersion", ""),
|
|
35
36
|
description=vul.get("Description", "").replace("\n", ""),
|
|
36
37
|
severity=vul.get("Severity", "").lower(),
|
|
37
|
-
identification_date=datetime.now().strftime(
|
|
38
|
+
identification_date=datetime.now().strftime(
|
|
39
|
+
"%d-%m-%Y %H:%M:%S"
|
|
40
|
+
),
|
|
38
41
|
published_date_cve=vul.get("PublishedDate", ""),
|
|
39
42
|
module="engine_container",
|
|
40
43
|
category=Category.VULNERABILITY,
|
|
@@ -7,6 +7,10 @@ from devsecops_engine_tools.engine_sca.engine_container.src.domain.usecases.hand
|
|
|
7
7
|
from devsecops_engine_tools.engine_sca.engine_container.src.domain.usecases.set_input_core import (
|
|
8
8
|
SetInputCore,
|
|
9
9
|
)
|
|
10
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
11
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
12
|
+
|
|
13
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
10
14
|
|
|
11
15
|
|
|
12
16
|
def init_engine_sca_rm(
|
|
@@ -16,25 +20,39 @@ def init_engine_sca_rm(
|
|
|
16
20
|
tool_deseralizator,
|
|
17
21
|
dict_args,
|
|
18
22
|
token,
|
|
19
|
-
|
|
23
|
+
tool,
|
|
20
24
|
):
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
remote_config = tool_remote.get_remote_config(
|
|
26
|
+
dict_args["remote_config_repo"], "engine_sca/engine_container/ConfigTool.json"
|
|
27
|
+
)
|
|
28
|
+
exclusions = tool_remote.get_remote_config(
|
|
29
|
+
dict_args["remote_config_repo"], "engine_sca/engine_container/Exclusions.json"
|
|
30
|
+
)
|
|
31
|
+
pipeline_name = tool_remote.get_variable("pipeline_name")
|
|
32
|
+
handle_remote_config_patterns = HandleRemoteConfigPatterns(
|
|
33
|
+
remote_config, exclusions, pipeline_name
|
|
34
|
+
)
|
|
35
|
+
skip_flag = handle_remote_config_patterns.skip_from_exclusion()
|
|
36
|
+
scan_flag = handle_remote_config_patterns.ignore_analysis_pattern()
|
|
37
|
+
build_id = tool_remote.get_variable("build_id")
|
|
38
|
+
stage = tool_remote.get_variable("stage")
|
|
23
39
|
images_scanned = []
|
|
24
40
|
deseralized = []
|
|
25
|
-
|
|
41
|
+
input_core = SetInputCore(remote_config, exclusions, pipeline_name, tool, stage)
|
|
42
|
+
if scan_flag and not (skip_flag):
|
|
26
43
|
container_sca_scan = ContainerScaScan(
|
|
27
44
|
tool_run,
|
|
28
|
-
|
|
45
|
+
remote_config,
|
|
29
46
|
tool_images,
|
|
30
47
|
tool_deseralizator,
|
|
31
|
-
|
|
48
|
+
build_id,
|
|
32
49
|
token,
|
|
33
|
-
handle_remote_config_patterns.process_handle_skip_tool(),
|
|
34
50
|
)
|
|
35
51
|
images_scanned = container_sca_scan.process()
|
|
36
52
|
deseralized = container_sca_scan.deseralizator(images_scanned)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
)
|
|
53
|
+
else:
|
|
54
|
+
print("Tool skipped by DevSecOps policy")
|
|
55
|
+
logger.info("Tool skipped by DevSecOps policy")
|
|
56
|
+
core_input = input_core.set_input_core(images_scanned)
|
|
57
|
+
|
|
58
|
+
return deseralized, core_input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '1.7.
|
|
1
|
+
version = '1.7.14'
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: devsecops-engine-tools
|
|
3
|
+
Version: 1.7.14
|
|
4
|
+
Summary: Tool for DevSecOps strategy
|
|
5
|
+
Home-page: https://github.com/bancolombia/devsecops-engine-tools
|
|
6
|
+
Author: Bancolombia DevSecOps Team
|
|
7
|
+
Author-email: devsecops@bancolombia.com.co
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.8
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: requests ==2.31.0
|
|
14
|
+
Requires-Dist: multipledispatch ==0.6.0
|
|
15
|
+
Requires-Dist: PyYAML ==6.0.1
|
|
16
|
+
Requires-Dist: checkov ==2.3.296
|
|
17
|
+
Requires-Dist: pyfiglet ==0.7
|
|
18
|
+
Requires-Dist: prettytable ==3.8.0
|
|
19
|
+
Requires-Dist: azure-devops ==7.1.0b3
|
|
20
|
+
Requires-Dist: marshmallow ==3.19.0
|
|
21
|
+
Requires-Dist: pytz ==2023.3
|
|
22
|
+
Requires-Dist: python-decouple ==3.8
|
|
23
|
+
Requires-Dist: requests-toolbelt ==1.0.0
|
|
24
|
+
Requires-Dist: python-dateutil ==2.8.2
|
|
25
|
+
Requires-Dist: pexpect ==4.9.0
|
|
26
|
+
|
|
27
|
+
# DevSecOps Engine Tools
|
|
28
|
+
|
|
29
|
+
[](#)
|
|
30
|
+
[](https://github.com/bancolombia/devsecops-engine-tools/actions/workflows/build.yml)
|
|
31
|
+
[](https://sonarcloud.io/summary/new_code?id=bancolombia_devsecops-engine-tools)
|
|
32
|
+
[](https://sonarcloud.io/summary/new_code?id=bancolombia_devsecops-engine-tools)
|
|
33
|
+
[](#)
|
|
34
|
+
|
|
35
|
+
# Objective
|
|
36
|
+
|
|
37
|
+
Tool that unifies the evaluation of the different devsecops practices being agnostic to the devops platform, using both open source and market tools.
|
|
38
|
+
|
|
39
|
+
# Component
|
|
40
|
+
|
|
41
|
+
📦 [tools](https://github.com/bancolombia/devsecops-engine-tools/tree/trunk/tools): DevSecOps Practice Modules
|
|
42
|
+
|
|
43
|
+
# Communications channel
|
|
44
|
+
|
|
45
|
+
Here are the channels we use to communicate about the project:
|
|
46
|
+
|
|
47
|
+
**1. Mailing list:** You can join our mailing list to always be informed at the following link: [CommunityDevsecopsEngine](https://groups.google.com/g/CommunityDevsecopsEngine)
|
|
48
|
+
|
|
49
|
+
**2. Email:** You can write to us by email: MaintainersDevsecopsEngine@googlegroups.com
|
|
50
|
+
|
|
51
|
+
# Getting started
|
|
52
|
+
|
|
53
|
+
### Requirements
|
|
54
|
+
|
|
55
|
+
- Python >= 3.8
|
|
56
|
+
|
|
57
|
+
### Installation
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pip3 install devsecops-engine-tools
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Scan running - flags (CLI)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
devsecops-engine-tools --platform_devops ["local","azure"] --remote_config_repo ["remote_config_repo"] --tool ["engine_iac", "engine_dast", "engine_secret", "engine_dependencies", "engine_container"] --folder_path ["Folder path scan engine_iac"] --platform ["eks","openshift"] --use_secrets_manager ["false", "true"] --use_vulnerability_management ["false", "true"] --send_metrics ["false", "true"] --token_cmdb ["token_cmdb"] --token_vulnerability_management ["token_vulnerability_management"] --token_engine_container ["token_engine_container"] --token_engine_dependencies ["token_engine_dependencies"]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Structure Remote Config
|
|
70
|
+
[example_remote_config_local](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/example_remote_config_local/)
|
|
71
|
+
```bash
|
|
72
|
+
📦Remote_Config
|
|
73
|
+
┣ 📂engine_core
|
|
74
|
+
┃ ┗ 📜ConfigTool.json
|
|
75
|
+
┣ 📂engine_sast
|
|
76
|
+
┃ ┗ 📂engine_iac
|
|
77
|
+
┃ ┗ 📜ConfigTool.json
|
|
78
|
+
┃ ┗ 📜Exclusions.json
|
|
79
|
+
┃ ┗ 📂engine_secret
|
|
80
|
+
┃ ┗ 📜ConfigTool.json
|
|
81
|
+
┣ 📂engine_sca
|
|
82
|
+
┃ ┗ 📂engine_container
|
|
83
|
+
┃ ┗ 📜ConfigTool.json
|
|
84
|
+
┃ ┗ 📜Exclusions.json
|
|
85
|
+
┃ ┗ 📂engine_dependencies
|
|
86
|
+
┃ ┗ 📜ConfigTool.json
|
|
87
|
+
┃ ┗ 📜Exclusions.json
|
|
88
|
+
```
|
|
89
|
+
### Scan running sample (CLI) - Local
|
|
90
|
+
|
|
91
|
+
> Complete the value in **.envdetlocal** file a set in execution environment
|
|
92
|
+
```
|
|
93
|
+
$ set -a
|
|
94
|
+
$ source .envdetlocal
|
|
95
|
+
$ set +a
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
devsecops-engine-tools --platform_devops local --remote_config_repo DevSecOps_Remote_Config --tool engine_iac
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
### Scan result sample (CLI)
|
|
104
|
+
|
|
105
|
+

|
|
106
|
+
|
|
107
|
+
# Metrics
|
|
108
|
+
|
|
109
|
+
With the flag **--send_metrics true** and the configuration of the AWS-METRICS_MANAGER driven adapter in ConfigTool.json of the engine_core the tool will send the report to bucket s3. In the [metrics](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/metrics/) folder you will find the base of the cloud formation template to deploy the infra and dashboard in grafana.
|
|
110
|
+
|
|
111
|
+

|
|
112
|
+
|
|
113
|
+
# How can I help?
|
|
114
|
+
|
|
115
|
+
Review the issues, we hear new ideas. Read more [Contributing](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/docs/CONTRIBUTING.md)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
devsecops_engine_tools/version.py,sha256=
|
|
2
|
+
devsecops_engine_tools/version.py,sha256=VuEoY2as5gEYas1qytTrMm-wAOffVDsUMyTM_79SdIg,18
|
|
3
3
|
devsecops_engine_tools/engine_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
devsecops_engine_tools/engine_core/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
devsecops_engine_tools/engine_core/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -26,7 +26,7 @@ devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_manage
|
|
|
26
26
|
devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
27
|
devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py,sha256=z6lcd-tnb-3QfZ1yf2ZlaRbovwF0YE6nUmS5V92aszc,15534
|
|
28
28
|
devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=EBLEzm-p_lEeB7T8iarn2Fc4_6hY0XAIT1AJATd2JUM,2473
|
|
29
|
-
devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=
|
|
29
|
+
devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=ee9ULqKGYfaxBUO8RNq-Znh4dbojghIauH4YIjYx9QU,6730
|
|
30
30
|
devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py,sha256=Xi0iNnPrFgqd2cBdAA5E_tgouhxs-BTo016aolnGgv8,2413
|
|
31
31
|
devsecops_engine_tools/engine_core/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
32
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -128,7 +128,7 @@ devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
|
128
128
|
devsecops_engine_tools/engine_sca/engine_container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
129
|
devsecops_engine_tools/engine_sca/engine_container/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
130
130
|
devsecops_engine_tools/engine_sca/engine_container/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
|
-
devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py,sha256
|
|
131
|
+
devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py,sha256=tu7FU4taXp9XQFNkNv8jzHIS16pqy6zLDjYBGax4tWU,1718
|
|
132
132
|
devsecops_engine_tools/engine_sca/engine_container/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
133
133
|
devsecops_engine_tools/engine_sca/engine_container/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
134
|
devsecops_engine_tools/engine_sca/engine_container/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -138,21 +138,21 @@ devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/des
|
|
|
138
138
|
devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/images_gateway.py,sha256=szx-9iO1eSDedr3rw605Mx3jYBEFwRKBM0ts5zImgx0,158
|
|
139
139
|
devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/tool_gateway.py,sha256=ADZjrl8u8CQ0hWoVhbnHFcjvyUmUeleffwmhtlg8s30,224
|
|
140
140
|
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
141
|
-
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py,sha256=
|
|
142
|
-
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py,sha256=
|
|
143
|
-
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=
|
|
141
|
+
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py,sha256=zwlYQSmtn7_ms9x5-Dhr3WTilLM5cXdAyslgWRh5xdc,1635
|
|
142
|
+
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py,sha256=4wgBTQSDE-C5v01C3Vxzeq0DJKZUSqQ5TVLG7yPZPKs,926
|
|
143
|
+
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=Jw2sjrgRS8kjIFLt2nEBXQpF2-Ncm_ltgc6Q7ZIZKw0,1840
|
|
144
144
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
145
145
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
146
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
|
-
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py,sha256=
|
|
147
|
+
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py,sha256=tdZeW5KbZcLxSMM37-GdmkLItpRDUlR0eAyew6bI2ts,816
|
|
148
148
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
149
|
-
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py,sha256=
|
|
150
|
-
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=
|
|
149
|
+
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py,sha256=3KyqbuLSFHMAUO5n9ruLMU8nhiP9BuGeXchN9PHW3M0,4369
|
|
150
|
+
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=k6j6ajlHFVfKdxIdvWVak0eryhIknT0IyTvyI2e3gz0,2514
|
|
151
151
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
152
|
-
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py,sha256=
|
|
152
|
+
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py,sha256=v0XU-KJfnt4BFmoLbpc3IE0RxDVsYN5dzftfJiWR2Fs,2169
|
|
153
153
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=IBd3fOQmHPDeVud54DQtw0x2o4jm31iwRoiBDTpkqdc,4284
|
|
154
154
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
155
|
-
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=
|
|
155
|
+
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=BM8XJI_tlFxurdhBz2N5R33z4WGNLN_mkaG2npYBTiM,2212
|
|
156
156
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
157
157
|
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/images_scanned.py,sha256=V_wE9maXdGlQbYIe6qVgOqEtiWrh-icd8V4dpWDQrXg,590
|
|
158
158
|
devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -242,8 +242,8 @@ devsecops_engine_tools/engine_utilities/utils/logger_info.py,sha256=4Mz8Bwlm9Mku
|
|
|
242
242
|
devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGaxYSDe0ZRh6VHRf53H4sXPcb-vNP_i81PUn3I,307
|
|
243
243
|
devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=GAslbWaBpwP3mP6fBsgVl07TTBgcCggQTy8h2M9ibeo,612
|
|
244
244
|
devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
|
|
245
|
-
devsecops_engine_tools-1.7.
|
|
246
|
-
devsecops_engine_tools-1.7.
|
|
247
|
-
devsecops_engine_tools-1.7.
|
|
248
|
-
devsecops_engine_tools-1.7.
|
|
249
|
-
devsecops_engine_tools-1.7.
|
|
245
|
+
devsecops_engine_tools-1.7.14.dist-info/METADATA,sha256=Usrozy3Bfa1_YcDkTSRZKPJjJuyOqPwi8RHuy30QnF0,4840
|
|
246
|
+
devsecops_engine_tools-1.7.14.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
247
|
+
devsecops_engine_tools-1.7.14.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
|
|
248
|
+
devsecops_engine_tools-1.7.14.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
|
|
249
|
+
devsecops_engine_tools-1.7.14.dist-info/RECORD,,
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: devsecops-engine-tools
|
|
3
|
-
Version: 1.7.12
|
|
4
|
-
Summary: Tool for DevSecOps strategy
|
|
5
|
-
Home-page: https://github.com/bancolombia/devsecops-engine-tools
|
|
6
|
-
Author: Bancolombia DevSecOps Team
|
|
7
|
-
Author-email: devsecops@bancolombia.com.co
|
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
10
|
-
Classifier: Operating System :: OS Independent
|
|
11
|
-
Requires-Python: >=3.8
|
|
12
|
-
Description-Content-Type: text/markdown
|
|
13
|
-
Requires-Dist: requests ==2.31.0
|
|
14
|
-
Requires-Dist: multipledispatch ==0.6.0
|
|
15
|
-
Requires-Dist: PyYAML ==6.0.1
|
|
16
|
-
Requires-Dist: checkov ==2.3.296
|
|
17
|
-
Requires-Dist: pyfiglet ==0.7
|
|
18
|
-
Requires-Dist: prettytable ==3.8.0
|
|
19
|
-
Requires-Dist: azure-devops ==7.1.0b3
|
|
20
|
-
Requires-Dist: marshmallow ==3.19.0
|
|
21
|
-
Requires-Dist: pytz ==2023.3
|
|
22
|
-
Requires-Dist: python-decouple ==3.8
|
|
23
|
-
Requires-Dist: requests-toolbelt ==1.0.0
|
|
24
|
-
Requires-Dist: python-dateutil ==2.8.2
|
|
25
|
-
Requires-Dist: pexpect ==4.9.0
|
|
26
|
-
|
|
27
|
-
# DevSecOps Engine Tools
|
|
28
|
-
|
|
29
|
-
[](#)
|
|
30
|
-
[](https://github.com/bancolombia/devsecops-engine-tools/actions/workflows/build.yml)
|
|
31
|
-
[](#)
|
|
32
|
-
|
|
33
|
-
# Objective
|
|
34
|
-
|
|
35
|
-
Tool that unifies the evaluation of the different devsecops practices being agnostic to the devops platform, using both open source and market tools.
|
|
36
|
-
|
|
37
|
-
# Component
|
|
38
|
-
|
|
39
|
-
📦 [tools](https://github.com/bancolombia/devsecops-engine-tools/tree/trunk/tools): DevSecOps Practice Modules
|
|
40
|
-
|
|
41
|
-
# Communications channel
|
|
42
|
-
|
|
43
|
-
Here are the channels we use to communicate about the project:
|
|
44
|
-
|
|
45
|
-
**1. Mailing list:** You can join our mailing list to always be informed at the following link: [CommunityDevsecopsEngine](https://groups.google.com/g/CommunityDevsecopsEngine)
|
|
46
|
-
|
|
47
|
-
**2. Email:** You can write to us by email: MaintainersDevsecopsEngine@googlegroups.com
|
|
48
|
-
|
|
49
|
-
# Getting started
|
|
50
|
-
|
|
51
|
-
### Requirements
|
|
52
|
-
|
|
53
|
-
- Python >= 3.8
|
|
54
|
-
|
|
55
|
-
### Installation
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
pip3 install devsecops-engine-tools
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### Scan running - flags (CLI)
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
devsecops-engine-tools --platform_devops ["local","azure"] --remote_config_repo ["remote_config_repo"] --tool ["engine_iac", "engine_dast", "engine_secret", "engine_dependencies", "engine_container"] --folder_path ["Folder path scan engine_iac"] --platform ["eks","openshift"] --use_secrets_manager ["false", "true"] --use_vulnerability_management ["false", "true"] --send_metrics ["false", "true"] --token_cmdb ["token_cmdb"] --token_vulnerability_management ["token_vulnerability_management"] --token_engine_container ["token_engine_container"] --token_engine_dependencies ["token_engine_dependencies"]
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Structure Remote Config
|
|
68
|
-
[example_remote_config_local](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/example_remote_config_local/)
|
|
69
|
-
```bash
|
|
70
|
-
📦Remote_Config
|
|
71
|
-
┣ 📂engine_core
|
|
72
|
-
┃ ┗ 📜ConfigTool.json
|
|
73
|
-
┣ 📂engine_sast
|
|
74
|
-
┃ ┗ 📂engine_iac
|
|
75
|
-
┃ ┗ 📜ConfigTool.json
|
|
76
|
-
┃ ┗ 📜Exclusions.json
|
|
77
|
-
┃ ┗ 📂engine_secret
|
|
78
|
-
┃ ┗ 📜ConfigTool.json
|
|
79
|
-
┣ 📂engine_sca
|
|
80
|
-
┃ ┗ 📂engine_container
|
|
81
|
-
┃ ┗ 📜ConfigTool.json
|
|
82
|
-
┃ ┗ 📜Exclusions.json
|
|
83
|
-
┃ ┗ 📂engine_dependencies
|
|
84
|
-
┃ ┗ 📜ConfigTool.json
|
|
85
|
-
┃ ┗ 📜Exclusions.json
|
|
86
|
-
```
|
|
87
|
-
### Scan running sample (CLI) - Local
|
|
88
|
-
|
|
89
|
-
> Complete the value in **.envdetlocal** file a set in execution environment
|
|
90
|
-
```
|
|
91
|
-
$ set -a
|
|
92
|
-
$ source .envdetlocal
|
|
93
|
-
$ set +a
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
devsecops-engine-tools --platform_devops local --remote_config_repo DevSecOps_Remote_Config --tool engine_iac
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
### Scan result sample (CLI)
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
____ _____ ____ ______ _ ______ __
|
|
105
|
-
/ __ \___ _ __/ ___/___ _____/ __ \____ _____ / ____/___ ____ _(_)___ ___ /_ __/___ ____ / /____
|
|
106
|
-
/ / / / _ \ | / /\__ \/ _ \/ ___/ / / / __ \/ ___/ / __/ / __ \/ __ `/ / __ \/ _ \ / / / __ \/ __ \/ / ___/
|
|
107
|
-
/ /_/ / __/ |/ /___/ / __/ /__/ /_/ / /_/ (__ ) / /___/ / / / /_/ / / / / / __/ / / / /_/ / /_/ / (__ )
|
|
108
|
-
/_____/\___/|___//____/\___/\___/\____/ .___/____/ /_____/_/ /_/\__, /_/_/ /_/\___/ /_/ \____/\____/_/____/
|
|
109
|
-
/_/ /____/
|
|
110
|
-
|
|
111
|
-
Secrets manager is not enabled to configure external checks
|
|
112
|
-
|
|
113
|
-
Below are all vulnerabilities detected.
|
|
114
|
-
╔══════════╦════════════╦════════════════════════════════════════════════════════════════════════════════════╦════════════════════════╗
|
|
115
|
-
║ Severity ║ ID ║ Description ║ Where ║
|
|
116
|
-
╠══════════╬════════════╬════════════════════════════════════════════════════════════════════════════════════╬════════════════════════╣
|
|
117
|
-
║ critical ║ CKV_K8S_37 ║ IAC-CKV_K8S_37 Minimize the admission of containers with capabilities assigned ║ /_AW1234/app.yaml ║
|
|
118
|
-
║ critical ║ CKV_K8S_20 ║ IAC-CKV_K8S_20 Containers should not run with allowPrivilegeEscalation ║ /_AW1234/app.yaml ║
|
|
119
|
-
║ critical ║ CKV_K8S_30 ║ IAC-CKV_K8S_30 Apply security context to your containers ║ /_AW1234/app.yaml ║
|
|
120
|
-
║ critical ║ CKV_K8S_23 ║ IAC-CKV_K8S_23 Minimize the admission of root containers ║ /_AW1234/app.yaml ║
|
|
121
|
-
║ high ║ CKV_AWS_20 ║ C-S3-005-AWS S3 buckets are accessible to public ║ /_AW1234/template.yaml ║
|
|
122
|
-
║ high ║ CKV_K8S_22 ║ IAC-CKV_K8S_22 Use read-only filesystem for containers where possible ║ /_AW1234/app.yaml ║
|
|
123
|
-
║ high ║ CKV_K8S_28 ║ IAC-CKV_K8S_28 Minimize the admission of containers with the NET_RAW capability ║ /_AW1234/app.yaml ║
|
|
124
|
-
║ high ║ CKV_K8S_38 ║ IAC-CKV_K8S_38 Ensure that Service Account Tokens are only mounted where necessary ║ /_AW1234/app.yaml ║
|
|
125
|
-
╚══════════╩════════════╩════════════════════════════════════════════════════════════════════════════════════╩════════════════════════╝
|
|
126
|
-
Security count issues (critical: 4, high: 4, medium: 0, low: 0) is greater than or equal to failure criteria (critical: 1, high: 8, medium: 10, low:15, operator: or)
|
|
127
|
-
✘Failed
|
|
128
|
-
|
|
129
|
-
Below are all compliances issues detected.
|
|
130
|
-
╔══════════╦═══════════╦════════════════════════════════════════════════════╦═══════════════════╗
|
|
131
|
-
║ Severity ║ ID ║ Description ║ Where ║
|
|
132
|
-
╠══════════╬═══════════╬════════════════════════════════════════════════════╬═══════════════════╣
|
|
133
|
-
║ critical ║ CKV_K8S_8 ║ IAC-CKV_K8S_8 Liveness Probe Should be Configured ║ /_AW1234/app.yaml ║
|
|
134
|
-
║ critical ║ CKV_K8S_9 ║ IAC-CKV_K8S_9 Readiness Probe Should be Configured ║ /_AW1234/app.yaml ║
|
|
135
|
-
╚══════════╩═══════════╩════════════════════════════════════════════════════╩═══════════════════╝
|
|
136
|
-
Compliance issues count (critical: 2) is greater than or equal to failure criteria (critical: 1)
|
|
137
|
-
✘Failed
|
|
138
|
-
|
|
139
|
-
Bellow are all the findings that were accepted.
|
|
140
|
-
╔══════════╦════════════╦═══════════════════╦═════════════╦══════════════╦══════════════════╗
|
|
141
|
-
║ Severity ║ ID ║ Where ║ Create Date ║ Expired Date ║ Reason ║
|
|
142
|
-
╠══════════╬════════════╬═══════════════════╬═════════════╬══════════════╬══════════════════╣
|
|
143
|
-
║ high ║ CKV_K8S_38 ║ /_AW1234/app.yaml ║ 18/11/2023 ║ 18/03/2024 ║ False Positive ║
|
|
144
|
-
╚══════════╩════════════╩═══════════════════╩═════════════╩══════════════╩══════════════════╝
|
|
145
|
-
|
|
146
|
-
message custom
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
# How can I help?
|
|
150
|
-
|
|
151
|
-
Review the issues, we hear new ideas. Read more [Contributing](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/docs/CONTRIBUTING.md)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
File without changes
|
{devsecops_engine_tools-1.7.12.dist-info → devsecops_engine_tools-1.7.14.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{devsecops_engine_tools-1.7.12.dist-info → devsecops_engine_tools-1.7.14.dist-info}/top_level.txt
RENAMED
|
File without changes
|