aws-cis-controls-assessment 1.0.6__py3-none-any.whl → 1.0.8__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-cis-controls-assessment
3
- Version: 1.0.6
3
+ Version: 1.0.8
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>
@@ -214,6 +214,7 @@ aws-cis-assess assess --output-format json
214
214
  ### Technical Documentation
215
215
  - **[Assessment Logic](docs/assessment-logic.md)**: How compliance assessments work
216
216
  - **[Config Rule Mappings](docs/config-rule-mappings.md)**: CIS Controls to AWS Config rule mappings
217
+ - **[HTML Report Improvements](docs/html-report-improvements.md)**: Enhanced HTML report features and customization
217
218
 
218
219
  ## 🤝 Support & Community
219
220
 
@@ -1,4 +1,4 @@
1
- aws_cis_assessment/__init__.py,sha256=ENW-oYsdAEpNlcdVOswJHLtIyWLwm1qKC0CaFVObN4Q,480
1
+ aws_cis_assessment/__init__.py,sha256=trVrC7YvGPjivqPsY-Z2mULRuYcQBDAHH8d8zPB8rYw,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
@@ -17,10 +17,10 @@ aws_cis_assessment/controls/ig1/control_3_3.py,sha256=f4ZuiMR6qSXCmVwP3OflEeZn48
17
17
  aws_cis_assessment/controls/ig1/control_3_4.py,sha256=Flw_cA8_Qxv8zuIbOWv6JAYUdjPiAPU7Qs3CqDoRqvk,11438
18
18
  aws_cis_assessment/controls/ig1/control_4_1.py,sha256=-lIoa0XRGwiRdtG9L9f00Wud525FZbv3961bXMuiQIE,22362
19
19
  aws_cis_assessment/controls/ig1/control_access_keys.py,sha256=Hj3G0Qpwa2EcJE-u49nvADjbESZh9YClElfP4dWYQfk,14424
20
- aws_cis_assessment/controls/ig1/control_advanced_security.py,sha256=cSbgwEKVuqBq9_YoAC30OSiBrDOmpPaOUNJSa9udOUQ,24250
20
+ aws_cis_assessment/controls/ig1/control_advanced_security.py,sha256=PNtPfqSKGu7UYDx6PccO8tVT5ZL6YmzeH45Cew_UjLM,24256
21
21
  aws_cis_assessment/controls/ig1/control_backup_recovery.py,sha256=Y5za_4lCZmA5MYhHp4OCGyL4z97cj6dbO0KfabQ5Hr0,21465
22
22
  aws_cis_assessment/controls/ig1/control_cloudtrail_logging.py,sha256=lQOjshW8BBymvzphtWuwg4wIyv6nH2mOSiogBe_Ejfo,8514
23
- aws_cis_assessment/controls/ig1/control_critical_security.py,sha256=ixUhwM7USK6nur4C1iZNOtRASNomLNggSglQw8qZRAg,20926
23
+ aws_cis_assessment/controls/ig1/control_critical_security.py,sha256=1MVMkfOAWcH5ppFv7psZvJvcOtpww6Pl5WFXrMyN158,20942
24
24
  aws_cis_assessment/controls/ig1/control_data_protection.py,sha256=-EDT-d0IcYpdv4cYSNfsSKwX7YzKZ9MiVY18-6YHcVE,44216
25
25
  aws_cis_assessment/controls/ig1/control_iam_advanced.py,sha256=FQA_8IV5CyD_49u0eLN8q-JM50g1-tilDu9Ww_R3o9s,27694
26
26
  aws_cis_assessment/controls/ig1/control_iam_governance.py,sha256=msaqmhLlFYK3pMgC-eYOP7RvDCpx014W8Su6hdlQ_Ic,22079
@@ -59,20 +59,21 @@ aws_cis_assessment/core/scoring_engine.py,sha256=JYSPZA9oYJZoH3khxHNzRe5asFIm9Do
59
59
  aws_cis_assessment/reporters/__init__.py,sha256=GXdlY08kKy1Y3mMBv8Y0JuUB69u--e5DIu2jNJpc6QI,357
60
60
  aws_cis_assessment/reporters/base_reporter.py,sha256=xalVCTpNzSrTcfZmyRL2I-3B6dd6sbeBIkatUiSDTrs,17838
61
61
  aws_cis_assessment/reporters/csv_reporter.py,sha256=r83xzfP1t5AO9MfKawgN4eTeOU6eGZwJQgvNDLEd7NI,31419
62
- aws_cis_assessment/reporters/html_reporter.py,sha256=1MdbKQ8Eujc0B6x_toHmr3WupjgfTpNzSYwLNFWxzW8,81712
62
+ aws_cis_assessment/reporters/html_reporter.py,sha256=TzCVxPGSFs0N5Zzz2evdm88gu7vjSXJJpzvEW-kimfY,104214
63
63
  aws_cis_assessment/reporters/json_reporter.py,sha256=MObCzTc9nlGTEXeWc7P8tTMeKCpEaJNfcSYc79cHXhc,22250
64
- aws_cis_controls_assessment-1.0.6.dist-info/licenses/LICENSE,sha256=T_p0qKH4RoI3ejr3tktf3rx2Zart_9KeUmJd5iiqXW8,1079
64
+ aws_cis_controls_assessment-1.0.8.dist-info/licenses/LICENSE,sha256=T_p0qKH4RoI3ejr3tktf3rx2Zart_9KeUmJd5iiqXW8,1079
65
65
  deprecation-package/aws_cis_assessment_deprecated/__init__.py,sha256=WOaufqanKNhvWQ3frj8e627tS_kZnyk2R2hwqPFqydw,1892
66
- docs/README.md,sha256=lZNUghM9wgl1uW8OoVHpxt5ugKB6DL0rqx_hVTx8yZc,4152
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/installation.md,sha256=ELCw7jhvtbavzL18sitbpi02We-_qB4sg8t3jKBy5cw,7481
71
+ docs/html-report-improvements.md,sha256=a0OzKvQC_KpcielntTHXMPObwulfWIDgBKnF66iaxp4,11432
72
+ docs/installation.md,sha256=y_CQE44yE3ENeAcBANonJUqsl9pLQsGOX92tui-t2OU,9576
72
73
  docs/troubleshooting.md,sha256=JcYw6qS9G9YsM0MxxxZUGfPZmmZBxDYTV8tAIK0Sa2U,13175
73
- docs/user-guide.md,sha256=8XZpgnDTMBFc1s3nR__9GnwjRqPnSXAYBDow3586OcQ,9927
74
- aws_cis_controls_assessment-1.0.6.dist-info/METADATA,sha256=wRved3YCBUAXrbjjmyO-ZR4kpj9E4h0hUnvRz4JztME,11290
75
- aws_cis_controls_assessment-1.0.6.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
76
- aws_cis_controls_assessment-1.0.6.dist-info/entry_points.txt,sha256=-AxPn5Y7yau0pQh33F5_uyWfvcnm2Kg1_nMQuLrZ7SY,68
77
- aws_cis_controls_assessment-1.0.6.dist-info/top_level.txt,sha256=4OHmV6RAEWkz-Se50kfmuGCd-mUSotDZz3iLGF9CmkI,44
78
- aws_cis_controls_assessment-1.0.6.dist-info/RECORD,,
74
+ 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,,
docs/README.md CHANGED
@@ -14,6 +14,7 @@ Welcome to the comprehensive documentation for the AWS CIS Controls Compliance A
14
14
  - **[Developer Guide](developer-guide.md)** - Extending and customizing assessments
15
15
  - **[Assessment Logic](assessment-logic.md)** - Detailed assessment logic documentation
16
16
  - **[Config Rule Mappings](config-rule-mappings.md)** - Complete mapping of CIS Controls to AWS Config rules
17
+ - **[HTML Report Improvements](html-report-improvements.md)** - Enhanced HTML report features and customization
17
18
 
18
19
  ## Quick Start
19
20
 
@@ -0,0 +1,422 @@
1
+ # HTML Report Improvements Documentation
2
+
3
+ ## Overview
4
+
5
+ The HTML reporter has been enhanced with improved readability features and reduced redundancy. This document describes the new features, display formats, and customization options.
6
+
7
+ ## New Features
8
+
9
+ ### 1. Control Display Names
10
+
11
+ Controls now show both the control ID and the AWS Config rule name together, making it easier to understand what each control checks.
12
+
13
+ **Display Format:**
14
+ - Without title: `{control_id}: {config_rule_name}`
15
+ - With title: `{control_id}: {title} ({config_rule_name})`
16
+
17
+ **Examples:**
18
+ ```
19
+ 1.5: root-account-hardware-mfa-enabled
20
+ 2.1: IAM Password Policy (iam-password-policy)
21
+ 3.3: cloudtrail-enabled
22
+ ```
23
+
24
+ **Truncation:**
25
+ - Display names longer than 50 characters are truncated with ellipsis
26
+ - Full name appears in a tooltip on hover
27
+ - CSS class `.control-display-name.truncated` is applied
28
+
29
+ ### 2. Unique Controls Per Implementation Group
30
+
31
+ Each Implementation Group section now shows only the controls unique to that level, eliminating duplication.
32
+
33
+ **Behavior:**
34
+ - **IG1**: Shows all foundational controls
35
+ - **IG2**: Shows only controls unique to IG2 (not in IG1)
36
+ - **IG3**: Shows only controls unique to IG3 (not in IG1 or IG2)
37
+
38
+ **Visual Indicators:**
39
+ - An explanation box clarifies that IGs are cumulative
40
+ - Each section header shows the count of unique controls
41
+ - Scope descriptions explain what each IG includes
42
+
43
+ **Example:**
44
+ ```
45
+ IG1 - Essential Cyber Hygiene
46
+ Showing 58 foundational controls essential for all organizations.
47
+
48
+ IG2 - Enhanced Security (includes IG1)
49
+ Showing 74 additional controls beyond IG1 for enhanced security.
50
+
51
+ IG3 - Advanced Security (includes IG1 + IG2)
52
+ Showing 24 advanced controls beyond IG1 and IG2 for comprehensive security.
53
+ ```
54
+
55
+ ### 3. IG Membership Badges
56
+
57
+ Controls display badges indicating which Implementation Groups include them.
58
+
59
+ **Badge Colors:**
60
+ - **IG1**: Blue (#3498db)
61
+ - **IG2**: Green (#27ae60)
62
+ - **IG3**: Purple (#9b59b6)
63
+
64
+ **Display Locations:**
65
+ - Implementation Groups section: Shows originating IG badge
66
+ - Detailed Findings section: Shows all IGs that include the control
67
+
68
+ **Example:**
69
+ ```
70
+ Control: 1.5: root-account-hardware-mfa-enabled
71
+ Badges: [IG1] [IG2] [IG3] (appears in all three IGs)
72
+
73
+ Control: 5.2: encryption-at-rest-enabled
74
+ Badges: [IG2] [IG3] (appears only in IG2 and IG3)
75
+ ```
76
+
77
+ ### 4. Consolidated Detailed Findings
78
+
79
+ The Detailed Findings section now groups findings by control ID only, eliminating duplication across IGs.
80
+
81
+ **Changes:**
82
+ - Removed "IG1 Detailed Findings", "IG2 Detailed Findings", "IG3 Detailed Findings" subsections
83
+ - Each control appears once with all its findings
84
+ - IG membership badges show which IGs include each control
85
+ - Findings are sorted alphanumerically by control ID
86
+
87
+ **Benefits:**
88
+ - Easier to remediate issues (each resource listed once)
89
+ - Clearer understanding of which IGs are affected
90
+ - Reduced report length and improved readability
91
+
92
+ ## CSS Classes for Custom Styling
93
+
94
+ ### IG Badge Classes
95
+
96
+ ```css
97
+ /* IG1 badge - Blue */
98
+ .ig-badge-1 {
99
+ background-color: #3498db;
100
+ color: white;
101
+ }
102
+
103
+ /* IG2 badge - Green */
104
+ .ig-badge-2 {
105
+ background-color: #27ae60;
106
+ color: white;
107
+ }
108
+
109
+ /* IG3 badge - Purple */
110
+ .ig-badge-3 {
111
+ background-color: #9b59b6;
112
+ color: white;
113
+ }
114
+
115
+ /* Default badge for unknown IGs */
116
+ .ig-badge-default {
117
+ background-color: #95a5a6;
118
+ color: white;
119
+ }
120
+ ```
121
+
122
+ ### Control Display Name Classes
123
+
124
+ ```css
125
+ /* Control display name container */
126
+ .control-display-name {
127
+ font-weight: 600;
128
+ color: #2c3e50;
129
+ margin-bottom: 5px;
130
+ font-size: 0.95em;
131
+ }
132
+
133
+ /* Truncated display names with tooltip */
134
+ .control-display-name.truncated {
135
+ overflow: hidden;
136
+ text-overflow: ellipsis;
137
+ white-space: nowrap;
138
+ cursor: help;
139
+ }
140
+ ```
141
+
142
+ ### IG Membership Badge Container
143
+
144
+ ```css
145
+ /* Container for IG membership badges */
146
+ .ig-membership-badges {
147
+ display: flex;
148
+ gap: 5px;
149
+ margin-top: 5px;
150
+ margin-bottom: 10px;
151
+ }
152
+
153
+ /* Individual IG membership badge */
154
+ .ig-membership-badge {
155
+ font-size: 0.7em;
156
+ padding: 2px 6px;
157
+ border-radius: 10px;
158
+ font-weight: bold;
159
+ text-transform: uppercase;
160
+ letter-spacing: 0.5px;
161
+ }
162
+ ```
163
+
164
+ ### IG Explanation and Scope
165
+
166
+ ```css
167
+ /* Informational box explaining IG cumulative nature */
168
+ .ig-explanation {
169
+ background-color: #e8f4fd;
170
+ border-left: 4px solid #3498db;
171
+ padding: 15px;
172
+ margin-bottom: 30px;
173
+ border-radius: 5px;
174
+ }
175
+
176
+ /* Scope description for each IG section */
177
+ .ig-scope {
178
+ color: #666;
179
+ font-size: 0.9em;
180
+ margin-top: 5px;
181
+ }
182
+ ```
183
+
184
+ ## Customization Examples
185
+
186
+ ### Change IG Badge Colors
187
+
188
+ To customize the IG badge colors, override the CSS classes:
189
+
190
+ ```css
191
+ /* Custom color scheme */
192
+ .ig-badge-1 {
193
+ background-color: #e74c3c; /* Red for IG1 */
194
+ color: white;
195
+ }
196
+
197
+ .ig-badge-2 {
198
+ background-color: #f39c12; /* Orange for IG2 */
199
+ color: white;
200
+ }
201
+
202
+ .ig-badge-3 {
203
+ background-color: #9b59b6; /* Keep purple for IG3 */
204
+ color: white;
205
+ }
206
+ ```
207
+
208
+ ### Adjust Truncation Threshold
209
+
210
+ The default truncation threshold is 50 characters. To change this, modify the `_enrich_control_metadata()` method:
211
+
212
+ ```python
213
+ # In html_reporter.py
214
+ enriched['needs_truncation'] = len(enriched['display_name']) > 80 # Change to 80 characters
215
+ ```
216
+
217
+ ### Hide IG Badges
218
+
219
+ To hide IG badges in the report, add this CSS:
220
+
221
+ ```css
222
+ .ig-membership-badges {
223
+ display: none;
224
+ }
225
+ ```
226
+
227
+ ### Customize Control Card Layout
228
+
229
+ To adjust the control card layout:
230
+
231
+ ```css
232
+ .control-card {
233
+ border: 2px solid #3498db; /* Thicker border */
234
+ border-radius: 12px; /* More rounded corners */
235
+ padding: 25px; /* More padding */
236
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); /* Gradient background */
237
+ }
238
+ ```
239
+
240
+ ## Backward Compatibility
241
+
242
+ The improvements maintain full backward compatibility:
243
+
244
+ 1. **Existing Data Structures**: Works with existing `AssessmentResult` data without modification
245
+ 2. **Graceful Fallback**: If `config_rule_name` is missing, displays control ID only
246
+ 3. **Preserved Sections**: All existing sections and functionality remain intact
247
+ 4. **CSS Compatibility**: Existing CSS classes are preserved for custom styling
248
+ 5. **JavaScript Functions**: All interactive features continue to work
249
+
250
+ ## Migration Notes
251
+
252
+ No migration is required. The improvements work automatically with existing assessment data:
253
+
254
+ - Old reports: Show control IDs only (if config_rule_name was not available)
255
+ - New reports: Show formatted display names with rule names
256
+ - Mixed data: Gracefully handles both old and new data formats
257
+
258
+ ## API Reference
259
+
260
+ ### Key Methods
261
+
262
+ #### `_format_control_display_name(control_id, config_rule_name, title=None)`
263
+ Formats control display name combining ID, rule name, and optional title.
264
+
265
+ **Parameters:**
266
+ - `control_id` (str): Control identifier (e.g., "1.5")
267
+ - `config_rule_name` (str): AWS Config rule name
268
+ - `title` (str, optional): Human-readable title
269
+
270
+ **Returns:** Formatted display name string
271
+
272
+ #### `_get_ig_badge_class(ig_name)`
273
+ Returns CSS class for IG badge styling.
274
+
275
+ **Parameters:**
276
+ - `ig_name` (str): Implementation Group name (IG1, IG2, or IG3)
277
+
278
+ **Returns:** CSS class name string
279
+
280
+ #### `_enrich_control_metadata(control_data, control_id, ig_name, all_igs)`
281
+ Enriches control data with display metadata.
282
+
283
+ **Parameters:**
284
+ - `control_data` (dict): Existing control data
285
+ - `control_id` (str): Control identifier
286
+ - `ig_name` (str): Implementation Group name
287
+ - `all_igs` (dict): All implementation groups data
288
+
289
+ **Returns:** Enhanced control data dictionary
290
+
291
+ #### `_consolidate_findings_by_control(implementation_groups)`
292
+ Consolidates findings from all IGs, grouped by control ID only.
293
+
294
+ **Parameters:**
295
+ - `implementation_groups` (dict): Implementation groups data
296
+
297
+ **Returns:** Dictionary mapping control_id to consolidated findings
298
+
299
+ #### `_get_control_ig_membership(control_id, implementation_groups)`
300
+ Determines which IGs include a specific control.
301
+
302
+ **Parameters:**
303
+ - `control_id` (str): Control identifier
304
+ - `implementation_groups` (dict): All IG data
305
+
306
+ **Returns:** List of IG names
307
+
308
+ ## Examples
309
+
310
+ ### Example 1: Control Card Display
311
+
312
+ **Before:**
313
+ ```
314
+ ┌─────────────────────────┐
315
+ │ 1.5 │
316
+ │ ━━━━━━━━━━━━━━━━━━━━━ │
317
+ │ 0% compliant │
318
+ └─────────────────────────┘
319
+ ```
320
+
321
+ **After:**
322
+ ```
323
+ ┌─────────────────────────────────────────────┐
324
+ │ 1.5: root-account-hardware-mfa-enabled │
325
+ │ [IG1] │
326
+ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
327
+ │ 0% compliant │
328
+ └─────────────────────────────────────────────┘
329
+ ```
330
+
331
+ ### Example 2: Detailed Findings Section
332
+
333
+ **Before:**
334
+ ```
335
+ Detailed Findings
336
+
337
+ IG1 Detailed Findings
338
+ Control 1.5
339
+ - Resource: 175331854181
340
+ - Status: NON_COMPLIANT
341
+
342
+ IG2 Detailed Findings
343
+ Control 1.5
344
+ - Resource: 175331854181
345
+ - Status: NON_COMPLIANT
346
+
347
+ IG3 Detailed Findings
348
+ Control 1.5
349
+ - Resource: 175331854181
350
+ - Status: NON_COMPLIANT
351
+ ```
352
+
353
+ **After:**
354
+ ```
355
+ Detailed Findings
356
+
357
+ 1.5: root-account-hardware-mfa-enabled
358
+ Implementation Groups: [IG1] [IG2] [IG3]
359
+ - Resource: 175331854181
360
+ - Status: NON_COMPLIANT
361
+ ```
362
+
363
+ ### Example 3: Implementation Groups Section
364
+
365
+ **Before:**
366
+ ```
367
+ IG1 - Essential Cyber Hygiene (58 controls)
368
+ [Shows all 58 controls]
369
+
370
+ IG2 - Enhanced Security (132 controls)
371
+ [Shows all 132 controls, including 58 from IG1]
372
+
373
+ IG3 - Advanced Security (156 controls)
374
+ [Shows all 156 controls, including 132 from IG1+IG2]
375
+ ```
376
+
377
+ **After:**
378
+ ```
379
+ Implementation Groups
380
+ Note: IGs are cumulative. IG2 includes IG1, IG3 includes IG1+IG2.
381
+
382
+ IG1 - Essential Cyber Hygiene
383
+ Showing 58 foundational controls essential for all organizations.
384
+ [Shows 58 IG1 controls]
385
+
386
+ IG2 - Enhanced Security (includes IG1)
387
+ Showing 74 additional controls beyond IG1 for enhanced security.
388
+ [Shows only 74 controls unique to IG2]
389
+
390
+ IG3 - Advanced Security (includes IG1 + IG2)
391
+ Showing 24 advanced controls beyond IG1 and IG2 for comprehensive security.
392
+ [Shows only 24 controls unique to IG3]
393
+ ```
394
+
395
+ ## Troubleshooting
396
+
397
+ ### Issue: Control names not showing
398
+
399
+ **Cause:** `config_rule_name` field is missing in assessment data
400
+
401
+ **Solution:** The reporter gracefully falls back to showing control ID only. To fix, ensure your assessment includes config_rule_name in control data.
402
+
403
+ ### Issue: IG badges not appearing
404
+
405
+ **Cause:** CSS classes may be overridden by custom styles
406
+
407
+ **Solution:** Check for conflicting CSS rules and ensure `.ig-membership-badge` classes are not hidden.
408
+
409
+ ### Issue: Truncation not working
410
+
411
+ **Cause:** CSS for `.control-display-name.truncated` may be missing
412
+
413
+ **Solution:** Ensure the CSS styles are included in the report. Check browser developer tools for CSS conflicts.
414
+
415
+ ## Support
416
+
417
+ For issues or questions about the HTML report improvements:
418
+
419
+ 1. Check this documentation for examples and customization options
420
+ 2. Review the docstrings in `html_reporter.py` for detailed API information
421
+ 3. Examine the CSS classes in the generated HTML for styling customization
422
+ 4. Refer to the requirements and design documents in `.kiro/specs/html-report-improvements/`
docs/installation.md CHANGED
@@ -104,7 +104,7 @@ aws-cis-assess assess --aws-profile my-sso-profile
104
104
 
105
105
  ## Required IAM Permissions
106
106
 
107
- The tool requires read-only permissions for various AWS services. Here's a comprehensive IAM policy:
107
+ The tool requires read-only permissions for various AWS services. Here's a comprehensive IAM policy that covers all 136 assessments:
108
108
 
109
109
  ```json
110
110
  {
@@ -113,50 +113,87 @@ The tool requires read-only permissions for various AWS services. Here's a compr
113
113
  {
114
114
  "Effect": "Allow",
115
115
  "Action": [
116
- "ec2:Describe*",
117
- "iam:Get*",
118
- "iam:List*",
119
- "s3:GetBucket*",
120
- "s3:GetObject*",
121
- "s3:ListBucket*",
122
- "rds:Describe*",
116
+ "acm:Describe*",
117
+ "acm:Get*",
118
+ "acm:List*",
119
+ "apigateway:GET",
120
+ "application-autoscaling:Describe*",
121
+ "autoscaling:Describe*",
122
+ "backup:Describe*",
123
+ "backup:Get*",
124
+ "backup:List*",
123
125
  "cloudtrail:Describe*",
124
126
  "cloudtrail:GetTrailStatus",
125
127
  "cloudtrail:LookupEvents",
126
128
  "cloudwatch:Describe*",
127
129
  "cloudwatch:Get*",
128
130
  "cloudwatch:List*",
129
- "logs:Describe*",
130
- "guardduty:Get*",
131
- "guardduty:List*",
131
+ "codebuild:BatchGetProjects",
132
+ "codebuild:ListProjects",
132
133
  "config:Describe*",
133
134
  "config:Get*",
134
135
  "config:List*",
136
+ "dms:Describe*",
137
+ "dms:List*",
138
+ "dynamodb:Describe*",
139
+ "dynamodb:List*",
140
+ "ec2:Describe*",
141
+ "ecr:Describe*",
142
+ "ecr:Get*",
143
+ "ecr:List*",
144
+ "ecs:Describe*",
145
+ "ecs:List*",
146
+ "elasticfilesystem:Describe*",
147
+ "elasticache:Describe*",
148
+ "elasticache:List*",
149
+ "elasticbeanstalk:Describe*",
150
+ "elasticbeanstalk:List*",
151
+ "elasticloadbalancing:Describe*",
152
+ "elasticmapreduce:Describe*",
153
+ "elasticmapreduce:List*",
154
+ "elasticmapreduce:ViewEventsFromAllClustersInConsole",
155
+ "es:Describe*",
156
+ "es:ESHttpGet",
157
+ "es:List*",
158
+ "guardduty:Get*",
159
+ "guardduty:List*",
160
+ "iam:Get*",
161
+ "iam:List*",
162
+ "kinesis:Describe*",
163
+ "kinesis:List*",
135
164
  "kms:Describe*",
136
165
  "kms:Get*",
137
166
  "kms:List*",
167
+ "lambda:Get*",
168
+ "lambda:List*",
169
+ "logs:Describe*",
170
+ "organizations:Describe*",
171
+ "organizations:List*",
172
+ "rds:Describe*",
173
+ "redshift:Describe*",
174
+ "s3:GetBucket*",
175
+ "s3:GetObject*",
176
+ "s3:ListBucket*",
177
+ "s3:GetAccountPublicAccessBlock",
178
+ "sagemaker:Describe*",
179
+ "sagemaker:List*",
138
180
  "secretsmanager:Describe*",
139
181
  "secretsmanager:List*",
182
+ "securityhub:Describe*",
183
+ "securityhub:Get*",
184
+ "securityhub:List*",
185
+ "sns:Get*",
186
+ "sns:List*",
187
+ "sqs:Get*",
188
+ "sqs:List*",
140
189
  "ssm:Describe*",
141
190
  "ssm:Get*",
142
191
  "ssm:List*",
143
- "organizations:Describe*",
144
- "organizations:List*",
145
- "backup:Describe*",
146
- "backup:Get*",
147
- "backup:List*",
148
- "dynamodb:Describe*",
149
- "dynamodb:List*",
150
- "elasticloadbalancing:Describe*",
151
- "apigateway:GET",
152
- "redshift:Describe*",
153
- "ecr:Describe*",
154
- "ecr:Get*",
155
- "ecr:List*",
156
- "wafv2:Get*",
157
- "wafv2:List*",
192
+ "sts:GetCallerIdentity",
158
193
  "waf:Get*",
159
- "waf:List*"
194
+ "waf:List*",
195
+ "wafv2:Get*",
196
+ "wafv2:List*"
160
197
  ],
161
198
  "Resource": "*"
162
199
  }
@@ -164,6 +201,20 @@ The tool requires read-only permissions for various AWS services. Here's a compr
164
201
  }
165
202
  ```
166
203
 
204
+ ### Services Covered
205
+
206
+ This policy includes permissions for all AWS services assessed by the tool:
207
+
208
+ **Core Services:** EC2, IAM, S3, RDS, CloudTrail, CloudWatch, Logs
209
+ **Security Services:** GuardDuty, Security Hub, WAF, KMS, Secrets Manager, ACM
210
+ **Container Services:** ECS, ECR, EKS (via EC2), Lambda
211
+ **Data Services:** DynamoDB, Redshift, ElastiCache, OpenSearch, Elasticsearch, Kinesis, SQS, SNS
212
+ **Compute Services:** Auto Scaling, Elastic Beanstalk, EMR, SageMaker
213
+ **Network Services:** ELB, ALB/NLB, API Gateway, VPC
214
+ **Storage Services:** EFS, S3 Control, Backup
215
+ **DevOps Services:** CodeBuild, DMS
216
+ **Management Services:** SSM, Organizations, Config, STS
217
+
167
218
  ### Minimal Permissions for Testing
168
219
 
169
220
  For initial testing, you can use the AWS managed `ReadOnlyAccess` policy:
docs/user-guide.md CHANGED
@@ -210,7 +210,7 @@ JSON structure:
210
210
 
211
211
  ### HTML Format
212
212
 
213
- Interactive web-based report:
213
+ Interactive web-based report with enhanced readability features:
214
214
 
215
215
  ```bash
216
216
  aws-cis-assess assess --output-format html --output-file report.html
@@ -218,11 +218,17 @@ aws-cis-assess assess --output-format html --output-file report.html
218
218
 
219
219
  Features:
220
220
  - Executive dashboard with charts
221
+ - Control display names with AWS Config rule names
222
+ - Unique controls per Implementation Group (eliminates duplication)
223
+ - IG membership badges for easy identification
224
+ - Consolidated detailed findings (each resource listed once)
221
225
  - Drill-down capabilities
222
226
  - Responsive design
223
227
  - Remediation guidance
224
228
  - Export capabilities
225
229
 
230
+ > **Note:** See [HTML Report Improvements](html-report-improvements.md) for detailed documentation on the enhanced features, customization options, and examples.
231
+
226
232
  ### CSV Format
227
233
 
228
234
  Spreadsheet-compatible format: