regscale-cli 6.27.2.0__py3-none-any.whl → 6.28.0.0__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 regscale-cli might be problematic. Click here for more details.
- regscale/_version.py +1 -1
- regscale/core/app/application.py +1 -0
- regscale/core/app/internal/control_editor.py +73 -21
- regscale/core/app/internal/login.py +4 -1
- regscale/core/app/internal/model_editor.py +219 -64
- regscale/core/app/utils/app_utils.py +11 -2
- regscale/core/login.py +21 -4
- regscale/core/utils/date.py +77 -1
- regscale/dev/cli.py +26 -0
- regscale/dev/version.py +72 -0
- regscale/integrations/commercial/__init__.py +15 -1
- regscale/integrations/commercial/amazon/amazon/__init__.py +0 -0
- regscale/integrations/commercial/amazon/amazon/common.py +204 -0
- regscale/integrations/commercial/amazon/common.py +48 -58
- regscale/integrations/commercial/aws/audit_manager_compliance.py +2671 -0
- regscale/integrations/commercial/aws/cli.py +3093 -55
- regscale/integrations/commercial/aws/cloudtrail_control_mappings.py +333 -0
- regscale/integrations/commercial/aws/cloudtrail_evidence.py +501 -0
- regscale/integrations/commercial/aws/cloudwatch_control_mappings.py +357 -0
- regscale/integrations/commercial/aws/cloudwatch_evidence.py +490 -0
- regscale/integrations/commercial/aws/config_compliance.py +914 -0
- regscale/integrations/commercial/aws/conformance_pack_mappings.py +198 -0
- regscale/integrations/commercial/aws/evidence_generator.py +283 -0
- regscale/integrations/commercial/aws/guardduty_control_mappings.py +340 -0
- regscale/integrations/commercial/aws/guardduty_evidence.py +1053 -0
- regscale/integrations/commercial/aws/iam_control_mappings.py +368 -0
- regscale/integrations/commercial/aws/iam_evidence.py +574 -0
- regscale/integrations/commercial/aws/inventory/__init__.py +223 -22
- regscale/integrations/commercial/aws/inventory/base.py +107 -5
- regscale/integrations/commercial/aws/inventory/resources/audit_manager.py +513 -0
- regscale/integrations/commercial/aws/inventory/resources/cloudtrail.py +315 -0
- regscale/integrations/commercial/aws/inventory/resources/cloudtrail_logs_metadata.py +476 -0
- regscale/integrations/commercial/aws/inventory/resources/cloudwatch.py +191 -0
- regscale/integrations/commercial/aws/inventory/resources/compute.py +66 -9
- regscale/integrations/commercial/aws/inventory/resources/config.py +464 -0
- regscale/integrations/commercial/aws/inventory/resources/containers.py +74 -9
- regscale/integrations/commercial/aws/inventory/resources/database.py +106 -31
- regscale/integrations/commercial/aws/inventory/resources/guardduty.py +286 -0
- regscale/integrations/commercial/aws/inventory/resources/iam.py +470 -0
- regscale/integrations/commercial/aws/inventory/resources/inspector.py +476 -0
- regscale/integrations/commercial/aws/inventory/resources/integration.py +175 -61
- regscale/integrations/commercial/aws/inventory/resources/kms.py +447 -0
- regscale/integrations/commercial/aws/inventory/resources/networking.py +103 -67
- regscale/integrations/commercial/aws/inventory/resources/s3.py +394 -0
- regscale/integrations/commercial/aws/inventory/resources/security.py +268 -72
- regscale/integrations/commercial/aws/inventory/resources/securityhub.py +473 -0
- regscale/integrations/commercial/aws/inventory/resources/storage.py +53 -29
- regscale/integrations/commercial/aws/inventory/resources/systems_manager.py +657 -0
- regscale/integrations/commercial/aws/inventory/resources/vpc.py +655 -0
- regscale/integrations/commercial/aws/kms_control_mappings.py +288 -0
- regscale/integrations/commercial/aws/kms_evidence.py +879 -0
- regscale/integrations/commercial/aws/ocsf/__init__.py +7 -0
- regscale/integrations/commercial/aws/ocsf/constants.py +115 -0
- regscale/integrations/commercial/aws/ocsf/mapper.py +435 -0
- regscale/integrations/commercial/aws/org_control_mappings.py +286 -0
- regscale/integrations/commercial/aws/org_evidence.py +666 -0
- regscale/integrations/commercial/aws/s3_control_mappings.py +356 -0
- regscale/integrations/commercial/aws/s3_evidence.py +632 -0
- regscale/integrations/commercial/aws/scanner.py +853 -205
- regscale/integrations/commercial/aws/security_hub.py +319 -0
- regscale/integrations/commercial/aws/session_manager.py +282 -0
- regscale/integrations/commercial/aws/ssm_control_mappings.py +291 -0
- regscale/integrations/commercial/aws/ssm_evidence.py +492 -0
- regscale/integrations/commercial/synqly/query_builder.py +4 -1
- regscale/integrations/compliance_integration.py +308 -38
- regscale/integrations/control_matcher.py +78 -23
- regscale/integrations/due_date_handler.py +3 -0
- regscale/integrations/public/csam/csam.py +572 -763
- regscale/integrations/public/csam/csam_agency_defined.py +179 -0
- regscale/integrations/public/csam/csam_common.py +154 -0
- regscale/integrations/public/csam/csam_controls.py +432 -0
- regscale/integrations/public/csam/csam_poam.py +124 -0
- regscale/integrations/public/fedramp/click.py +17 -4
- regscale/integrations/public/fedramp/fedramp_cis_crm.py +271 -62
- regscale/integrations/public/fedramp/poam/scanner.py +74 -7
- regscale/integrations/scanner_integration.py +415 -85
- regscale/models/integration_models/cisa_kev_data.json +80 -20
- regscale/models/integration_models/synqly_models/capabilities.json +1 -1
- regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +44 -3
- regscale/models/integration_models/synqly_models/ocsf_mapper.py +41 -12
- regscale/models/platform.py +3 -0
- regscale/models/regscale_models/__init__.py +5 -0
- regscale/models/regscale_models/assessment.py +2 -1
- regscale/models/regscale_models/component.py +1 -1
- regscale/models/regscale_models/control_implementation.py +55 -24
- regscale/models/regscale_models/control_objective.py +74 -5
- regscale/models/regscale_models/file.py +2 -0
- regscale/models/regscale_models/issue.py +2 -5
- regscale/models/regscale_models/organization.py +3 -0
- regscale/models/regscale_models/regscale_model.py +17 -5
- regscale/models/regscale_models/security_plan.py +1 -0
- regscale/regscale.py +11 -1
- {regscale_cli-6.27.2.0.dist-info → regscale_cli-6.28.0.0.dist-info}/METADATA +1 -1
- {regscale_cli-6.27.2.0.dist-info → regscale_cli-6.28.0.0.dist-info}/RECORD +140 -57
- tests/regscale/core/test_login.py +171 -4
- tests/regscale/integrations/commercial/aws/__init__.py +0 -0
- tests/regscale/integrations/commercial/aws/test_audit_manager_compliance.py +1304 -0
- tests/regscale/integrations/commercial/aws/test_audit_manager_evidence_aggregation.py +341 -0
- tests/regscale/integrations/commercial/aws/test_aws_audit_manager_collector.py +1155 -0
- tests/regscale/integrations/commercial/aws/test_aws_cloudtrail_collector.py +534 -0
- tests/regscale/integrations/commercial/aws/test_aws_config_collector.py +400 -0
- tests/regscale/integrations/commercial/aws/test_aws_guardduty_collector.py +315 -0
- tests/regscale/integrations/commercial/aws/test_aws_iam_collector.py +458 -0
- tests/regscale/integrations/commercial/aws/test_aws_inspector_collector.py +353 -0
- tests/regscale/integrations/commercial/aws/test_aws_inventory_integration.py +530 -0
- tests/regscale/integrations/commercial/aws/test_aws_kms_collector.py +919 -0
- tests/regscale/integrations/commercial/aws/test_aws_s3_collector.py +722 -0
- tests/regscale/integrations/commercial/aws/test_aws_scanner_integration.py +722 -0
- tests/regscale/integrations/commercial/aws/test_aws_securityhub_collector.py +792 -0
- tests/regscale/integrations/commercial/aws/test_aws_systems_manager_collector.py +918 -0
- tests/regscale/integrations/commercial/aws/test_aws_vpc_collector.py +996 -0
- tests/regscale/integrations/commercial/aws/test_cli_evidence.py +431 -0
- tests/regscale/integrations/commercial/aws/test_cloudtrail_control_mappings.py +452 -0
- tests/regscale/integrations/commercial/aws/test_cloudtrail_evidence.py +788 -0
- tests/regscale/integrations/commercial/aws/test_config_compliance.py +298 -0
- tests/regscale/integrations/commercial/aws/test_conformance_pack_mappings.py +200 -0
- tests/regscale/integrations/commercial/aws/test_evidence_generator.py +386 -0
- tests/regscale/integrations/commercial/aws/test_guardduty_control_mappings.py +564 -0
- tests/regscale/integrations/commercial/aws/test_guardduty_evidence.py +1041 -0
- tests/regscale/integrations/commercial/aws/test_iam_control_mappings.py +718 -0
- tests/regscale/integrations/commercial/aws/test_iam_evidence.py +1375 -0
- tests/regscale/integrations/commercial/aws/test_kms_control_mappings.py +656 -0
- tests/regscale/integrations/commercial/aws/test_kms_evidence.py +1163 -0
- tests/regscale/integrations/commercial/aws/test_ocsf_mapper.py +370 -0
- tests/regscale/integrations/commercial/aws/test_org_control_mappings.py +546 -0
- tests/regscale/integrations/commercial/aws/test_org_evidence.py +1240 -0
- tests/regscale/integrations/commercial/aws/test_s3_control_mappings.py +672 -0
- tests/regscale/integrations/commercial/aws/test_s3_evidence.py +987 -0
- tests/regscale/integrations/commercial/aws/test_scanner_evidence.py +373 -0
- tests/regscale/integrations/commercial/aws/test_security_hub_config_filtering.py +539 -0
- tests/regscale/integrations/commercial/aws/test_session_manager.py +516 -0
- tests/regscale/integrations/commercial/aws/test_ssm_control_mappings.py +588 -0
- tests/regscale/integrations/commercial/aws/test_ssm_evidence.py +735 -0
- tests/regscale/integrations/commercial/test_aws.py +55 -56
- tests/regscale/integrations/test_control_matcher.py +24 -0
- tests/regscale/models/test_control_implementation.py +118 -3
- {regscale_cli-6.27.2.0.dist-info → regscale_cli-6.28.0.0.dist-info}/LICENSE +0 -0
- {regscale_cli-6.27.2.0.dist-info → regscale_cli-6.28.0.0.dist-info}/WHEEL +0 -0
- {regscale_cli-6.27.2.0.dist-info → regscale_cli-6.28.0.0.dist-info}/entry_points.txt +0 -0
- {regscale_cli-6.27.2.0.dist-info → regscale_cli-6.28.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,58 +1,118 @@
|
|
|
1
1
|
"""AWS security resource collectors."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Any
|
|
3
|
+
from typing import Dict, List, Any, Optional
|
|
4
4
|
|
|
5
|
+
from regscale.integrations.commercial.aws.inventory.resources.audit_manager import AuditManagerCollector
|
|
6
|
+
from regscale.integrations.commercial.aws.inventory.resources.cloudtrail import CloudTrailCollector
|
|
7
|
+
from regscale.integrations.commercial.aws.inventory.resources.config import ConfigCollector
|
|
8
|
+
from regscale.integrations.commercial.aws.inventory.resources.guardduty import GuardDutyCollector
|
|
9
|
+
from regscale.integrations.commercial.aws.inventory.resources.iam import IAMCollector
|
|
10
|
+
from regscale.integrations.commercial.aws.inventory.resources.inspector import InspectorCollector
|
|
11
|
+
from regscale.integrations.commercial.aws.inventory.resources.kms import KMSCollector
|
|
12
|
+
from regscale.integrations.commercial.aws.inventory.resources.securityhub import SecurityHubCollector
|
|
5
13
|
from ..base import BaseCollector
|
|
6
14
|
|
|
7
15
|
|
|
8
16
|
class SecurityCollector(BaseCollector):
|
|
9
17
|
"""Collector for AWS security resources."""
|
|
10
18
|
|
|
11
|
-
def
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
session: Any,
|
|
22
|
+
region: str,
|
|
23
|
+
account_id: Optional[str] = None,
|
|
24
|
+
tags: Optional[Dict[str, str]] = None,
|
|
25
|
+
enabled_services: Optional[Dict[str, bool]] = None,
|
|
26
|
+
collect_findings: bool = True,
|
|
27
|
+
):
|
|
12
28
|
"""
|
|
13
|
-
|
|
29
|
+
Initialize security collector.
|
|
14
30
|
|
|
15
|
-
:
|
|
16
|
-
:
|
|
31
|
+
:param session: AWS session to use for API calls
|
|
32
|
+
:param str region: AWS region to collect from
|
|
33
|
+
:param str account_id: Optional AWS account ID to filter resources
|
|
34
|
+
:param dict tags: Optional tags to filter resources (key-value pairs)
|
|
35
|
+
:param dict enabled_services: Optional dict of service names to boolean flags for enabling/disabling collection
|
|
36
|
+
:param bool collect_findings: Whether to collect security findings (GuardDuty, Security Hub, Inspector)
|
|
37
|
+
"""
|
|
38
|
+
super().__init__(session, region)
|
|
39
|
+
self.account_id = account_id
|
|
40
|
+
self.tags = tags or {}
|
|
41
|
+
self.enabled_services = enabled_services or {}
|
|
42
|
+
self.collect_findings = collect_findings
|
|
43
|
+
|
|
44
|
+
def get_cloudtrail_info(self) -> Dict[str, Any]:
|
|
45
|
+
"""
|
|
46
|
+
Get information about CloudTrail trails.
|
|
47
|
+
|
|
48
|
+
:return: Dictionary containing CloudTrail trail information
|
|
49
|
+
:rtype: Dict[str, Any]
|
|
17
50
|
"""
|
|
18
|
-
iam_info = {"Users": [], "Roles": []}
|
|
19
51
|
try:
|
|
20
|
-
|
|
52
|
+
cloudtrail_collector = CloudTrailCollector(self.session, self.region, self.account_id)
|
|
53
|
+
return cloudtrail_collector.collect()
|
|
54
|
+
except Exception as e:
|
|
55
|
+
self._handle_error(e, "CloudTrail trails")
|
|
56
|
+
return {"Trails": [], "TrailStatuses": {}}
|
|
21
57
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
for user in page.get("Users", []):
|
|
26
|
-
iam_info["Users"].append(
|
|
27
|
-
{
|
|
28
|
-
"UserName": user.get("UserName"),
|
|
29
|
-
"UserId": user.get("UserId"),
|
|
30
|
-
"Arn": user.get("Arn"),
|
|
31
|
-
"CreateDate": str(user.get("CreateDate")),
|
|
32
|
-
"PasswordLastUsed": (
|
|
33
|
-
str(user.get("PasswordLastUsed")) if user.get("PasswordLastUsed") else None
|
|
34
|
-
),
|
|
35
|
-
}
|
|
36
|
-
)
|
|
58
|
+
def get_config_info(self) -> Dict[str, Any]:
|
|
59
|
+
"""
|
|
60
|
+
Get information about AWS Config resources.
|
|
37
61
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
62
|
+
:return: Dictionary containing AWS Config information
|
|
63
|
+
:rtype: Dict[str, Any]
|
|
64
|
+
"""
|
|
65
|
+
try:
|
|
66
|
+
config_collector = ConfigCollector(self.session, self.region, self.account_id)
|
|
67
|
+
return config_collector.collect()
|
|
68
|
+
except Exception as e:
|
|
69
|
+
self._handle_error(e, "AWS Config resources")
|
|
70
|
+
return {
|
|
71
|
+
"ConfigurationRecorders": [],
|
|
72
|
+
"RecorderStatuses": [],
|
|
73
|
+
"DeliveryChannels": [],
|
|
74
|
+
"ConfigRules": [],
|
|
75
|
+
"ComplianceSummary": [],
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
def get_guardduty_info(self) -> Dict[str, Any]:
|
|
79
|
+
"""
|
|
80
|
+
Get information about GuardDuty resources.
|
|
81
|
+
|
|
82
|
+
:return: Dictionary containing GuardDuty information
|
|
83
|
+
:rtype: Dict[str, Any]
|
|
84
|
+
"""
|
|
85
|
+
try:
|
|
86
|
+
guardduty_collector = GuardDutyCollector(
|
|
87
|
+
self.session, self.region, self.account_id, self.tags, self.collect_findings
|
|
88
|
+
)
|
|
89
|
+
return guardduty_collector.collect()
|
|
90
|
+
except Exception as e:
|
|
91
|
+
self._handle_error(e, "GuardDuty resources")
|
|
92
|
+
return {"Detectors": [], "Findings": [], "Members": []}
|
|
93
|
+
|
|
94
|
+
def get_iam_info(self) -> Dict[str, Any]:
|
|
95
|
+
"""
|
|
96
|
+
Get information about IAM resources.
|
|
97
|
+
|
|
98
|
+
:return: Dictionary containing IAM resource information
|
|
99
|
+
:rtype: Dict[str, Any]
|
|
100
|
+
"""
|
|
101
|
+
try:
|
|
102
|
+
iam_collector = IAMCollector(self.session, self.region, self.account_id)
|
|
103
|
+
return iam_collector.collect()
|
|
53
104
|
except Exception as e:
|
|
54
|
-
self._handle_error(e, "IAM
|
|
55
|
-
|
|
105
|
+
self._handle_error(e, "IAM resources")
|
|
106
|
+
return {
|
|
107
|
+
"Users": [],
|
|
108
|
+
"Roles": [],
|
|
109
|
+
"Groups": [],
|
|
110
|
+
"Policies": [],
|
|
111
|
+
"AccessKeys": [],
|
|
112
|
+
"MFADevices": [],
|
|
113
|
+
"AccountSummary": {},
|
|
114
|
+
"PasswordPolicy": {},
|
|
115
|
+
}
|
|
56
116
|
|
|
57
117
|
def get_kms_keys(self) -> List[Dict[str, Any]]:
|
|
58
118
|
"""
|
|
@@ -61,33 +121,13 @@ class SecurityCollector(BaseCollector):
|
|
|
61
121
|
:return: List of KMS key information
|
|
62
122
|
:rtype: List[Dict[str, Any]]
|
|
63
123
|
"""
|
|
64
|
-
keys = []
|
|
65
124
|
try:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
for page in paginator.paginate():
|
|
70
|
-
for key in page.get("Keys", []):
|
|
71
|
-
try:
|
|
72
|
-
key_info = kms.describe_key(KeyId=key["KeyId"])["KeyMetadata"]
|
|
73
|
-
keys.append(
|
|
74
|
-
{
|
|
75
|
-
"Region": self.region,
|
|
76
|
-
"KeyId": key_info.get("KeyId"),
|
|
77
|
-
"Arn": key_info.get("Arn"),
|
|
78
|
-
"Description": key_info.get("Description"),
|
|
79
|
-
"Enabled": key_info.get("Enabled"),
|
|
80
|
-
"KeyState": key_info.get("KeyState"),
|
|
81
|
-
"CreationDate": str(key_info.get("CreationDate")),
|
|
82
|
-
"Origin": key_info.get("Origin"),
|
|
83
|
-
"KeyManager": key_info.get("KeyManager"),
|
|
84
|
-
}
|
|
85
|
-
)
|
|
86
|
-
except Exception as e:
|
|
87
|
-
self._handle_error(e, f"KMS key {key['KeyId']}")
|
|
125
|
+
kms_collector = KMSCollector(self.session, self.region, self.account_id)
|
|
126
|
+
result = kms_collector.collect()
|
|
127
|
+
return result.get("Keys", [])
|
|
88
128
|
except Exception as e:
|
|
89
129
|
self._handle_error(e, "KMS keys")
|
|
90
|
-
|
|
130
|
+
return []
|
|
91
131
|
|
|
92
132
|
def get_secrets(self) -> List[Dict[str, Any]]:
|
|
93
133
|
"""
|
|
@@ -224,17 +264,173 @@ class SecurityCollector(BaseCollector):
|
|
|
224
264
|
self._handle_error(e, "ACM certificates")
|
|
225
265
|
return certificates
|
|
226
266
|
|
|
267
|
+
def get_securityhub_info(self) -> Dict[str, Any]:
|
|
268
|
+
"""
|
|
269
|
+
Get information about AWS Security Hub resources.
|
|
270
|
+
|
|
271
|
+
:return: Dictionary containing Security Hub information
|
|
272
|
+
:rtype: Dict[str, Any]
|
|
273
|
+
"""
|
|
274
|
+
try:
|
|
275
|
+
securityhub_collector = SecurityHubCollector(
|
|
276
|
+
self.session, self.region, self.account_id, self.tags, self.collect_findings
|
|
277
|
+
)
|
|
278
|
+
return securityhub_collector.collect()
|
|
279
|
+
except Exception as e:
|
|
280
|
+
self._handle_error(e, "Security Hub resources")
|
|
281
|
+
return {
|
|
282
|
+
"Findings": [],
|
|
283
|
+
"Standards": [],
|
|
284
|
+
"EnabledStandards": [],
|
|
285
|
+
"SecurityControls": [],
|
|
286
|
+
"HubConfiguration": {},
|
|
287
|
+
"Members": [],
|
|
288
|
+
"Insights": [],
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
def get_audit_manager_info(self) -> Dict[str, Any]:
|
|
292
|
+
"""
|
|
293
|
+
Get information about AWS Audit Manager resources.
|
|
294
|
+
|
|
295
|
+
:return: Dictionary containing Audit Manager information
|
|
296
|
+
:rtype: Dict[str, Any]
|
|
297
|
+
"""
|
|
298
|
+
try:
|
|
299
|
+
audit_manager_collector = AuditManagerCollector(self.session, self.region, self.account_id, self.tags)
|
|
300
|
+
return audit_manager_collector.collect()
|
|
301
|
+
except Exception as e:
|
|
302
|
+
self._handle_error(e, "Audit Manager resources")
|
|
303
|
+
return {
|
|
304
|
+
"Assessments": [],
|
|
305
|
+
"AssessmentFrameworks": [],
|
|
306
|
+
"Controls": [],
|
|
307
|
+
"AssessmentReports": [],
|
|
308
|
+
"Evidence": [],
|
|
309
|
+
"Settings": {},
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
def get_inspector_info(self) -> Dict[str, Any]:
|
|
313
|
+
"""
|
|
314
|
+
Get information about AWS Inspector resources.
|
|
315
|
+
|
|
316
|
+
:return: Dictionary containing Inspector information
|
|
317
|
+
:rtype: Dict[str, Any]
|
|
318
|
+
"""
|
|
319
|
+
try:
|
|
320
|
+
inspector_collector = InspectorCollector(
|
|
321
|
+
self.session, self.region, self.account_id, self.tags, self.collect_findings
|
|
322
|
+
)
|
|
323
|
+
return inspector_collector.collect()
|
|
324
|
+
except Exception as e:
|
|
325
|
+
self._handle_error(e, "Inspector resources")
|
|
326
|
+
return {"Findings": [], "Coverage": [], "AccountStatus": {}, "Members": [], "CoverageStatistics": {}}
|
|
327
|
+
|
|
328
|
+
def _collect_cloudtrail_data(self, result: Dict[str, Any]) -> None:
|
|
329
|
+
"""
|
|
330
|
+
Collect CloudTrail data and add to result.
|
|
331
|
+
|
|
332
|
+
:param result: Result dictionary to update
|
|
333
|
+
"""
|
|
334
|
+
cloudtrail_info = self.get_cloudtrail_info()
|
|
335
|
+
result["CloudTrail"] = cloudtrail_info.get("Trails", [])
|
|
336
|
+
result["CloudTrailStatuses"] = cloudtrail_info.get("TrailStatuses", {})
|
|
337
|
+
|
|
338
|
+
def _collect_config_data(self, result: Dict[str, Any]) -> None:
|
|
339
|
+
"""
|
|
340
|
+
Collect AWS Config data and add to result.
|
|
341
|
+
|
|
342
|
+
:param result: Result dictionary to update
|
|
343
|
+
"""
|
|
344
|
+
config_info = self.get_config_info()
|
|
345
|
+
result["ConfigRecorders"] = config_info.get("ConfigurationRecorders", [])
|
|
346
|
+
result["ConfigRecorderStatuses"] = config_info.get("RecorderStatuses", [])
|
|
347
|
+
result["ConfigDeliveryChannels"] = config_info.get("DeliveryChannels", [])
|
|
348
|
+
result["ConfigRules"] = config_info.get("ConfigRules", [])
|
|
349
|
+
result["ConfigComplianceSummary"] = config_info.get("ComplianceSummary", [])
|
|
350
|
+
|
|
351
|
+
def _collect_guardduty_data(self, result: Dict[str, Any]) -> None:
|
|
352
|
+
"""
|
|
353
|
+
Collect GuardDuty data and add to result.
|
|
354
|
+
|
|
355
|
+
:param result: Result dictionary to update
|
|
356
|
+
"""
|
|
357
|
+
guardduty_info = self.get_guardduty_info()
|
|
358
|
+
result["GuardDutyDetectors"] = guardduty_info.get("Detectors", [])
|
|
359
|
+
if self.collect_findings:
|
|
360
|
+
result["GuardDutyFindings"] = guardduty_info.get("Findings", [])
|
|
361
|
+
result["GuardDutyMembers"] = guardduty_info.get("Members", [])
|
|
362
|
+
|
|
363
|
+
def _collect_securityhub_data(self, result: Dict[str, Any]) -> None:
|
|
364
|
+
"""
|
|
365
|
+
Collect Security Hub data and add to result.
|
|
366
|
+
|
|
367
|
+
:param result: Result dictionary to update
|
|
368
|
+
"""
|
|
369
|
+
securityhub_info = self.get_securityhub_info()
|
|
370
|
+
if self.collect_findings:
|
|
371
|
+
result["SecurityHubFindings"] = securityhub_info.get("Findings", [])
|
|
372
|
+
result["SecurityHubStandards"] = securityhub_info.get("Standards", [])
|
|
373
|
+
result["SecurityHubEnabledStandards"] = securityhub_info.get("EnabledStandards", [])
|
|
374
|
+
result["SecurityHubControls"] = securityhub_info.get("SecurityControls", [])
|
|
375
|
+
result["SecurityHubConfig"] = securityhub_info.get("HubConfiguration", {})
|
|
376
|
+
result["SecurityHubMembers"] = securityhub_info.get("Members", [])
|
|
377
|
+
result["SecurityHubInsights"] = securityhub_info.get("Insights", [])
|
|
378
|
+
|
|
379
|
+
def _collect_inspector_data(self, result: Dict[str, Any]) -> None:
|
|
380
|
+
"""
|
|
381
|
+
Collect Inspector data and add to result.
|
|
382
|
+
|
|
383
|
+
:param result: Result dictionary to update
|
|
384
|
+
"""
|
|
385
|
+
inspector_info = self.get_inspector_info()
|
|
386
|
+
if self.collect_findings:
|
|
387
|
+
result["InspectorFindings"] = inspector_info.get("Findings", [])
|
|
388
|
+
result["InspectorCoverage"] = inspector_info.get("Coverage", [])
|
|
389
|
+
result["InspectorAccountStatus"] = inspector_info.get("AccountStatus", {})
|
|
390
|
+
result["InspectorMembers"] = inspector_info.get("Members", [])
|
|
391
|
+
result["InspectorCoverageStats"] = inspector_info.get("CoverageStatistics", {})
|
|
392
|
+
|
|
227
393
|
def collect(self) -> Dict[str, Any]:
|
|
228
394
|
"""
|
|
229
|
-
Collect
|
|
395
|
+
Collect security resources based on enabled_services configuration.
|
|
230
396
|
|
|
231
|
-
:return: Dictionary containing
|
|
397
|
+
:return: Dictionary containing enabled security resource information
|
|
232
398
|
:rtype: Dict[str, Any]
|
|
233
399
|
"""
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
"
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
400
|
+
result = {}
|
|
401
|
+
|
|
402
|
+
if self.enabled_services.get("iam", True):
|
|
403
|
+
result["IAM"] = self.get_iam_info()
|
|
404
|
+
|
|
405
|
+
if self.enabled_services.get("kms", True):
|
|
406
|
+
result["KMSKeys"] = self.get_kms_keys()
|
|
407
|
+
|
|
408
|
+
if self.enabled_services.get("secrets_manager", True):
|
|
409
|
+
result["Secrets"] = self.get_secrets()
|
|
410
|
+
|
|
411
|
+
if self.enabled_services.get("waf", True):
|
|
412
|
+
result["WAF"] = self.get_waf_info()
|
|
413
|
+
|
|
414
|
+
if self.enabled_services.get("acm", True):
|
|
415
|
+
result["ACMCertificates"] = self.get_acm_certificates()
|
|
416
|
+
|
|
417
|
+
if self.enabled_services.get("cloudtrail", True):
|
|
418
|
+
self._collect_cloudtrail_data(result)
|
|
419
|
+
|
|
420
|
+
if self.enabled_services.get("config", True):
|
|
421
|
+
self._collect_config_data(result)
|
|
422
|
+
|
|
423
|
+
if self.enabled_services.get("guardduty", True):
|
|
424
|
+
self._collect_guardduty_data(result)
|
|
425
|
+
|
|
426
|
+
if self.enabled_services.get("securityhub", True):
|
|
427
|
+
self._collect_securityhub_data(result)
|
|
428
|
+
|
|
429
|
+
if self.enabled_services.get("inspector", True):
|
|
430
|
+
self._collect_inspector_data(result)
|
|
431
|
+
|
|
432
|
+
if self.enabled_services.get("audit_manager", True):
|
|
433
|
+
audit_manager_info = self.get_audit_manager_info()
|
|
434
|
+
result.update(audit_manager_info)
|
|
435
|
+
|
|
436
|
+
return result
|