iam-policy-validator 1.7.2__py3-none-any.whl → 1.9.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.
Files changed (56) hide show
  1. {iam_policy_validator-1.7.2.dist-info → iam_policy_validator-1.9.0.dist-info}/METADATA +127 -6
  2. iam_policy_validator-1.9.0.dist-info/RECORD +95 -0
  3. iam_validator/__init__.py +1 -1
  4. iam_validator/__version__.py +1 -1
  5. iam_validator/checks/__init__.py +5 -3
  6. iam_validator/checks/action_condition_enforcement.py +559 -207
  7. iam_validator/checks/action_resource_matching.py +12 -15
  8. iam_validator/checks/action_validation.py +7 -13
  9. iam_validator/checks/condition_key_validation.py +7 -13
  10. iam_validator/checks/condition_type_mismatch.py +15 -22
  11. iam_validator/checks/full_wildcard.py +9 -13
  12. iam_validator/checks/mfa_condition_check.py +8 -17
  13. iam_validator/checks/policy_size.py +6 -39
  14. iam_validator/checks/policy_structure.py +547 -0
  15. iam_validator/checks/policy_type_validation.py +61 -46
  16. iam_validator/checks/principal_validation.py +71 -148
  17. iam_validator/checks/resource_validation.py +13 -20
  18. iam_validator/checks/sensitive_action.py +15 -18
  19. iam_validator/checks/service_wildcard.py +8 -14
  20. iam_validator/checks/set_operator_validation.py +21 -28
  21. iam_validator/checks/sid_uniqueness.py +16 -42
  22. iam_validator/checks/trust_policy_validation.py +506 -0
  23. iam_validator/checks/utils/sensitive_action_matcher.py +26 -26
  24. iam_validator/checks/utils/wildcard_expansion.py +2 -2
  25. iam_validator/checks/wildcard_action.py +9 -13
  26. iam_validator/checks/wildcard_resource.py +9 -13
  27. iam_validator/commands/cache.py +4 -3
  28. iam_validator/commands/validate.py +15 -9
  29. iam_validator/core/__init__.py +2 -3
  30. iam_validator/core/access_analyzer.py +1 -1
  31. iam_validator/core/access_analyzer_report.py +2 -2
  32. iam_validator/core/aws_fetcher.py +24 -1028
  33. iam_validator/core/aws_service/__init__.py +21 -0
  34. iam_validator/core/aws_service/cache.py +108 -0
  35. iam_validator/core/aws_service/client.py +205 -0
  36. iam_validator/core/aws_service/fetcher.py +612 -0
  37. iam_validator/core/aws_service/parsers.py +149 -0
  38. iam_validator/core/aws_service/patterns.py +51 -0
  39. iam_validator/core/aws_service/storage.py +291 -0
  40. iam_validator/core/aws_service/validators.py +379 -0
  41. iam_validator/core/check_registry.py +165 -93
  42. iam_validator/core/config/condition_requirements.py +69 -17
  43. iam_validator/core/config/defaults.py +58 -52
  44. iam_validator/core/config/service_principals.py +40 -3
  45. iam_validator/core/constants.py +17 -0
  46. iam_validator/core/ignore_patterns.py +297 -0
  47. iam_validator/core/models.py +15 -5
  48. iam_validator/core/policy_checks.py +38 -475
  49. iam_validator/core/policy_loader.py +27 -4
  50. iam_validator/sdk/__init__.py +1 -1
  51. iam_validator/sdk/context.py +1 -1
  52. iam_validator/sdk/helpers.py +1 -1
  53. iam_policy_validator-1.7.2.dist-info/RECORD +0 -84
  54. {iam_policy_validator-1.7.2.dist-info → iam_policy_validator-1.9.0.dist-info}/WHEEL +0 -0
  55. {iam_policy_validator-1.7.2.dist-info → iam_policy_validator-1.9.0.dist-info}/entry_points.txt +0 -0
  56. {iam_policy_validator-1.7.2.dist-info → iam_policy_validator-1.9.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iam-policy-validator
3
- Version: 1.7.2
3
+ Version: 1.9.0
4
4
  Summary: Validate AWS IAM policies for correctness and security using AWS Service Reference API
5
5
  Project-URL: Homepage, https://github.com/boogy/iam-policy-validator
6
6
  Project-URL: Documentation, https://github.com/boogy/iam-policy-validator/tree/main/docs
@@ -242,8 +242,13 @@ results = await validate_policies(policies)
242
242
 
243
243
  **All checks are fully configurable** - Enable/disable checks, adjust severity levels, add custom requirements, and define ignore patterns through the configuration file.
244
244
 
245
+ ### Core Checks (18 always-on + 1 opt-in)
246
+
247
+ The validator includes **19 built-in checks** organized into three categories:
248
+
245
249
  ### AWS Correctness Checks (12)
246
250
  Validates policies against AWS IAM requirements:
251
+ - **Policy structure** - Validates fundamental IAM policy grammar (Version, Effect, required fields, conflicts)
247
252
  - **Action validation** - Verify actions exist in AWS services
248
253
  - **Condition key validation** - Check condition keys are valid for actions
249
254
  - **Condition type matching** - Ensure condition values match expected types
@@ -255,7 +260,6 @@ Validates policies against AWS IAM requirements:
255
260
  - **MFA condition patterns** - Detect common MFA anti-patterns
256
261
  - **Policy type validation** - Enforce policy type requirements (RCP, SCP, etc.)
257
262
  - **Action-resource matching** - Detect impossible action-resource combinations
258
- - **Action-resource constraints** - Validate service-specific constraints
259
263
 
260
264
  ### Security Best Practices (6)
261
265
  Identifies security risks and overly permissive permissions:
@@ -266,6 +270,15 @@ Identifies security risks and overly permissive permissions:
266
270
  - **Sensitive actions** - ~490 actions across 4 risk categories requiring conditions
267
271
  - **Action condition enforcement** - Enforce required conditions (MFA, IP, SourceArn, etc.)
268
272
 
273
+ ### Trust Policy Validation (1 - Opt-in, Disabled by Default)
274
+ Specialized validation for role assumption policies:
275
+ - **Trust policy validation** - Validates action-principal coupling for assume role actions
276
+ - Ensures correct principal types (`AssumeRoleWithSAML` → Federated, etc.)
277
+ - Validates SAML/OIDC provider ARN formats
278
+ - Enforces required conditions (`SAML:aud`, OIDC audience, etc.)
279
+ - Use with `--policy-type TRUST_POLICY` flag
280
+ - See [Trust Policy Examples](examples/trust-policies/README.md)
281
+
269
282
  ### Configuration & Customization
270
283
 
271
284
  All checks can be customized via a yaml configuration file ex: `.iam-validator.yaml`:
@@ -325,10 +338,11 @@ ignore_patterns:
325
338
  ```
326
339
 
327
340
  **📖 Complete documentation:**
328
- - [Check Reference Guide](docs/check-reference.md) - All 18 checks with examples
341
+ - [Check Reference Guide](docs/check-reference.md) - All 19 checks with examples
329
342
  - [Configuration Guide](docs/configuration.md) - Full configuration options
330
343
  - [Condition Requirements](docs/condition-requirements.md) - Action-specific requirements
331
344
  - [Privilege Escalation Detection](docs/privilege-escalation.md) - How privilege escalation works
345
+ - [Trust Policy Validation](examples/trust-policies/README.md) - Trust policy examples and validation
332
346
 
333
347
  ## Output Formats & GitHub Integration
334
348
 
@@ -355,9 +369,114 @@ ignore_patterns:
355
369
 
356
370
  **📖 See [GitHub Integration Guide](docs/github-actions-workflows.md) for detailed examples**
357
371
 
372
+ ## Cache Management & Offline Mode
373
+
374
+ ### Offline Validation (No AWS API Calls)
375
+
376
+ Validate policies without AWS API access using pre-downloaded service definitions. Useful for:
377
+ - **Air-gapped environments** - No internet access required
378
+ - **Rate limiting avoidance** - No AWS API throttling (429 errors)
379
+ - **CI/CD performance** - Faster validation with local files
380
+ - **Development** - Work offline without AWS credentials
381
+
382
+ **Download AWS service definitions once:**
383
+ ```bash
384
+ # Download all AWS service definitions to local directory
385
+ iam-validator download-services --output-dir ./aws-services
386
+
387
+ # Directory structure:
388
+ # aws-services/
389
+ # ├── _services.json # List of all services
390
+ # ├── s3.json # S3 service definition
391
+ # ├── iam.json # IAM service definition
392
+ # └── ... (250+ services)
393
+ ```
394
+
395
+ **Use offline mode:**
396
+ ```bash
397
+ # CLI: Use --aws-services-dir flag
398
+ iam-validator validate --path policies/ --aws-services-dir ./aws-services
399
+
400
+ # Config file: Set aws_services_dir
401
+ # .iam-validator.yaml
402
+ settings:
403
+ aws_services_dir: ./aws-services
404
+ ```
405
+
406
+ **Python library:**
407
+ ```python
408
+ from iam_validator.core.policy_checks import validate_policies
409
+ from iam_validator.core.policy_loader import PolicyLoader
410
+
411
+ loader = PolicyLoader()
412
+ policies = loader.load_from_path("./policies")
413
+
414
+ # Pass aws_services_dir to enable offline mode
415
+ results = await validate_policies(
416
+ policies,
417
+ aws_services_dir="./aws-services"
418
+ )
419
+ ```
420
+
421
+ ### Cache Directory Control
422
+
423
+ Control where AWS service definitions are cached (for library users):
424
+
425
+ ```python
426
+ from iam_validator.core.aws_service import AWSServiceFetcher
427
+
428
+ async with AWSServiceFetcher() as fetcher:
429
+ # Get current cache location
430
+ cache_path = fetcher.get_cache_directory()
431
+ print(f"Cache at: {cache_path}")
432
+ # macOS: ~/Library/Caches/iam-validator/aws_services
433
+ # Linux: ~/.cache/iam-validator/aws_services
434
+ # Windows: %LOCALAPPDATA%/iam-validator/cache/aws_services
435
+
436
+ # Change cache directory at runtime
437
+ fetcher.set_cache_directory("/tmp/custom-cache")
438
+
439
+ # All future cache operations use the new directory
440
+ await fetcher.fetch_services()
441
+ ```
442
+
443
+ ### Cache Management CLI
444
+
445
+ Manage the cache directly:
446
+
447
+ ```bash
448
+ # Show cache information and statistics
449
+ iam-validator cache info
450
+
451
+ # List all cached services
452
+ iam-validator cache list
453
+ iam-validator cache list --format columns
454
+
455
+ # Show cache directory location
456
+ iam-validator cache location
457
+
458
+ # Clear cache
459
+ iam-validator cache clear
460
+
461
+ # Refresh cache (clear + re-download common services)
462
+ iam-validator cache refresh
463
+
464
+ # Pre-fetch common services (without clearing)
465
+ iam-validator cache prefetch
466
+ ```
467
+
468
+ **Cache configuration:**
469
+ ```yaml
470
+ # .iam-validator.yaml
471
+ settings:
472
+ cache_enabled: true # Enable/disable caching
473
+ cache_ttl_hours: 168 # Cache lifetime (7 days default)
474
+ cache_directory: /custom/path # Custom cache location
475
+ ```
476
+
358
477
  ## AWS Access Analyzer (Optional)
359
478
 
360
- In addition to the 18 built-in checks, optionally enable AWS Access Analyzer for additional validation capabilities that require AWS credentials:
479
+ In addition to the 19 built-in checks, optionally enable AWS Access Analyzer for additional validation capabilities that require AWS credentials:
361
480
 
362
481
  ### Access Analyzer Capabilities
363
482
 
@@ -394,16 +513,18 @@ iam-validator analyze --path bucket-policy.json \
394
513
  ## 📚 Documentation
395
514
 
396
515
  **Guides:**
397
- - [Check Reference](docs/check-reference.md) - All 18 checks with examples
516
+ - [Check Reference](docs/check-reference.md) - All 19 checks with examples
398
517
  - [Configuration Guide](docs/configuration.md) - Customize checks and behavior
399
518
  - [GitHub Actions Guide](docs/github-actions-workflows.md) - CI/CD integration
400
519
  - [Python Library Guide](docs/python-library-usage.md) - Use as Python package
520
+ - [Trust Policy Guide](examples/trust-policies/README.md) - Trust policy validation
401
521
  - [Contributing Guide](CONTRIBUTING.md) - How to contribute
402
522
 
403
523
  **Examples:**
404
- - [Configuration Examples](examples/configs/) - 9 config file templates
524
+ - [Configuration Examples](examples/configs/) - 9+ config file templates
405
525
  - [Workflow Examples](examples/github-actions/) - GitHub Actions workflows
406
526
  - [Custom Checks](examples/custom_checks/) - Add your own validation rules
527
+ - [Trust Policies](examples/trust-policies/) - Trust policy examples
407
528
 
408
529
  ## 🤝 Contributing
409
530
 
@@ -0,0 +1,95 @@
1
+ iam_validator/__init__.py,sha256=xHdUASOxFHwEXfT_GSr_KrkLlnxZ-pAAr1wW1PwAGko,693
2
+ iam_validator/__main__.py,sha256=to_nz3n_IerJpVVZZ6WSFlFR5s_06J0csfPOTfQZG8g,197
3
+ iam_validator/__version__.py,sha256=IUF2zxBY8L_m2_x_tEDJHqdJthjPhXgbZg7CYXJCCrA,361
4
+ iam_validator/checks/__init__.py,sha256=OTkPnmlelu4YjMO8krjhu2wXiTV72RzopA5u1SfPQA0,1990
5
+ iam_validator/checks/action_condition_enforcement.py,sha256=0dCH_xX-Xc0uLxtNeRjrpNjWYbdWQRzO1XNcLTSn6sI,51698
6
+ iam_validator/checks/action_resource_matching.py,sha256=WiGJmCIJfx5yituMjZxpKmk-99N6nK20ueN02ddy9oM,19296
7
+ iam_validator/checks/action_validation.py,sha256=QXfNamcstQIO41zNed1-bCmXYkXdV77owu8G2cZ09-A,2517
8
+ iam_validator/checks/condition_key_validation.py,sha256=QJjG82wxvjdG2m-YuEzAjKRRiWaaPkf_LChdUTvm9g4,3919
9
+ iam_validator/checks/condition_type_mismatch.py,sha256=y7M9rlSGaBmnckvZ_LXyfgMXz_Rl9ctCwOJ4mf0OF2E,10496
10
+ iam_validator/checks/full_wildcard.py,sha256=s-CEsHRa-VTL1e-cdEJkvj1Q6QaL6QihzcFz7BFlK5Y,2238
11
+ iam_validator/checks/mfa_condition_check.py,sha256=7qTgqxZl9GHqu0VsDTnogLgS4uAI4mlKZyR8DMAown4,4710
12
+ iam_validator/checks/policy_size.py,sha256=eJd36Nj4gqWLIkQ5imhHR1hGtQ6T-iJsC22Wd1VSUf0,4681
13
+ iam_validator/checks/policy_structure.py,sha256=9eR8EEcERKcc5n7D3_LmFIQyDNzVV5MexOVFfvqrlAI,21743
14
+ iam_validator/checks/policy_type_validation.py,sha256=z4RiAvmPhtrf6Gj3z1Ln4dDFWnFclsokVL7x-YhkMiM,15986
15
+ iam_validator/checks/principal_validation.py,sha256=jusBVEA-sHHft3Kfq_YdvPUgX3cBnxKqC1zhth74kCU,27691
16
+ iam_validator/checks/resource_validation.py,sha256=G_Pfh3WZ6-C3KTk3XPpUKhOESwIO5ISgbsUXc-aK1SE,5988
17
+ iam_validator/checks/sensitive_action.py,sha256=tKvZYjZvpRqRyS-JE1R8BaT3ecahKgghSsIZ9kwxahs,9799
18
+ iam_validator/checks/service_wildcard.py,sha256=ycggiozWm1Z4lkWsDlooMEvRJflzLxZkihQDPZ9G_zw,3949
19
+ iam_validator/checks/set_operator_validation.py,sha256=FyxZ7qWlp9-ABzZaRRkxRP_Hws7Re7qZgeQCCM9sJAM,7258
20
+ iam_validator/checks/sid_uniqueness.py,sha256=vfpk88b9G9OApxtrotABI2mPXvGd_C_X4gJKeqIURlk,5968
21
+ iam_validator/checks/trust_policy_validation.py,sha256=a8Sm2xu3gFOHLd7rXDl-ibqiLEmg5c-dyWv1lK2i6HA,17816
22
+ iam_validator/checks/wildcard_action.py,sha256=CyURgURDt2fQT2468LK813RupQ3WWvpmvLVLjUZf9QQ,1960
23
+ iam_validator/checks/wildcard_resource.py,sha256=AidyyKMQL3PxLI6Zd-iFiiI6BnvSle4ATLwDXUmV3jQ,5404
24
+ iam_validator/checks/utils/__init__.py,sha256=j0X4ibUB6RGx2a-kNoJnlVZwHfoEvzZsIeTmJIAoFzA,45
25
+ iam_validator/checks/utils/policy_level_checks.py,sha256=2V60C0zhKfsFPjQ-NMlD3EemtwA9S6-4no8nETgXdQE,5274
26
+ iam_validator/checks/utils/sensitive_action_matcher.py,sha256=qDXcJa_2sCJu9pBbjDlI7x5lPtLRc6jQCpKPMheCOJQ,11215
27
+ iam_validator/checks/utils/wildcard_expansion.py,sha256=3W13hlyWcP2wJ6w-BwM887VOnRzglK6Bk3eHMjUtOco,3131
28
+ iam_validator/commands/__init__.py,sha256=M-5bo8w0TCWydK0cXgJyPD2fmk8bpQs-3b26YbgLzlc,565
29
+ iam_validator/commands/analyze.py,sha256=rvLBJ5_A3HB530xtixhaIsC19QON68olEQnn8TievgI,20784
30
+ iam_validator/commands/base.py,sha256=5baCCMwxz7pdQ6XMpWfXFNz7i1l5dB8Qv9dKKR04Gzs,1074
31
+ iam_validator/commands/cache.py,sha256=llfyQzPE5Azd5YcW0ohYcYjF_OCyiQ1GoJQ982t71lQ,14294
32
+ iam_validator/commands/download_services.py,sha256=KKz3ybMLT8DQUf9aFZ0tilJ-o1b6PE8Pf1pC4K6cT8I,9175
33
+ iam_validator/commands/post_to_pr.py,sha256=CvUXs2xvO-UhluxdfNM6F0TCWD8hDBEOiYw60fm1Dms,2363
34
+ iam_validator/commands/validate.py,sha256=Z6GHLeKV8oINSTXaZ0asBxa56S1G4ORwOBqrAz3Xx-M,23945
35
+ iam_validator/core/__init__.py,sha256=hYXkSbxplKzhM6dqrVzV4M3k7GKLsZbgExypxKq74gs,376
36
+ iam_validator/core/access_analyzer.py,sha256=mtMaY-FnKjKEVITky_9ywZe1FaCAm61ElRv5Z_ZeC7E,24562
37
+ iam_validator/core/access_analyzer_report.py,sha256=UMm2RNGj2rAKav1zsCw_htQZZRwRC0jjayd2zvKma1A,24896
38
+ iam_validator/core/aws_fetcher.py,sha256=op93QvtGmeLF9dHobl2IuoPDeunn33pBLb8h7XjtmoQ,920
39
+ iam_validator/core/check_registry.py,sha256=oRCdWoCGQ8VZERVYd821u9r5NdKQ9FMC54e6dRWJfqw,25475
40
+ iam_validator/core/cli.py,sha256=PkXiZjlgrQ21QustBbspefYsdbxst4gxoClyG2_HQR8,3843
41
+ iam_validator/core/condition_validators.py,sha256=7zBjlcf2xGFKGbcFrXSLvWT5tFhWxoqwzhsJqS2E8uY,21524
42
+ iam_validator/core/constants.py,sha256=cVBPgbXr4ALltH_NTSKsgBi6wmndLnOyUWhyBx0ZwrM,6113
43
+ iam_validator/core/ignore_patterns.py,sha256=pZqDJBtkbck-85QK5eFPM5ZOPEKs3McRh3avqiCT5z0,10398
44
+ iam_validator/core/models.py,sha256=f5d9ovtO1xMSwhyBrKIgc2psEq0eugnd3S3ioqurqEE,13242
45
+ iam_validator/core/policy_checks.py,sha256=FNVuS2GTffwCjjrlupVIazC172gSxKYAAT_ObV6Apbo,8803
46
+ iam_validator/core/policy_loader.py,sha256=2KJnXzGg3g9pDXWZHk3DO0xpZnZZ-wXWFEOdQ_naJ8s,17862
47
+ iam_validator/core/pr_commenter.py,sha256=MU-t7SfdHUpSc6BDbh8_dNAbxDiG-bZBCry-jUXivAc,15066
48
+ iam_validator/core/report.py,sha256=kzSeWnT1LqWZVA5pqKKz-maVowXVj0djdoShfRhhpz4,35899
49
+ iam_validator/core/aws_service/__init__.py,sha256=UqMh4HUdGlx2QF5OoueJJ2UlCnhX4QW_x3KeE_bxRQc,735
50
+ iam_validator/core/aws_service/cache.py,sha256=DPuOOPPJC867KAYgV1e0RyQs_k3mtefMdYli3jPaN64,3589
51
+ iam_validator/core/aws_service/client.py,sha256=Zv7rIpEFdUCDXKGp3migPDkj8L5eZltgrGe64M2t2Ko,7336
52
+ iam_validator/core/aws_service/fetcher.py,sha256=X4iI6fiLj4l9f3W6_J0E58lSP26UsBhE9gu2pzmx7Bw,22641
53
+ iam_validator/core/aws_service/parsers.py,sha256=gJzR7HCD8ItCWCCbguTQIZpPEdj2rdMwC7LPhu7ve14,5174
54
+ iam_validator/core/aws_service/patterns.py,sha256=gGc55Tn-EJ3cmcWtmYAZROUajKYz7DaMchYWGEhHpC0,1726
55
+ iam_validator/core/aws_service/storage.py,sha256=PrfKdvF60IL7E_8xYs_XwFoAJPRcVYw57FVLHCoqwVk,10429
56
+ iam_validator/core/aws_service/validators.py,sha256=rgCScqEjXNH8xNg2R91eJbb4eIV3jZN7a6VW0n0hgA4,16347
57
+ iam_validator/core/config/__init__.py,sha256=CWSyIA7kEyzrskEenjYbs9Iih10BXRpiY9H2dHg61rU,2671
58
+ iam_validator/core/config/aws_api.py,sha256=HLIzOItQ0A37wxHcgWck6ZFO0wmNY8JNTiWMMK6JKYU,1248
59
+ iam_validator/core/config/aws_global_conditions.py,sha256=gdmMxXGBy95B3uYUG-J7rnM6Ixgc6L7Y9Pcd2XAMb60,7170
60
+ iam_validator/core/config/category_suggestions.py,sha256=QlrYi4BTkxDSTlL7NZGE9BWN-atWetZ6XjkI9F_7YzI,4370
61
+ iam_validator/core/config/condition_requirements.py,sha256=qauIP73HFnOw1dchUeFpg1x7Y7QWkILo3GfxV_dxdQo,7696
62
+ iam_validator/core/config/config_loader.py,sha256=qKD8aR8YAswaFf68pnYJLFNwKznvcc6lNxSQWU3i6SY,17713
63
+ iam_validator/core/config/defaults.py,sha256=rWzDrlw0AAudtm_If6zjNFvruLg71jpLJEdRgKYSKMQ,27917
64
+ iam_validator/core/config/principal_requirements.py,sha256=VCX7fBDgeDTJQyoz7_x7GI7Kf9O1Eu-sbihoHOrKv6o,15105
65
+ iam_validator/core/config/sensitive_actions.py,sha256=uATDIp_TD3OQQlsYTZp79qd1mSK2Bf9hJ0JwcqLBr84,25344
66
+ iam_validator/core/config/service_principals.py,sha256=8pys5H_yycVJ9KTyimAKFYBg83Aol2Iri53wiHjtnEM,3959
67
+ iam_validator/core/config/wildcards.py,sha256=H_v6hb-rZ0UUz4cul9lxkVI39e6knaK4Y-MbWz2Ebpw,3228
68
+ iam_validator/core/formatters/__init__.py,sha256=fnCKAEBXItnOf2m4rhVs7zwMaTxbG6ESh3CF8V5j5ec,868
69
+ iam_validator/core/formatters/base.py,sha256=SShDeDiy5mYQnS6BpA8xYg91N-KX1EObkOtlrVHqx1Q,4451
70
+ iam_validator/core/formatters/console.py,sha256=FdTp7AzeILCWrUynSvSew8QJKGOMJaAA9_YiQJd-uco,2196
71
+ iam_validator/core/formatters/csv.py,sha256=pPqgvGh4KtD5Qm36xnMaDAavXYR6MlQhs4zbcrxT550,5941
72
+ iam_validator/core/formatters/enhanced.py,sha256=TVtkcTIow8NGoLhG45-5ms-_PTxyxMcAHxf_uPMyKAc,18155
73
+ iam_validator/core/formatters/html.py,sha256=j4sQi-wXiD9kCHldW5JCzbJe0frhiP5uQI9KlH3Sj_g,22994
74
+ iam_validator/core/formatters/json.py,sha256=A7gZ8P32GEdbDvrSn6v56yQ4fOP_kyMaoFVXG2bgnew,939
75
+ iam_validator/core/formatters/markdown.py,sha256=dk4STeY-tOEZsVrlmolIEqZvWYP9JhRtygxxNA49DEE,2293
76
+ iam_validator/core/formatters/sarif.py,sha256=O3pn7whqFq5xxk-tuoqSb2k4Fk5ai_A2SKX_ph8GLV4,10469
77
+ iam_validator/integrations/__init__.py,sha256=7Hlor_X9j0NZaEjFuSvoXAAuSKQ-zgY19Rk-Dz3JpKo,616
78
+ iam_validator/integrations/github_integration.py,sha256=EnrolMq3uZbKWPxUMhYnqcKAfic6Fb8qJzieDruKqsc,26485
79
+ iam_validator/integrations/ms_teams.py,sha256=t2PlWuTDb6GGH-eDU1jnOKd8D1w4FCB68bahGA7MJcE,14475
80
+ iam_validator/sdk/__init__.py,sha256=5I-PCrEbORm1cmNkN9J8-61u9XLHftQ3xuBi_JGePKc,5306
81
+ iam_validator/sdk/arn_matching.py,sha256=HSDpLltOYISq-SoPebAlM89mKOaUaghq_04urchEFDA,12778
82
+ iam_validator/sdk/context.py,sha256=FvAEyUa_s7tHWoSdgjSkzHf1CLlYpAEmLZANxs2IJ4A,6826
83
+ iam_validator/sdk/exceptions.py,sha256=tm91TxIwU157U_UHN7w5qICf_OhU11agj6pV5W_YP-4,1023
84
+ iam_validator/sdk/helpers.py,sha256=sjfK0na_Fo7O8GhEVhl44rVHqOdw6nAKkBL4FVL-QdU,5697
85
+ iam_validator/sdk/policy_utils.py,sha256=CZS1OGSdiWsd2lsCwg0BDcUNWa61tUwgvn-P5rKqeN8,12987
86
+ iam_validator/sdk/shortcuts.py,sha256=EVNSYV7rv4TFH03ulsZ3mS1UVmTSp2jKpc2AXs4j1q4,8531
87
+ iam_validator/utils/__init__.py,sha256=NveA2F3G1E6-ANZzFr7J6Q6u5mogvMp862iFokmYuCs,1021
88
+ iam_validator/utils/cache.py,sha256=wOQKOBeoG6QqC5f0oXcHz63Cjtu_-SsSS-0pTSwyAiM,3254
89
+ iam_validator/utils/regex.py,sha256=xHoMECttb7qaMhts-c9b0GIxdhHNZTt-UBr7wNhWfzg,6219
90
+ iam_validator/utils/terminal.py,sha256=FsRaRMH_JAyDgXWBCOgOEhbS89cs17HCmKYoughq5io,724
91
+ iam_policy_validator-1.9.0.dist-info/METADATA,sha256=y2uizxt2ScM8UTUd1UPHqkazCKhTMdyzVGKFEJQqc18,19069
92
+ iam_policy_validator-1.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
93
+ iam_policy_validator-1.9.0.dist-info/entry_points.txt,sha256=8HtWd8O7mvPiPdZR5YbzY8or_qcqLM4-pKaFdhtFT8M,62
94
+ iam_policy_validator-1.9.0.dist-info/licenses/LICENSE,sha256=AMnbFTBDcK4_MITe2wiQBkj0vg-jjBBhsc43ydC7tt4,1098
95
+ iam_policy_validator-1.9.0.dist-info/RECORD,,
iam_validator/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """IAM Policy Validator - Validate AWS IAM policies for correctness and security."""
2
2
 
3
- from iam_validator.core.aws_fetcher import AWSServiceFetcher
3
+ from iam_validator.core.aws_service import AWSServiceFetcher
4
4
  from iam_validator.core.cli import main
5
5
  from iam_validator.core.models import (
6
6
  IAMPolicy,
@@ -3,7 +3,7 @@
3
3
  This file is the single source of truth for the package version.
4
4
  """
5
5
 
6
- __version__ = "1.7.2"
6
+ __version__ = "1.9.0"
7
7
  # Parse version, handling pre-release suffixes like -rc, -alpha, -beta
8
8
  _version_base = __version__.split("-")[0] # Remove pre-release suffix if present
9
9
  __version_info__ = tuple(int(part) for part in _version_base.split("."))
@@ -5,21 +5,21 @@ Built-in policy checks for IAM Policy Validator.
5
5
  from iam_validator.checks.action_condition_enforcement import (
6
6
  ActionConditionEnforcementCheck,
7
7
  )
8
- from iam_validator.checks.action_resource_matching import (
9
- ActionResourceMatchingCheck,
10
- )
8
+ from iam_validator.checks.action_resource_matching import ActionResourceMatchingCheck
11
9
  from iam_validator.checks.action_validation import ActionValidationCheck
12
10
  from iam_validator.checks.condition_key_validation import ConditionKeyValidationCheck
13
11
  from iam_validator.checks.condition_type_mismatch import ConditionTypeMismatchCheck
14
12
  from iam_validator.checks.full_wildcard import FullWildcardCheck
15
13
  from iam_validator.checks.mfa_condition_check import MFAConditionCheck
16
14
  from iam_validator.checks.policy_size import PolicySizeCheck
15
+ from iam_validator.checks.policy_structure import PolicyStructureCheck
17
16
  from iam_validator.checks.principal_validation import PrincipalValidationCheck
18
17
  from iam_validator.checks.resource_validation import ResourceValidationCheck
19
18
  from iam_validator.checks.sensitive_action import SensitiveActionCheck
20
19
  from iam_validator.checks.service_wildcard import ServiceWildcardCheck
21
20
  from iam_validator.checks.set_operator_validation import SetOperatorValidationCheck
22
21
  from iam_validator.checks.sid_uniqueness import SidUniquenessCheck
22
+ from iam_validator.checks.trust_policy_validation import TrustPolicyValidationCheck
23
23
  from iam_validator.checks.wildcard_action import WildcardActionCheck
24
24
  from iam_validator.checks.wildcard_resource import WildcardResourceCheck
25
25
 
@@ -32,12 +32,14 @@ __all__ = [
32
32
  "FullWildcardCheck",
33
33
  "MFAConditionCheck",
34
34
  "PolicySizeCheck",
35
+ "PolicyStructureCheck",
35
36
  "PrincipalValidationCheck",
36
37
  "ResourceValidationCheck",
37
38
  "SensitiveActionCheck",
38
39
  "ServiceWildcardCheck",
39
40
  "SetOperatorValidationCheck",
40
41
  "SidUniquenessCheck",
42
+ "TrustPolicyValidationCheck",
41
43
  "WildcardActionCheck",
42
44
  "WildcardResourceCheck",
43
45
  ]