devsecops-engine-tools 1.59.0__py3-none-any.whl → 1.60.1__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/applications/runner_engine_core.py +15 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py +6 -3
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +8 -0
- devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py +4 -1
- devsecops_engine_tools/engine_dast/src/applications/runner_dast_scan.py +2 -2
- devsecops_engine_tools/engine_dast/src/domain/usecases/dast_scan.py +4 -2
- devsecops_engine_tools/engine_dast/src/infrastructure/entry_points/entry_point_dast.py +2 -1
- devsecops_engine_tools/engine_risk/src/applications/runner_engine_risk.py +2 -0
- devsecops_engine_tools/engine_risk/src/domain/usecases/get_exclusions.py +4 -2
- devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/entry_point_risk.py +4 -2
- devsecops_engine_tools/engine_sast/engine_code/src/applications/runner_engine_code.py +2 -1
- devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/code_scan.py +4 -2
- devsecops_engine_tools/engine_sast/engine_code/src/infrastructure/entry_points/entry_point_tool.py +2 -2
- devsecops_engine_tools/engine_sast/engine_iac/src/applications/runner_iac_scan.py +2 -1
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/context_iac.py +2 -1
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/tool_gateway.py +4 -5
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py +18 -15
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_deserealizator.py +11 -8
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py +230 -206
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_tool.py +123 -85
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_tool.py +80 -65
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/entry_point_tool.py +2 -2
- devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_scan.py +2 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +3 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +3 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +4 -4
- devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +2 -1
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/context_container.py +2 -1
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py +7 -2
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +53 -52
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +3 -3
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +50 -31
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +12 -7
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py +2 -1
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py +3 -2
- devsecops_engine_tools/version.py +1 -1
- {devsecops_engine_tools-1.59.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/METADATA +7 -7
- {devsecops_engine_tools-1.59.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/RECORD +41 -41
- {devsecops_engine_tools-1.59.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/WHEEL +0 -0
- {devsecops_engine_tools-1.59.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/entry_points.txt +0 -0
- {devsecops_engine_tools-1.59.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/top_level.txt +0 -0
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py
CHANGED
|
@@ -38,52 +38,6 @@ class ContainerScaScan:
|
|
|
38
38
|
self.pipeline_name = pipeline_name
|
|
39
39
|
self.context = context
|
|
40
40
|
|
|
41
|
-
def get_image(self, image_to_scan):
|
|
42
|
-
"""
|
|
43
|
-
Process the list of images.
|
|
44
|
-
|
|
45
|
-
Returns:
|
|
46
|
-
list: List of processed images.
|
|
47
|
-
"""
|
|
48
|
-
return self.tool_images.list_images(image_to_scan)
|
|
49
|
-
|
|
50
|
-
def get_base_image(self, matching_image):
|
|
51
|
-
"""
|
|
52
|
-
Process the base image.
|
|
53
|
-
|
|
54
|
-
Returns:
|
|
55
|
-
String: base image.
|
|
56
|
-
"""
|
|
57
|
-
return self.tool_images.get_base_image(matching_image)
|
|
58
|
-
|
|
59
|
-
def get_images_already_scanned(self):
|
|
60
|
-
"""
|
|
61
|
-
Create images scanned file if it does not exist and get the images that have already been scanned.
|
|
62
|
-
"""
|
|
63
|
-
scanned_images_file = os.path.join(os.getcwd(), "scanned_images.txt")
|
|
64
|
-
if not os.path.exists(scanned_images_file):
|
|
65
|
-
open(scanned_images_file, "w").close()
|
|
66
|
-
with open(scanned_images_file, "r") as file:
|
|
67
|
-
images_scanned = file.read().splitlines()
|
|
68
|
-
return images_scanned
|
|
69
|
-
|
|
70
|
-
def set_image_scanned(self, result_file):
|
|
71
|
-
"""
|
|
72
|
-
Write in scanned_images.txt the result file
|
|
73
|
-
"""
|
|
74
|
-
with open("scanned_images.txt", "a") as file:
|
|
75
|
-
file.write(result_file + "\n")
|
|
76
|
-
|
|
77
|
-
def validate_base_image_date(self, matching_image, referenced_date):
|
|
78
|
-
"""
|
|
79
|
-
Process the base image date validation.
|
|
80
|
-
|
|
81
|
-
Returns:
|
|
82
|
-
string: base image date.
|
|
83
|
-
"""
|
|
84
|
-
return self.tool_images.validate_base_image_date(
|
|
85
|
-
matching_image, referenced_date
|
|
86
|
-
)
|
|
87
41
|
|
|
88
42
|
def process(self):
|
|
89
43
|
"""
|
|
@@ -94,15 +48,15 @@ class ContainerScaScan:
|
|
|
94
48
|
"""
|
|
95
49
|
base_image = None
|
|
96
50
|
image_scanned = None
|
|
97
|
-
matching_image = self.
|
|
51
|
+
matching_image = self._get_image(self.image_to_scan)
|
|
98
52
|
if self.remote_config["GET_IMAGE_BASE"]:
|
|
99
|
-
base_image = self.
|
|
53
|
+
base_image = self._get_base_image(matching_image)
|
|
100
54
|
if self.remote_config["VALIDATE_BASE_IMAGE_DATE"][
|
|
101
55
|
"ENABLED"
|
|
102
56
|
] and not self.exclusions.get(self.pipeline_name, {}).get(
|
|
103
57
|
"VALIDATE_BASE_IMAGE_DATE"
|
|
104
58
|
):
|
|
105
|
-
self.
|
|
59
|
+
self._validate_base_image_date(
|
|
106
60
|
matching_image,
|
|
107
61
|
self.remote_config["VALIDATE_BASE_IMAGE_DATE"]["REFERENCE_IMAGE_DATE"],
|
|
108
62
|
)
|
|
@@ -114,7 +68,7 @@ class ContainerScaScan:
|
|
|
114
68
|
if matching_image:
|
|
115
69
|
image_name = matching_image.tags[0]
|
|
116
70
|
result_file = image_name.replace("/", "_") + "_scan_result.json"
|
|
117
|
-
if image_name in self.
|
|
71
|
+
if image_name in self._get_images_already_scanned():
|
|
118
72
|
print(f"The image {image_name} has already been scanned previously.")
|
|
119
73
|
return image_scanned, base_image, sbom_components
|
|
120
74
|
image_scanned, sbom_components = self.tool_run.run_tool_container_sca(
|
|
@@ -127,7 +81,7 @@ class ContainerScaScan:
|
|
|
127
81
|
self.exclusions,
|
|
128
82
|
generate_sbom,
|
|
129
83
|
)
|
|
130
|
-
self.
|
|
84
|
+
self._set_image_scanned(image_name)
|
|
131
85
|
else:
|
|
132
86
|
print(f"'Not image found for {self.image_to_scan}'. Tool skipped.")
|
|
133
87
|
return image_scanned, base_image, sbom_components
|
|
@@ -142,5 +96,52 @@ class ContainerScaScan:
|
|
|
142
96
|
context_flag = self.context
|
|
143
97
|
if context_flag == "true":
|
|
144
98
|
self.tool_deseralizator.get_container_context_from_results(image_scanned)
|
|
145
|
-
|
|
99
|
+
|
|
146
100
|
return self.tool_deseralizator.get_list_findings(image_scanned)
|
|
101
|
+
|
|
102
|
+
def _get_image(self, image_to_scan):
|
|
103
|
+
"""
|
|
104
|
+
Process the list of images.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
list: List of processed images.
|
|
108
|
+
"""
|
|
109
|
+
return self.tool_images.list_images(image_to_scan)
|
|
110
|
+
|
|
111
|
+
def _get_base_image(self, matching_image):
|
|
112
|
+
"""
|
|
113
|
+
Process the base image.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
String: base image.
|
|
117
|
+
"""
|
|
118
|
+
return self.tool_images.get_base_image(matching_image)
|
|
119
|
+
|
|
120
|
+
def _validate_base_image_date(self, matching_image, referenced_date):
|
|
121
|
+
"""
|
|
122
|
+
Process the base image date validation.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
string: base image date.
|
|
126
|
+
"""
|
|
127
|
+
return self.tool_images.validate_base_image_date(
|
|
128
|
+
matching_image, referenced_date
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
def _get_images_already_scanned(self):
|
|
132
|
+
"""
|
|
133
|
+
Create images scanned file if it does not exist and get the images that have already been scanned.
|
|
134
|
+
"""
|
|
135
|
+
scanned_images_file = os.path.join(os.getcwd(), "scanned_images.txt")
|
|
136
|
+
if not os.path.exists(scanned_images_file):
|
|
137
|
+
open(scanned_images_file, "w").close()
|
|
138
|
+
with open(scanned_images_file, "r") as file:
|
|
139
|
+
images_scanned = file.read().splitlines()
|
|
140
|
+
return images_scanned
|
|
141
|
+
|
|
142
|
+
def _set_image_scanned(self, result_file):
|
|
143
|
+
"""
|
|
144
|
+
Write in scanned_images.txt the result file
|
|
145
|
+
"""
|
|
146
|
+
with open("scanned_images.txt", "a") as file:
|
|
147
|
+
file.write(result_file + "\n")
|
|
@@ -30,7 +30,7 @@ class PrismaDeserealizator(DeseralizatorGateway):
|
|
|
30
30
|
image_object = file.read()
|
|
31
31
|
|
|
32
32
|
json_data = json.loads(image_object)
|
|
33
|
-
console_url = json_data.get("consoleURL",False)
|
|
33
|
+
console_url = json_data.get("consoleURL", False)
|
|
34
34
|
if console_url:
|
|
35
35
|
print(f"Console URL: {console_url}")
|
|
36
36
|
vulnerabilities_data = (
|
|
@@ -67,7 +67,7 @@ class PrismaDeserealizator(DeseralizatorGateway):
|
|
|
67
67
|
list_open_vulnerabilities.extend(vulnerabilities)
|
|
68
68
|
|
|
69
69
|
return list_open_vulnerabilities
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
def get_container_context_from_results(self, image_scanned):
|
|
72
|
-
#TODO: Implement this method
|
|
72
|
+
# TODO: Implement this method
|
|
73
73
|
pass
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.context_container import
|
|
1
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.context_container import (
|
|
2
|
+
ContextContainer,
|
|
3
|
+
)
|
|
2
4
|
from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateways.deserealizator_gateway import (
|
|
3
5
|
DeseralizatorGateway,
|
|
4
6
|
)
|
|
@@ -10,20 +12,9 @@ from dataclasses import asdict, dataclass
|
|
|
10
12
|
import json
|
|
11
13
|
from datetime import datetime, timezone
|
|
12
14
|
|
|
15
|
+
|
|
13
16
|
@dataclass
|
|
14
17
|
class TrivyDeserializator(DeseralizatorGateway):
|
|
15
|
-
def check_date_format(self, vul):
|
|
16
|
-
try:
|
|
17
|
-
published_date_cve=datetime.strptime(
|
|
18
|
-
vul.get("PublishedDate"),
|
|
19
|
-
"%Y-%m-%dT%H:%M:%S.%fZ"
|
|
20
|
-
).replace(tzinfo=timezone.utc).isoformat()
|
|
21
|
-
except:
|
|
22
|
-
published_date_cve=datetime.strptime(
|
|
23
|
-
vul.get("PublishedDate"),
|
|
24
|
-
"%Y-%m-%dT%H:%M:%SZ"
|
|
25
|
-
).replace(tzinfo=timezone.utc).isoformat()
|
|
26
|
-
return published_date_cve
|
|
27
18
|
|
|
28
19
|
def get_list_findings(self, image_scanned) -> "list[Finding]":
|
|
29
20
|
list_open_vulnerabilities = []
|
|
@@ -34,23 +25,23 @@ class TrivyDeserializator(DeseralizatorGateway):
|
|
|
34
25
|
vulnerabilities = [
|
|
35
26
|
Finding(
|
|
36
27
|
id=vul.get("VulnerabilityID", ""),
|
|
37
|
-
cvss=str(
|
|
38
|
-
(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
28
|
+
cvss=str(
|
|
29
|
+
next(
|
|
30
|
+
(
|
|
31
|
+
v["V3Score"]
|
|
32
|
+
for v in vul["CVSS"].values()
|
|
33
|
+
if "V3Score" in v
|
|
34
|
+
),
|
|
35
|
+
None,
|
|
36
|
+
)
|
|
37
|
+
),
|
|
45
38
|
where=vul.get("PkgName", "")
|
|
46
39
|
+ " "
|
|
47
40
|
+ vul.get("InstalledVersion", ""),
|
|
48
41
|
description=vul.get("Description", "").replace("\n", "")[:150],
|
|
49
42
|
severity=vul.get("Severity", "").lower(),
|
|
50
|
-
identification_date=datetime.now().strftime(
|
|
51
|
-
|
|
52
|
-
),
|
|
53
|
-
published_date_cve=self.check_date_format(vul),
|
|
43
|
+
identification_date=datetime.now().strftime("%Y-%m-%dT%H:%M:%S%z"),
|
|
44
|
+
published_date_cve=self._check_date_format(vul),
|
|
54
45
|
module="engine_container",
|
|
55
46
|
category=Category.VULNERABILITY,
|
|
56
47
|
requirements=vul.get("FixedVersion") or vul.get("Status", ""),
|
|
@@ -61,8 +52,10 @@ class TrivyDeserializator(DeseralizatorGateway):
|
|
|
61
52
|
]
|
|
62
53
|
list_open_vulnerabilities.extend(vulnerabilities)
|
|
63
54
|
return list_open_vulnerabilities
|
|
64
|
-
|
|
65
|
-
def get_container_context_from_results(
|
|
55
|
+
|
|
56
|
+
def get_container_context_from_results(
|
|
57
|
+
self, image_scanned
|
|
58
|
+
) -> "list[ContextContainer]":
|
|
66
59
|
context_container_list = []
|
|
67
60
|
|
|
68
61
|
with open(image_scanned, "rb") as file:
|
|
@@ -96,9 +89,11 @@ class TrivyDeserializator(DeseralizatorGateway):
|
|
|
96
89
|
description=vul.get("Description", "unknown").replace("\n", ""),
|
|
97
90
|
os_type=result.get("Type", "unknown"),
|
|
98
91
|
layer_digest=vul.get("Layer", {}).get("DiffID", "unknown"),
|
|
99
|
-
published_date=
|
|
100
|
-
|
|
101
|
-
|
|
92
|
+
published_date=(
|
|
93
|
+
self._check_date_format(vul)
|
|
94
|
+
if vul.get("PublishedDate")
|
|
95
|
+
else None
|
|
96
|
+
),
|
|
102
97
|
last_modified_date=vul.get("LastModifiedDate", "unknown"),
|
|
103
98
|
references=vul.get("References", "unknown"),
|
|
104
99
|
source_tool="Trivy",
|
|
@@ -106,5 +101,29 @@ class TrivyDeserializator(DeseralizatorGateway):
|
|
|
106
101
|
context_container_list.append(context_container)
|
|
107
102
|
|
|
108
103
|
print("===== BEGIN CONTEXT OUTPUT =====")
|
|
109
|
-
print(
|
|
104
|
+
print(
|
|
105
|
+
json.dumps(
|
|
106
|
+
{
|
|
107
|
+
"container_context": [
|
|
108
|
+
asdict(context) for context in context_container_list
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
indent=2,
|
|
112
|
+
)
|
|
113
|
+
)
|
|
110
114
|
print("===== END CONTEXT OUTPUT =====")
|
|
115
|
+
|
|
116
|
+
def _check_date_format(self, vul):
|
|
117
|
+
try:
|
|
118
|
+
published_date_cve = (
|
|
119
|
+
datetime.strptime(vul.get("PublishedDate"), "%Y-%m-%dT%H:%M:%S.%fZ")
|
|
120
|
+
.replace(tzinfo=timezone.utc)
|
|
121
|
+
.isoformat()
|
|
122
|
+
)
|
|
123
|
+
except:
|
|
124
|
+
published_date_cve = (
|
|
125
|
+
datetime.strptime(vul.get("PublishedDate"), "%Y-%m-%dT%H:%M:%SZ")
|
|
126
|
+
.replace(tzinfo=timezone.utc)
|
|
127
|
+
.isoformat()
|
|
128
|
+
)
|
|
129
|
+
return published_date_cve
|
|
@@ -16,17 +16,22 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
|
16
16
|
def init_engine_sca_rm(
|
|
17
17
|
tool_run,
|
|
18
18
|
tool_remote,
|
|
19
|
+
remote_config_source_gateway,
|
|
19
20
|
tool_images,
|
|
20
21
|
tool_deseralizator,
|
|
21
22
|
dict_args,
|
|
22
23
|
secret_tool,
|
|
23
24
|
tool,
|
|
24
25
|
):
|
|
25
|
-
remote_config =
|
|
26
|
-
dict_args["remote_config_repo"],
|
|
26
|
+
remote_config = remote_config_source_gateway.get_remote_config(
|
|
27
|
+
dict_args["remote_config_repo"],
|
|
28
|
+
"engine_sca/engine_container/ConfigTool.json",
|
|
29
|
+
dict_args["remote_config_branch"],
|
|
27
30
|
)
|
|
28
|
-
exclusions =
|
|
29
|
-
dict_args["remote_config_repo"],
|
|
31
|
+
exclusions = remote_config_source_gateway.get_remote_config(
|
|
32
|
+
dict_args["remote_config_repo"],
|
|
33
|
+
"engine_sca/engine_container/Exclusions.json",
|
|
34
|
+
dict_args["remote_config_branch"],
|
|
30
35
|
)
|
|
31
36
|
pipeline_name = tool_remote.get_variable("pipeline_name")
|
|
32
37
|
handle_remote_config_patterns = HandleRemoteConfigPatterns(
|
|
@@ -54,7 +59,7 @@ def init_engine_sca_rm(
|
|
|
54
59
|
image_to_scan,
|
|
55
60
|
exclusions,
|
|
56
61
|
pipeline_name,
|
|
57
|
-
context
|
|
62
|
+
context=dict_args["context"],
|
|
58
63
|
)
|
|
59
64
|
image_scanned, base_image, sbom_components = container_sca_scan.process()
|
|
60
65
|
if image_scanned:
|
|
@@ -63,7 +68,7 @@ def init_engine_sca_rm(
|
|
|
63
68
|
print("Tool skipped by DevSecOps policy")
|
|
64
69
|
dict_args["send_metrics"] = "false"
|
|
65
70
|
dict_args["use_vulnerability_management"] = "false"
|
|
66
|
-
|
|
67
|
-
core_input = input_core.set_input_core(image_scanned,base_image)
|
|
71
|
+
|
|
72
|
+
core_input = input_core.set_input_core(image_scanned, base_image)
|
|
68
73
|
|
|
69
74
|
return deseralized, core_input, sbom_components
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py
CHANGED
|
@@ -16,7 +16,7 @@ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.en
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def runner_engine_dependencies(
|
|
19
|
-
dict_args, config_tool, secret_tool, devops_platform_gateway, sbom_tool_gateway
|
|
19
|
+
dict_args, config_tool, secret_tool, devops_platform_gateway, remote_config_source_gateway, sbom_tool_gateway
|
|
20
20
|
):
|
|
21
21
|
try:
|
|
22
22
|
tools_mapping = {
|
|
@@ -40,6 +40,7 @@ def runner_engine_dependencies(
|
|
|
40
40
|
return init_engine_dependencies(
|
|
41
41
|
tool_run,
|
|
42
42
|
devops_platform_gateway,
|
|
43
|
+
remote_config_source_gateway,
|
|
43
44
|
tool_deserializator,
|
|
44
45
|
dict_args,
|
|
45
46
|
secret_tool,
|
|
@@ -25,18 +25,19 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
|
25
25
|
def init_engine_dependencies(
|
|
26
26
|
tool_run,
|
|
27
27
|
tool_remote: DevopsPlatformGateway,
|
|
28
|
+
remote_config_source_gateway: DevopsPlatformGateway,
|
|
28
29
|
tool_deserializator,
|
|
29
30
|
dict_args,
|
|
30
31
|
secret_tool,
|
|
31
32
|
config_tool,
|
|
32
33
|
tool_sbom: SbomManagerGateway,
|
|
33
34
|
):
|
|
34
|
-
remote_config =
|
|
35
|
+
remote_config = remote_config_source_gateway.get_remote_config(
|
|
35
36
|
dict_args["remote_config_repo"],
|
|
36
37
|
"engine_sca/engine_dependencies/ConfigTool.json",
|
|
37
38
|
dict_args["remote_config_branch"]
|
|
38
39
|
)
|
|
39
|
-
exclusions =
|
|
40
|
+
exclusions = remote_config_source_gateway.get_remote_config(
|
|
40
41
|
dict_args["remote_config_repo"],
|
|
41
42
|
"engine_sca/engine_dependencies/Exclusions.json",
|
|
42
43
|
dict_args["remote_config_branch"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '1.
|
|
1
|
+
version = '1.60.1'
|
{devsecops_engine_tools-1.59.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: devsecops-engine-tools
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.60.1
|
|
4
4
|
Summary: Tool for DevSecOps strategy
|
|
5
5
|
Home-page: https://github.com/bancolombia/devsecops-engine-tools
|
|
6
6
|
Author: Bancolombia DevSecOps Team
|
|
@@ -76,7 +76,7 @@ pip3 install devsecops-engine-tools
|
|
|
76
76
|
### Scan running - flags (CLI)
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
devsecops-engine-tools --platform_devops ["local","azure","github"] --remote_config_repo ["remote_config_repo"] --remote_config_branch ["remote_config_branch"] --module ["engine_iac", "engine_dast", "engine_secret", "engine_dependencies", "engine_container", "engine_risk", "engine_code"] --tool ["nuclei", "bearer", "checkov", "kics", "kubescape", "trufflehog", "gitleaks", "prisma", "trivy", "xray", "dependency_check"] --folder_path ["Folder path scan engine_iac, engine_code, engine_dependencies and engine_secret"] --platform ["k8s","cloudformation","docker", "openapi", "terraform"] --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"] --token_external_checks ["token_external_checks"] --xray_mode ["scan", "audit","build-scan"] --image_to_scan ["image_to_scan"] --dast_file_path ["dast_file_path"]
|
|
79
|
+
devsecops-engine-tools --platform_devops ["local","azure","github"] --remote_config_source ["local","azure","github"] --remote_config_repo ["remote_config_repo"] --remote_config_branch ["remote_config_branch"] --module ["engine_iac", "engine_dast", "engine_secret", "engine_dependencies", "engine_container", "engine_risk", "engine_code"] --tool ["nuclei", "bearer", "checkov", "kics", "kubescape", "trufflehog", "gitleaks", "prisma", "trivy", "xray", "dependency_check"] --folder_path ["Folder path scan engine_iac, engine_code, engine_dependencies and engine_secret"] --platform ["k8s","cloudformation","docker", "openapi", "terraform"] --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"] --token_external_checks ["token_external_checks"] --xray_mode ["scan", "audit","build-scan"] --image_to_scan ["image_to_scan"] --dast_file_path ["dast_file_path"]
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
### Structure Remote Config
|
|
@@ -186,7 +186,7 @@ $ set +a
|
|
|
186
186
|
|
|
187
187
|
|
|
188
188
|
```bash
|
|
189
|
-
devsecops-engine-tools --platform_devops local --remote_config_repo DevSecOps_Remote_Config --module engine_iac
|
|
189
|
+
devsecops-engine-tools --platform_devops local --remote_config_source local --remote_config_repo DevSecOps_Remote_Config --module engine_iac
|
|
190
190
|
|
|
191
191
|
```
|
|
192
192
|
|
|
@@ -200,13 +200,13 @@ devsecops-engine-tools --platform_devops local --remote_config_repo DevSecOps_Re
|
|
|
200
200
|
docker pull bancolombia/devsecops-engine-tools
|
|
201
201
|
```
|
|
202
202
|
```bash
|
|
203
|
-
docker run --rm -v ./folder_to_analyze:/folder_to_analyze bancolombia/devsecops-engine-tools:latest devsecops-engine-tools --platform_devops local --remote_config_repo docker_default_remote_config --module engine_iac --folder_path /folder_to_analyze
|
|
203
|
+
docker run --rm -v ./folder_to_analyze:/folder_to_analyze bancolombia/devsecops-engine-tools:latest devsecops-engine-tools --platform_devops local --remote_config_source local --remote_config_repo docker_default_remote_config --module engine_iac --folder_path /folder_to_analyze
|
|
204
204
|
```
|
|
205
205
|
|
|
206
206
|
The docker image have it own default remote config with basic configuration called docker_default_remote_config, but you can define your own config and pass it as volume
|
|
207
207
|
|
|
208
208
|
```bash
|
|
209
|
-
docker run --rm -v ./folder_to_analyze:/folder_to_analyze -v ./custom_remote_config:/custom_remote_config bancolombia/devsecops-engine-tools:latest devsecops-engine-tools --platform_devops local --remote_config_repo custom_remote_config --module engine_iac --folder_path /folder_to_analyze
|
|
209
|
+
docker run --rm -v ./folder_to_analyze:/folder_to_analyze -v ./custom_remote_config:/custom_remote_config bancolombia/devsecops-engine-tools:latest devsecops-engine-tools --platform_devops local --remote_config_source local --remote_config_repo custom_remote_config --module engine_iac --folder_path /folder_to_analyze
|
|
210
210
|
```
|
|
211
211
|
|
|
212
212
|
|
|
@@ -236,7 +236,7 @@ stages:
|
|
|
236
236
|
- script: |
|
|
237
237
|
# Install devsecops-engine-tools
|
|
238
238
|
pip3 install -q devsecops-engine-tools
|
|
239
|
-
devsecops-engine-tools --platform_devops azure --remote_config_repo remote_config --module engine_iac
|
|
239
|
+
devsecops-engine-tools --platform_devops azure --remote_config_source azure --remote_config_repo remote_config --module engine_iac
|
|
240
240
|
displayName: "Engine Tools"
|
|
241
241
|
env:
|
|
242
242
|
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
|
|
@@ -287,7 +287,7 @@ jobs:
|
|
|
287
287
|
run: |
|
|
288
288
|
# Install devsecops-engine-tools
|
|
289
289
|
pip3 install -q devsecops-engine-tools
|
|
290
|
-
output=$(devsecops-engine-tools --platform_devops github --remote_config_repo remote_config --module engine_iac)
|
|
290
|
+
output=$(devsecops-engine-tools --platform_devops github --remote_config_source github --remote_config_repo remote_config --module engine_iac)
|
|
291
291
|
echo "$output"
|
|
292
292
|
if [[ $output == *"✘Failed"* ]]; then
|
|
293
293
|
exit 1
|