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.
- {iam_policy_validator-1.7.2.dist-info → iam_policy_validator-1.9.0.dist-info}/METADATA +127 -6
- iam_policy_validator-1.9.0.dist-info/RECORD +95 -0
- iam_validator/__init__.py +1 -1
- iam_validator/__version__.py +1 -1
- iam_validator/checks/__init__.py +5 -3
- iam_validator/checks/action_condition_enforcement.py +559 -207
- iam_validator/checks/action_resource_matching.py +12 -15
- iam_validator/checks/action_validation.py +7 -13
- iam_validator/checks/condition_key_validation.py +7 -13
- iam_validator/checks/condition_type_mismatch.py +15 -22
- iam_validator/checks/full_wildcard.py +9 -13
- iam_validator/checks/mfa_condition_check.py +8 -17
- iam_validator/checks/policy_size.py +6 -39
- iam_validator/checks/policy_structure.py +547 -0
- iam_validator/checks/policy_type_validation.py +61 -46
- iam_validator/checks/principal_validation.py +71 -148
- iam_validator/checks/resource_validation.py +13 -20
- iam_validator/checks/sensitive_action.py +15 -18
- iam_validator/checks/service_wildcard.py +8 -14
- iam_validator/checks/set_operator_validation.py +21 -28
- iam_validator/checks/sid_uniqueness.py +16 -42
- iam_validator/checks/trust_policy_validation.py +506 -0
- iam_validator/checks/utils/sensitive_action_matcher.py +26 -26
- iam_validator/checks/utils/wildcard_expansion.py +2 -2
- iam_validator/checks/wildcard_action.py +9 -13
- iam_validator/checks/wildcard_resource.py +9 -13
- iam_validator/commands/cache.py +4 -3
- iam_validator/commands/validate.py +15 -9
- iam_validator/core/__init__.py +2 -3
- iam_validator/core/access_analyzer.py +1 -1
- iam_validator/core/access_analyzer_report.py +2 -2
- iam_validator/core/aws_fetcher.py +24 -1028
- iam_validator/core/aws_service/__init__.py +21 -0
- iam_validator/core/aws_service/cache.py +108 -0
- iam_validator/core/aws_service/client.py +205 -0
- iam_validator/core/aws_service/fetcher.py +612 -0
- iam_validator/core/aws_service/parsers.py +149 -0
- iam_validator/core/aws_service/patterns.py +51 -0
- iam_validator/core/aws_service/storage.py +291 -0
- iam_validator/core/aws_service/validators.py +379 -0
- iam_validator/core/check_registry.py +165 -93
- iam_validator/core/config/condition_requirements.py +69 -17
- iam_validator/core/config/defaults.py +58 -52
- iam_validator/core/config/service_principals.py +40 -3
- iam_validator/core/constants.py +17 -0
- iam_validator/core/ignore_patterns.py +297 -0
- iam_validator/core/models.py +15 -5
- iam_validator/core/policy_checks.py +38 -475
- iam_validator/core/policy_loader.py +27 -4
- iam_validator/sdk/__init__.py +1 -1
- iam_validator/sdk/context.py +1 -1
- iam_validator/sdk/helpers.py +1 -1
- iam_policy_validator-1.7.2.dist-info/RECORD +0 -84
- {iam_policy_validator-1.7.2.dist-info → iam_policy_validator-1.9.0.dist-info}/WHEEL +0 -0
- {iam_policy_validator-1.7.2.dist-info → iam_policy_validator-1.9.0.dist-info}/entry_points.txt +0 -0
- {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.
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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,
|
iam_validator/__version__.py
CHANGED
|
@@ -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.
|
|
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("."))
|
iam_validator/checks/__init__.py
CHANGED
|
@@ -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
|
]
|