aws-cis-controls-assessment 1.0.7__py3-none-any.whl → 1.0.9__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.
- aws_cis_assessment/__init__.py +1 -1
- aws_cis_assessment/controls/ig1/control_advanced_security.py +2 -2
- aws_cis_assessment/core/assessment_engine.py +4 -0
- aws_cis_assessment/core/models.py +1 -0
- aws_cis_assessment/core/scoring_engine.py +30 -0
- aws_cis_assessment/reporters/base_reporter.py +2 -0
- aws_cis_assessment/reporters/html_reporter.py +826 -45
- {aws_cis_controls_assessment-1.0.7.dist-info → aws_cis_controls_assessment-1.0.9.dist-info}/METADATA +6 -1
- {aws_cis_controls_assessment-1.0.7.dist-info → aws_cis_controls_assessment-1.0.9.dist-info}/RECORD +20 -16
- docs/README.md +1 -0
- docs/dual-scoring-implementation.md +303 -0
- docs/html-report-improvements.md +422 -0
- docs/installation.md +78 -27
- docs/scoring-comparison-aws-config.md +379 -0
- docs/scoring-methodology.md +350 -0
- docs/user-guide.md +7 -1
- {aws_cis_controls_assessment-1.0.7.dist-info → aws_cis_controls_assessment-1.0.9.dist-info}/WHEEL +0 -0
- {aws_cis_controls_assessment-1.0.7.dist-info → aws_cis_controls_assessment-1.0.9.dist-info}/entry_points.txt +0 -0
- {aws_cis_controls_assessment-1.0.7.dist-info → aws_cis_controls_assessment-1.0.9.dist-info}/licenses/LICENSE +0 -0
- {aws_cis_controls_assessment-1.0.7.dist-info → aws_cis_controls_assessment-1.0.9.dist-info}/top_level.txt +0 -0
aws_cis_assessment/__init__.py
CHANGED
|
@@ -6,6 +6,6 @@ CIS Controls Implementation Groups (IG1, IG2, IG3). Implements 145 comprehensive
|
|
|
6
6
|
across all implementation groups for complete security compliance assessment.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
__version__ = "1.0.
|
|
9
|
+
__version__ = "1.0.9"
|
|
10
10
|
__author__ = "AWS CIS Assessment Team"
|
|
11
11
|
__description__ = "Production-ready AWS CIS Controls Compliance Assessment Framework"
|
|
@@ -68,8 +68,8 @@ class EC2ManagedInstanceAssociationComplianceStatusCheckAssessment(BaseConfigRul
|
|
|
68
68
|
# Get association compliance status
|
|
69
69
|
try:
|
|
70
70
|
compliance_response = ssm_client.list_compliance_items(
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
ResourceIds=[instance_id],
|
|
72
|
+
ResourceTypes=['ManagedInstance']
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
compliance_items = compliance_response.get('ComplianceItems', [])
|
|
@@ -702,12 +702,16 @@ class AssessmentEngine:
|
|
|
702
702
|
# Calculate overall score using scoring engine
|
|
703
703
|
overall_score = self.scoring_engine.calculate_overall_score(ig_scores)
|
|
704
704
|
|
|
705
|
+
# Calculate AWS Config-style unweighted score
|
|
706
|
+
aws_config_score = self.scoring_engine.calculate_aws_config_style_score(ig_scores)
|
|
707
|
+
|
|
705
708
|
# Create final assessment result
|
|
706
709
|
assessment_result = AssessmentResult(
|
|
707
710
|
account_id=account_id,
|
|
708
711
|
regions_assessed=self.aws_factory.regions.copy(),
|
|
709
712
|
timestamp=datetime.now(),
|
|
710
713
|
overall_score=overall_score,
|
|
714
|
+
aws_config_score=aws_config_score, # Add AWS Config score
|
|
711
715
|
ig_scores=ig_scores,
|
|
712
716
|
total_resources_evaluated=len(all_results),
|
|
713
717
|
assessment_duration=self.progress.elapsed_time
|
|
@@ -126,6 +126,7 @@ class AssessmentResult:
|
|
|
126
126
|
regions_assessed: List[str]
|
|
127
127
|
timestamp: datetime
|
|
128
128
|
overall_score: float
|
|
129
|
+
aws_config_score: float = 0.0 # AWS Config Conformance Pack style score
|
|
129
130
|
ig_scores: Dict[str, IGScore] = field(default_factory=dict)
|
|
130
131
|
total_resources_evaluated: int = 0
|
|
131
132
|
assessment_duration: Optional[timedelta] = None
|
|
@@ -47,6 +47,36 @@ class ScoringEngine:
|
|
|
47
47
|
|
|
48
48
|
logger.info("ScoringEngine initialized with control and IG weights")
|
|
49
49
|
|
|
50
|
+
def calculate_aws_config_style_score(self, ig_scores: Dict[str, IGScore]) -> float:
|
|
51
|
+
"""Calculate compliance score using AWS Config Conformance Pack approach.
|
|
52
|
+
|
|
53
|
+
This is a simple unweighted calculation:
|
|
54
|
+
Score = Total Compliant Resources / Total Resources
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
ig_scores: Dictionary of IG scores
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Unweighted compliance percentage (0-100)
|
|
61
|
+
"""
|
|
62
|
+
total_compliant = 0
|
|
63
|
+
total_resources = 0
|
|
64
|
+
|
|
65
|
+
# Sum all compliant and total resources across all IGs and controls
|
|
66
|
+
for ig_score in ig_scores.values():
|
|
67
|
+
for control_score in ig_score.control_scores.values():
|
|
68
|
+
total_compliant += control_score.compliant_resources
|
|
69
|
+
total_resources += control_score.total_resources
|
|
70
|
+
|
|
71
|
+
if total_resources > 0:
|
|
72
|
+
aws_config_score = (total_compliant / total_resources) * 100
|
|
73
|
+
else:
|
|
74
|
+
aws_config_score = 0.0
|
|
75
|
+
|
|
76
|
+
logger.info(f"AWS Config style score: {aws_config_score:.1f}% "
|
|
77
|
+
f"({total_compliant}/{total_resources} resources compliant)")
|
|
78
|
+
return aws_config_score
|
|
79
|
+
|
|
50
80
|
def calculate_control_score(self, control_id: str, rule_results: List[ComplianceResult],
|
|
51
81
|
control_title: str = "", implementation_group: str = "") -> ControlScore:
|
|
52
82
|
"""Calculate compliance score for individual CIS Control.
|
|
@@ -110,6 +110,8 @@ class ReportGenerator(ABC):
|
|
|
110
110
|
},
|
|
111
111
|
'executive_summary': {
|
|
112
112
|
'overall_compliance_percentage': compliance_summary.overall_compliance_percentage,
|
|
113
|
+
'aws_config_style_score': assessment_result.aws_config_score, # Add AWS Config score
|
|
114
|
+
'score_difference': compliance_summary.overall_compliance_percentage - assessment_result.aws_config_score, # Show difference
|
|
113
115
|
'ig1_compliance_percentage': compliance_summary.ig1_compliance_percentage,
|
|
114
116
|
'ig2_compliance_percentage': compliance_summary.ig2_compliance_percentage,
|
|
115
117
|
'ig3_compliance_percentage': compliance_summary.ig3_compliance_percentage,
|