aws-cis-controls-assessment 1.0.8__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.
@@ -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.8"
9
+ __version__ = "1.0.9"
10
10
  __author__ = "AWS CIS Assessment Team"
11
11
  __description__ = "Production-ready AWS CIS Controls Compliance Assessment Framework"
@@ -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,
@@ -962,6 +962,171 @@ class HTMLReporter(ReportGenerator):
962
962
  }
963
963
  }
964
964
 
965
+ /* Score Comparison Styles */
966
+ .score-comparison-section {
967
+ background: white;
968
+ border-radius: 8px;
969
+ padding: 25px;
970
+ margin-bottom: 30px;
971
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
972
+ }
973
+
974
+ .comparison-grid {
975
+ display: grid;
976
+ grid-template-columns: 1fr 1fr;
977
+ gap: 20px;
978
+ margin-bottom: 20px;
979
+ }
980
+
981
+ .comparison-card {
982
+ background: #f8f9fa;
983
+ border-radius: 8px;
984
+ padding: 20px;
985
+ border: 2px solid #e9ecef;
986
+ }
987
+
988
+ .comparison-card h4 {
989
+ margin: 0 0 15px 0;
990
+ color: #2c3e50;
991
+ font-size: 1.1em;
992
+ }
993
+
994
+ .comparison-value {
995
+ font-size: 2.5em;
996
+ font-weight: bold;
997
+ margin: 10px 0;
998
+ }
999
+
1000
+ .comparison-card.weighted .comparison-value {
1001
+ color: #3498db;
1002
+ }
1003
+
1004
+ .comparison-card.aws-config .comparison-value {
1005
+ color: #9b59b6;
1006
+ }
1007
+
1008
+ .comparison-features {
1009
+ list-style: none;
1010
+ padding: 0;
1011
+ margin: 15px 0 0 0;
1012
+ }
1013
+
1014
+ .comparison-features li {
1015
+ padding: 5px 0;
1016
+ color: #666;
1017
+ font-size: 0.9em;
1018
+ }
1019
+
1020
+ .comparison-features li:before {
1021
+ content: "✓ ";
1022
+ color: #27ae60;
1023
+ font-weight: bold;
1024
+ margin-right: 5px;
1025
+ }
1026
+
1027
+ .score-difference {
1028
+ background: #fff3cd;
1029
+ border: 1px solid #ffc107;
1030
+ border-radius: 8px;
1031
+ padding: 15px;
1032
+ margin-top: 20px;
1033
+ display: flex;
1034
+ align-items: center;
1035
+ gap: 15px;
1036
+ }
1037
+
1038
+ .diff-icon {
1039
+ font-size: 2em;
1040
+ flex-shrink: 0;
1041
+ }
1042
+
1043
+ .diff-content {
1044
+ flex-grow: 1;
1045
+ }
1046
+
1047
+ .diff-content strong {
1048
+ display: block;
1049
+ margin-bottom: 5px;
1050
+ color: #856404;
1051
+ }
1052
+
1053
+ .diff-content p {
1054
+ margin: 0;
1055
+ color: #856404;
1056
+ font-size: 0.9em;
1057
+ }
1058
+
1059
+ .score-difference.neutral {
1060
+ background: #d1ecf1;
1061
+ border-color: #17a2b8;
1062
+ }
1063
+
1064
+ .score-difference.neutral .diff-content strong,
1065
+ .score-difference.neutral .diff-content p {
1066
+ color: #0c5460;
1067
+ }
1068
+
1069
+ .score-difference.warning {
1070
+ background: #fff3cd;
1071
+ border-color: #ffc107;
1072
+ }
1073
+
1074
+ .score-difference.warning .diff-content strong,
1075
+ .score-difference.warning .diff-content p {
1076
+ color: #856404;
1077
+ }
1078
+
1079
+ .score-difference.positive {
1080
+ background: #d4edda;
1081
+ border-color: #28a745;
1082
+ }
1083
+
1084
+ .score-difference.positive .diff-content strong,
1085
+ .score-difference.positive .diff-content p {
1086
+ color: #155724;
1087
+ }
1088
+
1089
+ .methodology-note {
1090
+ background: #e7f3ff;
1091
+ border-left: 4px solid #3498db;
1092
+ padding: 15px;
1093
+ margin-top: 20px;
1094
+ border-radius: 4px;
1095
+ }
1096
+
1097
+ .methodology-note h5 {
1098
+ margin: 0 0 10px 0;
1099
+ color: #2c3e50;
1100
+ font-size: 1em;
1101
+ }
1102
+
1103
+ .methodology-note p {
1104
+ margin: 5px 0;
1105
+ color: #555;
1106
+ font-size: 0.9em;
1107
+ line-height: 1.6;
1108
+ }
1109
+
1110
+ .methodology-note a {
1111
+ color: #3498db;
1112
+ text-decoration: none;
1113
+ font-weight: 500;
1114
+ }
1115
+
1116
+ .methodology-note a:hover {
1117
+ text-decoration: underline;
1118
+ }
1119
+
1120
+ @media (max-width: 768px) {
1121
+ .comparison-grid {
1122
+ grid-template-columns: 1fr;
1123
+ }
1124
+
1125
+ .comparison-value {
1126
+ font-size: 2em;
1127
+ }
1128
+ }
1129
+
965
1130
  /* Print styles */
966
1131
  @media print {
967
1132
  .navigation {
@@ -1300,6 +1465,18 @@ class HTMLReporter(ReportGenerator):
1300
1465
  a.click();
1301
1466
  window.URL.revokeObjectURL(url);
1302
1467
  }}
1468
+
1469
+ // Toggle scoring details
1470
+ function toggleScoringDetails() {{
1471
+ const detailsSection = document.getElementById('scoringDetails');
1472
+ if (detailsSection) {{
1473
+ if (detailsSection.style.display === 'none') {{
1474
+ detailsSection.style.display = 'block';
1475
+ }} else {{
1476
+ detailsSection.style.display = 'none';
1477
+ }}
1478
+ }}
1479
+ }}
1303
1480
  """
1304
1481
 
1305
1482
  def _generate_header(self, html_data: Dict[str, Any]) -> str:
@@ -1362,14 +1539,22 @@ class HTMLReporter(ReportGenerator):
1362
1539
 
1363
1540
  # Generate metric cards
1364
1541
  overall_status = self._get_status_class(exec_summary.get("overall_compliance_percentage", 0))
1542
+ aws_config_score = exec_summary.get('aws_config_style_score', 0)
1543
+ score_diff = exec_summary.get('score_difference', 0)
1365
1544
 
1366
1545
  metric_cards = f"""
1367
1546
  <div class="metric-card {overall_status}">
1368
1547
  <div class="metric-value">{exec_summary.get('overall_compliance_percentage', 0):.1f}%</div>
1369
- <div class="metric-label">Overall Compliance</div>
1548
+ <div class="metric-label">Weighted Compliance Score</div>
1370
1549
  <div class="metric-trend trend-stable">Grade: {exec_summary.get('compliance_grade', 'N/A')}</div>
1371
1550
  </div>
1372
1551
 
1552
+ <div class="metric-card">
1553
+ <div class="metric-value">{aws_config_score:.1f}%</div>
1554
+ <div class="metric-label">AWS Config Style Score</div>
1555
+ <div class="metric-trend trend-stable">Unweighted</div>
1556
+ </div>
1557
+
1373
1558
  <div class="metric-card">
1374
1559
  <div class="metric-value">{exec_summary.get('total_resources', 0):,}</div>
1375
1560
  <div class="metric-label">Resources Evaluated</div>
@@ -1381,14 +1566,15 @@ class HTMLReporter(ReportGenerator):
1381
1566
  <div class="metric-label">Compliant Resources</div>
1382
1567
  <div class="metric-trend trend-up">{(exec_summary.get('compliant_resources', 0) / max(exec_summary.get('total_resources', 1), 1) * 100):.1f}% of total</div>
1383
1568
  </div>
1384
-
1385
- <div class="metric-card">
1386
- <div class="metric-value">{exec_summary.get('non_compliant_resources', 0):,}</div>
1387
- <div class="metric-label">Non-Compliant Resources</div>
1388
- <div class="metric-trend trend-down">Require attention</div>
1389
- </div>
1390
1569
  """
1391
1570
 
1571
+ # Add scoring comparison section
1572
+ score_comparison = self._generate_score_comparison_section(
1573
+ exec_summary.get('overall_compliance_percentage', 0),
1574
+ aws_config_score,
1575
+ score_diff
1576
+ )
1577
+
1392
1578
  # Generate IG progress bars
1393
1579
  ig_progress = ""
1394
1580
  for ig in ['ig1', 'ig2', 'ig3']:
@@ -1435,6 +1621,8 @@ class HTMLReporter(ReportGenerator):
1435
1621
  {metric_cards}
1436
1622
  </div>
1437
1623
 
1624
+ {score_comparison}
1625
+
1438
1626
  <div class="ig-progress-section">
1439
1627
  <h3>Implementation Groups Progress</h3>
1440
1628
  {ig_progress}
@@ -1910,6 +2098,90 @@ class HTMLReporter(ReportGenerator):
1910
2098
  display_findings.append(display_finding)
1911
2099
  return display_findings
1912
2100
 
2101
+ def _generate_score_comparison_section(self, weighted_score: float,
2102
+ aws_config_score: float,
2103
+ score_diff: float) -> str:
2104
+ """Generate scoring methodology comparison section.
2105
+
2106
+ Args:
2107
+ weighted_score: Our weighted compliance score
2108
+ aws_config_score: AWS Config Conformance Pack style score
2109
+ score_diff: Difference between the two scores
2110
+
2111
+ Returns:
2112
+ HTML section comparing the two scoring approaches
2113
+ """
2114
+ # Determine interpretation based on difference
2115
+ if abs(score_diff) < 1.0:
2116
+ interpretation = "Both scoring approaches show similar results, indicating balanced compliance across all control priorities."
2117
+ icon = "ℹ️"
2118
+ diff_class = "neutral"
2119
+ elif score_diff < 0:
2120
+ # Weighted score is lower
2121
+ interpretation = f"The weighted score is {abs(score_diff):.1f}% lower, indicating critical security controls need attention despite good overall resource compliance."
2122
+ icon = "⚠️"
2123
+ diff_class = "warning"
2124
+ else:
2125
+ # Weighted score is higher
2126
+ interpretation = f"The weighted score is {score_diff:.1f}% higher, indicating strong performance in critical security controls despite some gaps in less critical areas."
2127
+ icon = "✓"
2128
+ diff_class = "positive"
2129
+
2130
+ return f"""
2131
+ <div class="score-comparison-section">
2132
+ <h3>Scoring Methodology Comparison</h3>
2133
+ <div class="comparison-grid">
2134
+ <div class="comparison-card">
2135
+ <h4>Weighted Score (Our Approach)</h4>
2136
+ <div class="comparison-value">{weighted_score:.1f}%</div>
2137
+ <p class="comparison-description">
2138
+ Uses risk-based weighting where critical controls (encryption, access control)
2139
+ have higher impact on the overall score. Reflects actual security posture.
2140
+ </p>
2141
+ <ul class="comparison-features">
2142
+ <li>✓ Prioritizes critical security controls</li>
2143
+ <li>✓ Prevents resource count skew</li>
2144
+ <li>✓ Guides remediation priorities</li>
2145
+ </ul>
2146
+ </div>
2147
+
2148
+ <div class="comparison-card">
2149
+ <h4>AWS Config Style Score</h4>
2150
+ <div class="comparison-value">{aws_config_score:.1f}%</div>
2151
+ <p class="comparison-description">
2152
+ Simple unweighted calculation: compliant resources divided by total resources.
2153
+ All rules treated equally regardless of security criticality.
2154
+ </p>
2155
+ <ul class="comparison-features">
2156
+ <li>✓ Simple and straightforward</li>
2157
+ <li>✓ Easy to audit</li>
2158
+ <li>✓ Resource-level tracking</li>
2159
+ </ul>
2160
+ </div>
2161
+ </div>
2162
+
2163
+ <div class="score-difference {diff_class}">
2164
+ <span class="diff-icon">{icon}</span>
2165
+ <div class="diff-content">
2166
+ <strong>Score Difference: {score_diff:+.1f}%</strong>
2167
+ <p>{interpretation}</p>
2168
+ </div>
2169
+ </div>
2170
+
2171
+ <div class="methodology-note">
2172
+ <strong>Which score should I use?</strong>
2173
+ <ul>
2174
+ <li><strong>Weighted Score:</strong> Use for security decision-making, risk prioritization, and remediation planning</li>
2175
+ <li><strong>AWS Config Style:</strong> Use for compliance reporting, audits, and simple stakeholder communication</li>
2176
+ <li><strong>Both:</strong> Track both metrics for comprehensive security program management</li>
2177
+ </ul>
2178
+ <p>
2179
+ <a href="#" onclick="toggleScoringDetails(); return false;">Learn more about scoring methodologies →</a>
2180
+ </p>
2181
+ </div>
2182
+ </div>
2183
+ """
2184
+
1913
2185
  def set_chart_options(self, include_charts: bool = True) -> None:
1914
2186
  """Configure chart inclusion options.
1915
2187
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-cis-controls-assessment
3
- Version: 1.0.8
3
+ Version: 1.0.9
4
4
  Summary: Production-ready AWS CIS Controls compliance assessment framework with 145 comprehensive rules
5
5
  Author-email: AWS CIS Assessment Team <security@example.com>
6
6
  Maintainer-email: AWS CIS Assessment Team <security@example.com>
@@ -64,6 +64,7 @@ A production-ready, enterprise-grade framework for evaluating AWS account config
64
64
  ## 🎯 Key Features
65
65
 
66
66
  - **✅ Complete Coverage**: 131/131 CIS Controls rules implemented (100% coverage)
67
+ - **✅ Dual Scoring System**: Both weighted and AWS Config-style scoring methodologies
67
68
  - **✅ Enterprise Ready**: Production-tested with enterprise-grade architecture
68
69
  - **✅ Performance Optimized**: Handles large-scale assessments efficiently
69
70
  - **✅ Multi-Format Reports**: JSON, HTML, and CSV with detailed remediation guidance
@@ -208,6 +209,9 @@ aws-cis-assess assess --output-format json
208
209
  - **[Installation Guide](docs/installation.md)**: Detailed installation instructions and requirements
209
210
  - **[User Guide](docs/user-guide.md)**: Comprehensive user manual and best practices
210
211
  - **[CLI Reference](docs/cli-reference.md)**: Complete command-line interface documentation
212
+ - **[Dual Scoring Guide](docs/dual-scoring-implementation.md)**: Weighted vs AWS Config scoring methodologies
213
+ - **[Scoring Methodology](docs/scoring-methodology.md)**: Detailed explanation of weighted scoring
214
+ - **[AWS Config Comparison](docs/scoring-comparison-aws-config.md)**: Comparison with AWS Config approach
211
215
  - **[Troubleshooting Guide](docs/troubleshooting.md)**: Common issues and solutions
212
216
  - **[Developer Guide](docs/developer-guide.md)**: Development and contribution guidelines
213
217
 
@@ -1,4 +1,4 @@
1
- aws_cis_assessment/__init__.py,sha256=trVrC7YvGPjivqPsY-Z2mULRuYcQBDAHH8d8zPB8rYw,480
1
+ aws_cis_assessment/__init__.py,sha256=EO4JEYzH1KqBsVY47ECD1ctR40yddm7WEfZRGfctQf8,480
2
2
  aws_cis_assessment/cli/__init__.py,sha256=DYaGVAIoy5ucs9ubKQxX6Z3ZD46AGz9AaIaDQXzrzeY,100
3
3
  aws_cis_assessment/cli/examples.py,sha256=F9K2Fe297kUfwoq6Ine9Aj_IXNU-KwO9hd7SAPWeZHI,12884
4
4
  aws_cis_assessment/cli/main.py,sha256=i5QoqHXsPG_Kw0W7jM3Zj2YaAaCJnxxnfz82QBBHq-U,49441
@@ -50,30 +50,33 @@ aws_cis_assessment/controls/ig3/control_3_14.py,sha256=fY2MZATcicuP1Zich5L7J6-MM
50
50
  aws_cis_assessment/controls/ig3/control_7_1.py,sha256=GZQt0skGJVlUbGoH4MD5AoJJONf0nT9k7WQT-8F3le4,18499
51
51
  aws_cis_assessment/core/__init__.py,sha256=aXt5Z3mqaaDvFyZPyMaJYFy66A_phfFIhhH_eyaic8Q,52
52
52
  aws_cis_assessment/core/accuracy_validator.py,sha256=jnN2O32PpdDfWAp6erV4v4zKugC9ziJkDYnVF93FVuY,18386
53
- aws_cis_assessment/core/assessment_engine.py,sha256=QqQXWHRJOZadigA7fSwZld2nl2qhFY-MEhcDk2mVazY,62268
53
+ aws_cis_assessment/core/assessment_engine.py,sha256=-dxww7Qp-dww3pUmyLOBAt44U2CrcP_8WmhjFrJ8sMw,62509
54
54
  aws_cis_assessment/core/audit_trail.py,sha256=qapCkI2zjbAPHlHQcgYonfDYyjU2MoX5Sc2IXtYj3eE,18395
55
55
  aws_cis_assessment/core/aws_client_factory.py,sha256=1qTLfQ3fgPBH3mWRpX1_i3bbHlQQYsmSE8vsKxKTz8w,13143
56
56
  aws_cis_assessment/core/error_handler.py,sha256=5JgH3Y2yG1-ZSuEJR7o0ZMzqlwGWFRW2N4SjcL2gnBw,24219
57
- aws_cis_assessment/core/models.py,sha256=qjkc_AAyUlUBWlOoM0E8mS9vP03cR38gTt2OpEzExJU,5748
58
- aws_cis_assessment/core/scoring_engine.py,sha256=JYSPZA9oYJZoH3khxHNzRe5asFIm9DovDGvugxKmy74,18990
57
+ aws_cis_assessment/core/models.py,sha256=YhHTZq0DPa_m5GNuYH85uS2bq-70tYuIe19Mu-L4tmY,5825
58
+ aws_cis_assessment/core/scoring_engine.py,sha256=ylx2urk_DxGzU_LZB0ip-qtUzOh4yu0Mjo6Lc_AlE_A,20191
59
59
  aws_cis_assessment/reporters/__init__.py,sha256=GXdlY08kKy1Y3mMBv8Y0JuUB69u--e5DIu2jNJpc6QI,357
60
- aws_cis_assessment/reporters/base_reporter.py,sha256=xalVCTpNzSrTcfZmyRL2I-3B6dd6sbeBIkatUiSDTrs,17838
60
+ aws_cis_assessment/reporters/base_reporter.py,sha256=joy_O4IL4Hs_qwAuPtl81GIPxLAbUAMFKiF8r5si2aw,18082
61
61
  aws_cis_assessment/reporters/csv_reporter.py,sha256=r83xzfP1t5AO9MfKawgN4eTeOU6eGZwJQgvNDLEd7NI,31419
62
- aws_cis_assessment/reporters/html_reporter.py,sha256=TzCVxPGSFs0N5Zzz2evdm88gu7vjSXJJpzvEW-kimfY,104214
62
+ aws_cis_assessment/reporters/html_reporter.py,sha256=i5HBLAjZB1TKAUrc6X7-Qbzr7QTQOwLplDu-ZnDzTUs,113444
63
63
  aws_cis_assessment/reporters/json_reporter.py,sha256=MObCzTc9nlGTEXeWc7P8tTMeKCpEaJNfcSYc79cHXhc,22250
64
- aws_cis_controls_assessment-1.0.8.dist-info/licenses/LICENSE,sha256=T_p0qKH4RoI3ejr3tktf3rx2Zart_9KeUmJd5iiqXW8,1079
64
+ aws_cis_controls_assessment-1.0.9.dist-info/licenses/LICENSE,sha256=T_p0qKH4RoI3ejr3tktf3rx2Zart_9KeUmJd5iiqXW8,1079
65
65
  deprecation-package/aws_cis_assessment_deprecated/__init__.py,sha256=WOaufqanKNhvWQ3frj8e627tS_kZnyk2R2hwqPFqydw,1892
66
66
  docs/README.md,sha256=8UaAzc2pI1nhMFf_pGSFAf0UfeaM1MXw9X93IrN-z5A,4264
67
67
  docs/assessment-logic.md,sha256=7t1YPkLPI3-MpvF3cLpO4x4LeNMfM950-es4vn0W4Zc,27123
68
68
  docs/cli-reference.md,sha256=zyTacw3neOJ2lQmq8E7WPJUDGMIDgUzQCqutu0lJ3SY,17854
69
69
  docs/config-rule-mappings.md,sha256=Jk31ZqnSn1JAR3iXHlhGnVxVpPukVuCZtK4H58j08Nk,18508
70
70
  docs/developer-guide.md,sha256=uC0DvgmBoOQ2LnBNManTe_rdOccvjWbzvqd93huO4jE,31026
71
+ docs/dual-scoring-implementation.md,sha256=n8xwurAAx4iOyCeITE9Anvz6W6YupejVYWt6ARtmmTY,8567
71
72
  docs/html-report-improvements.md,sha256=a0OzKvQC_KpcielntTHXMPObwulfWIDgBKnF66iaxp4,11432
72
73
  docs/installation.md,sha256=y_CQE44yE3ENeAcBANonJUqsl9pLQsGOX92tui-t2OU,9576
74
+ docs/scoring-comparison-aws-config.md,sha256=8BBe1tQsaAT0BAE3OdGIRFjuT1VJcOlM1qBWFmZKaIo,11801
75
+ docs/scoring-methodology.md,sha256=C86FisBxKt6pyr-Kp6rAVPz45yPZpgsGibjgq8obIsg,9404
73
76
  docs/troubleshooting.md,sha256=JcYw6qS9G9YsM0MxxxZUGfPZmmZBxDYTV8tAIK0Sa2U,13175
74
77
  docs/user-guide.md,sha256=4azuL1RWewtA2wRH0ejHkCvVKV3dBfyRJ28THahlmaA,10352
75
- aws_cis_controls_assessment-1.0.8.dist-info/METADATA,sha256=DI4dO_e0RTeeCL48Xil1V8oYTNk1hbg5GxwOebtUKJc,11406
76
- aws_cis_controls_assessment-1.0.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
77
- aws_cis_controls_assessment-1.0.8.dist-info/entry_points.txt,sha256=-AxPn5Y7yau0pQh33F5_uyWfvcnm2Kg1_nMQuLrZ7SY,68
78
- aws_cis_controls_assessment-1.0.8.dist-info/top_level.txt,sha256=4OHmV6RAEWkz-Se50kfmuGCd-mUSotDZz3iLGF9CmkI,44
79
- aws_cis_controls_assessment-1.0.8.dist-info/RECORD,,
78
+ aws_cis_controls_assessment-1.0.9.dist-info/METADATA,sha256=UjpUaAlo77AoGVHC8-okG5bo5DlWjwR7boXomQsPrKk,11809
79
+ aws_cis_controls_assessment-1.0.9.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
80
+ aws_cis_controls_assessment-1.0.9.dist-info/entry_points.txt,sha256=-AxPn5Y7yau0pQh33F5_uyWfvcnm2Kg1_nMQuLrZ7SY,68
81
+ aws_cis_controls_assessment-1.0.9.dist-info/top_level.txt,sha256=4OHmV6RAEWkz-Se50kfmuGCd-mUSotDZz3iLGF9CmkI,44
82
+ aws_cis_controls_assessment-1.0.9.dist-info/RECORD,,