iam-policy-validator 1.14.7__tar.gz → 1.15.0__tar.gz
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.14.7 → iam_policy_validator-1.15.0}/.github/workflows/ci.yml +4 -4
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/workflows/codeql.yml +3 -3
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/workflows/docs.yml +1 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/workflows/pre-release.yml +1 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/workflows/release.yml +1 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/workflows/scorecard.yml +1 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.gitignore +3 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/CHANGELOG.md +13 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/Makefile +19 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/PKG-INFO +16 -11
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/README.md +10 -9
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/SECURITY.md +3 -48
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/action.yaml +3 -3
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/api-reference/sdk.md +77 -37
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/contributing/testing.md +5 -5
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/architecture.md +6 -6
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/custom-checks/examples.md +6 -6
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/sdk/policy-utilities.md +14 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/getting-started/first-validation.md +8 -8
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/getting-started/quickstart.md +5 -5
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/index.md +2 -2
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/integrations/github-actions.md +9 -9
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/integrations/index.md +9 -1
- iam_policy_validator-1.15.0/docs/integrations/mcp-server.md +2033 -0
- iam_policy_validator-1.15.0/docs/stylesheets/extra.css +283 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/user-guide/checks/advanced-checks.md +10 -10
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/user-guide/checks/aws-validation.md +8 -8
- iam_policy_validator-1.15.0/docs/user-guide/checks/index.md +110 -0
- iam_policy_validator-1.15.0/docs/user-guide/checks/security-checks.md +380 -0
- iam_policy_validator-1.15.0/docs/user-guide/cli-reference.md +361 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/user-guide/configuration.md +32 -4
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/user-guide/output-formats.md +9 -9
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/configs/full-reference-config.yaml +41 -1
- iam_policy_validator-1.15.0/examples/mcp-llm-instructions/README.md +145 -0
- iam_policy_validator-1.15.0/examples/mcp-llm-instructions/SYSTEM_PROMPT.md +382 -0
- iam_policy_validator-1.15.0/examples/mcp-llm-instructions/example_conversation.md +252 -0
- iam_policy_validator-1.15.0/examples/mcp-llm-instructions/organization_config.yaml +165 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/__version__.py +1 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/__init__.py +2 -0
- iam_policy_validator-1.15.0/iam_validator/checks/action_validation.py +131 -0
- iam_policy_validator-1.15.0/iam_validator/checks/not_action_not_resource.py +163 -0
- iam_policy_validator-1.15.0/iam_validator/checks/resource_validation.py +186 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/wildcard_resource.py +136 -6
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/__init__.py +3 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/cache.py +66 -24
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/completion.py +94 -15
- iam_policy_validator-1.15.0/iam_validator/commands/mcp.py +210 -0
- iam_policy_validator-1.15.0/iam_validator/commands/query.py +909 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/__init__.py +5 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/cache.py +20 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/fetcher.py +180 -11
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/storage.py +14 -6
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/validators.py +32 -41
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/check_registry.py +100 -35
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/aws_global_conditions.py +13 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/check_documentation.py +104 -51
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/config_loader.py +39 -3
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/defaults.py +6 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/constants.py +11 -4
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/models.py +39 -14
- iam_policy_validator-1.15.0/iam_validator/mcp/__init__.py +162 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/models.py +118 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/server.py +2928 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/session_config.py +319 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/templates/__init__.py +79 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/templates/builtin.py +856 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/tools/__init__.py +72 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/tools/generation.py +888 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/tools/org_config_tools.py +263 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/tools/query.py +395 -0
- iam_policy_validator-1.15.0/iam_validator/mcp/tools/validation.py +376 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/__init__.py +2 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/policy_utils.py +31 -5
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/mkdocs.yml +8 -2
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/pyproject.toml +8 -1
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/test_action_validation_check.py +103 -6
- iam_policy_validator-1.15.0/tests/checks/test_condition_key_validation_check.py +237 -0
- iam_policy_validator-1.15.0/tests/checks/test_condition_type_mismatch.py +125 -0
- iam_policy_validator-1.15.0/tests/checks/test_full_wildcard_check.py +73 -0
- iam_policy_validator-1.15.0/tests/checks/test_mfa_condition_check.py +96 -0
- iam_policy_validator-1.15.0/tests/checks/test_not_action_not_resource.py +108 -0
- iam_policy_validator-1.15.0/tests/checks/test_policy_size_check.py +98 -0
- iam_policy_validator-1.15.0/tests/checks/test_principal_validation_check.py +252 -0
- iam_policy_validator-1.15.0/tests/checks/test_resource_validation_check.py +151 -0
- iam_policy_validator-1.15.0/tests/checks/test_service_wildcard_check.py +84 -0
- iam_policy_validator-1.15.0/tests/checks/test_sid_uniqueness_check.py +80 -0
- iam_policy_validator-1.15.0/tests/checks/test_wildcard_action_check.py +62 -0
- iam_policy_validator-1.15.0/tests/checks/test_wildcard_resource_check.py +292 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/commands/test_query_command.py +159 -0
- iam_policy_validator-1.15.0/tests/core/test_action_resource_matching.py +167 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_check_registry.py +173 -0
- iam_policy_validator-1.15.0/tests/core/test_models.py +276 -0
- iam_policy_validator-1.15.0/tests/mcp/__init__.py +8 -0
- iam_policy_validator-1.15.0/tests/mcp/conftest.py +326 -0
- iam_policy_validator-1.15.0/tests/mcp/test_custom_instructions.py +218 -0
- iam_policy_validator-1.15.0/tests/mcp/test_generation_tools.py +441 -0
- iam_policy_validator-1.15.0/tests/mcp/test_org_config.py +385 -0
- iam_policy_validator-1.15.0/tests/mcp/test_query_tools.py +221 -0
- iam_policy_validator-1.15.0/tests/mcp/test_server_integration.py +128 -0
- iam_policy_validator-1.15.0/tests/mcp/test_templates.py +495 -0
- iam_policy_validator-1.15.0/tests/mcp/test_validation_tools.py +331 -0
- iam_policy_validator-1.15.0/uv.lock +2762 -0
- iam_policy_validator-1.14.7/docs/user-guide/checks/index.md +0 -109
- iam_policy_validator-1.14.7/docs/user-guide/checks/security-checks.md +0 -233
- iam_policy_validator-1.14.7/docs/user-guide/cli-reference.md +0 -175
- iam_policy_validator-1.14.7/iam_validator/checks/action_validation.py +0 -67
- iam_policy_validator-1.14.7/iam_validator/checks/resource_validation.py +0 -135
- iam_policy_validator-1.14.7/iam_validator/commands/query.py +0 -485
- iam_policy_validator-1.14.7/scripts/download_aws_services.py +0 -215
- iam_policy_validator-1.14.7/scripts/sync_defaults_from_yaml.py +0 -204
- iam_policy_validator-1.14.7/tests/checks/test_condition_key_validation_check.py +0 -646
- iam_policy_validator-1.14.7/tests/checks/test_condition_type_mismatch.py +0 -370
- iam_policy_validator-1.14.7/tests/checks/test_full_wildcard_check.py +0 -254
- iam_policy_validator-1.14.7/tests/checks/test_mfa_condition_check.py +0 -240
- iam_policy_validator-1.14.7/tests/checks/test_policy_size_check.py +0 -370
- iam_policy_validator-1.14.7/tests/checks/test_principal_validation_check.py +0 -958
- iam_policy_validator-1.14.7/tests/checks/test_resource_validation_check.py +0 -322
- iam_policy_validator-1.14.7/tests/checks/test_service_wildcard_check.py +0 -332
- iam_policy_validator-1.14.7/tests/checks/test_sid_uniqueness_check.py +0 -281
- iam_policy_validator-1.14.7/tests/checks/test_wildcard_action_check.py +0 -297
- iam_policy_validator-1.14.7/tests/checks/test_wildcard_resource_check.py +0 -759
- iam_policy_validator-1.14.7/tests/core/test_action_resource_matching.py +0 -564
- iam_policy_validator-1.14.7/tests/core/test_models.py +0 -541
- iam_policy_validator-1.14.7/uv.lock +0 -1519
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/dependabot.yml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/workflows/cleanup-prereleases.yml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/CONTRIBUTING.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/LICENSE +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/api-reference/checks.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/api-reference/exceptions.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/api-reference/index.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/api-reference/models.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/changelog.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/contributing/development-setup.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/contributing/index.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/contributing/releasing.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/custom-checks/best-practices.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/custom-checks/index.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/custom-checks/tutorial.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/index.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/sdk/advanced.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/sdk/index.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/sdk/quickstart.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/sdk/validation.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/getting-started/index.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/getting-started/installation.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/includes/abbreviations.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/integrations/gitlab-ci.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/integrations/pre-commit.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/user-guide/index.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/user-guide/troubleshooting.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/README.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/access-analyzer/example1.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/access-analyzer/example2.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/aws-service-definitions/iam.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/aws-service-definitions/s3.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/configs/github-labels-config.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/configs/minimal-validation-config.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/configs/offline-validation.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/configs/policy-level-condition-enforcement-config.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/configs/strict-security.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/custom_checks/cross_account_external_id_check.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/custom_checks/domain_restriction_check.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/access-analyzer-only.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/basic-validation.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/custom-policy-checks.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/multi-region-validation.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/resource-policy-validation.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/sarif-code-scanning.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/sequential-validation.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/two-step-validation.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/github-actions/validate-changed-files.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/allowed-wildcard-resource.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/api_gateway_management.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/athena_query_access.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/backup_vault_access.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/cloudformation_deployer.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/cloudwatch_monitoring.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/cognito_user_pool.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/dynamodb_table_access.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/ecs_task_execution.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/eventbridge_rules.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/glue_etl_jobs.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/insecure_policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/insecure_policy.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/invalid-resource-constraint.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/invalid-sid-special-chars.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/invalid-sid-with-spaces.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/invalid_policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/kms_encryption_keys.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/lambda_developer.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/lambda_developer.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/maximum_size_policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/policy_missing_required_tags.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/policy_tag_enforcement_example.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/policy_with_wildcard_resources.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/privilege_escalation_scattered.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/rds_database_admin.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/s3_bucket_access.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/sample_policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/sample_policy.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/secrets_manager_access.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/sensitive-action-wildcards.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/sns_sqs_messaging.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/step_functions_workflow.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/terraform-template-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/test_none_of_valid.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/test_none_of_violations.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/valid-sid-formats.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/wildcard_examples.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/wildcard_examples.yaml +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/wrong-condition-key.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/identity-policies/wrong-s3-condition.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-control-policies/rcp-invalid-allow-effect.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-control-policies/rcp-invalid-not-action.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-control-policies/rcp-invalid-specific-principal.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-control-policies/rcp-invalid-unsupported-service.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-control-policies/rcp-invalid-wildcard-action.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-control-policies/rcp-valid-enforce-encryption.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/backup-vault-policy-org-access.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/ecr-repository-policy-org-restricted.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/ecr-repository-policy-public.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/efs-filesystem-policy-vpc-only.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/glacier-vault-policy-cross-account.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/kms-key-policy-cross-account.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/kms-key-policy-insecure.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/kms-key-policy-org-restricted.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/kms-key-policy-service-specific.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/lambda-permission-api-gateway.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/lambda-permission-cross-account-invoke.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/lambda-permission-eventbridge-multiple.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/lambda-permission-public-url.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/lambda-permission-s3-trigger.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/opensearch-domain-policy-ip-restricted.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-cloudfront.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-cross-account-org.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-insecure-transport.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-ip-restriction.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-public-with-conditions.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-public.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-specific-account.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-vpc-endpoint.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/s3-bucket-policy-wildcard-actions.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/secrets-manager-policy-cross-account.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sns-topic-policy-cross-account-mfa.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sns-topic-policy-cross-account.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sns-topic-policy-eventbridge.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sns-topic-policy-org-wide.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sns-topic-policy-public-no-conditions.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sqs-queue-policy-cross-account-role.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sqs-queue-policy-iam-users-mfa.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sqs-queue-policy-public.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/resource-policies/sqs-queue-policy-sns-subscription.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/service-control-policies/deny-root-account-usage.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/service-control-policies/require-mfa.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/service-control-policies/restrict-regions.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/correct-condition-wrong-key.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/dynamodb-wrong-resources.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/ec2-wrong-resources.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/iam-wrong-resources.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/lambda-wrong-resources.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/s3-wrong-resources.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/sqs-sns-wrong-resources.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/iam-test-policies/wrong_actions_mismatch/typo-condition-field.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/quick-start/lambda-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/quick-start/s3-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/quick-start/user-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/trust-policies/INVALID-wrong-principal-type.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/trust-policies/cross-account-trust-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/trust-policies/github-actions-oidc-trust-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/trust-policies/lambda-service-role-trust-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/examples/trust-policies/saml-federated-trust-policy.json +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/__main__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/action_condition_enforcement.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/action_resource_matching.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/condition_key_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/condition_type_mismatch.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/full_wildcard.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/mfa_condition_check.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/policy_size.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/policy_structure.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/policy_type_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/principal_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/sensitive_action.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/service_wildcard.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/set_operator_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/sid_uniqueness.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/trust_policy_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/utils/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/utils/action_parser.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/utils/policy_level_checks.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/utils/sensitive_action_matcher.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/utils/wildcard_expansion.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/checks/wildcard_action.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/analyze.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/base.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/download_services.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/post_to_pr.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/commands/validate.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/access_analyzer.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/access_analyzer_report.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_fetcher.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/client.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/parsers.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/aws_service/patterns.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/cli.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/codeowners.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/condition_validators.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/aws_api.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/category_suggestions.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/condition_requirements.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/principal_requirements.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/sensitive_actions.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/service_principals.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/config/wildcards.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/diff_parser.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/finding_fingerprint.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/base.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/console.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/csv.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/enhanced.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/html.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/json.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/markdown.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/formatters/sarif.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/ignore_patterns.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/ignore_processor.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/ignored_findings.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/label_manager.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/policy_checks.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/policy_loader.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/pr_commenter.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/core/report.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/integrations/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/integrations/github_integration.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/integrations/ms_teams.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/arn_matching.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/context.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/exceptions.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/helpers.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/query_utils.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/sdk/shortcuts.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/utils/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/utils/cache.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/utils/regex.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/iam_validator/utils/terminal.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/README.md +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/test_aws_global_conditions.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/test_custom_policy_checks.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/test_sensitive_action_filtering.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/test_sensitive_action_suggestions.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/test_sensitive_action_wildcard_expansion.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/checks/test_service_principal_wildcard.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/commands/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/commands/test_completion_command.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/config/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/config/test_config_loader.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_action_condition_enforcement.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_action_condition_enforcement_policy_level.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_aws_api_config.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_aws_fetcher_wildcards.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_check_id_in_comments.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_check_id_injection.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_codeowners.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_comment_truncation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_diff_parser.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_finding_fingerprint.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_ignore_patterns.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_ignored_findings.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_multipart_comments.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_policy_loader.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_policy_type_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_pr_commenter_diff_filtering.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_regex_utils.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_set_operator_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_trust_policy_detection.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_trust_policy_multiple_statements.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_trust_policy_oidc_aud_required.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/core/test_trust_policy_validation.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/integrations/__init__.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/integrations/test_comment_deduplication.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/integrations/test_github_pagination.py +0 -0
- {iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/tests/integrations/test_label_manager.py +0 -0
|
@@ -26,7 +26,7 @@ jobs:
|
|
|
26
26
|
python-version: "${{ env.DEFAULT_PYTHON_VERSION }}"
|
|
27
27
|
|
|
28
28
|
- name: Install uv
|
|
29
|
-
uses: astral-sh/setup-uv@
|
|
29
|
+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
|
30
30
|
with:
|
|
31
31
|
enable-cache: true
|
|
32
32
|
|
|
@@ -56,7 +56,7 @@ jobs:
|
|
|
56
56
|
python-version: ${{ matrix.python-version }}
|
|
57
57
|
|
|
58
58
|
- name: Install uv
|
|
59
|
-
uses: astral-sh/setup-uv@
|
|
59
|
+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
|
60
60
|
with:
|
|
61
61
|
enable-cache: true
|
|
62
62
|
|
|
@@ -80,7 +80,7 @@ jobs:
|
|
|
80
80
|
python-version: "${{ env.DEFAULT_PYTHON_VERSION }}"
|
|
81
81
|
|
|
82
82
|
- name: Install uv
|
|
83
|
-
uses: astral-sh/setup-uv@
|
|
83
|
+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
|
84
84
|
with:
|
|
85
85
|
enable-cache: true
|
|
86
86
|
|
|
@@ -104,7 +104,7 @@ jobs:
|
|
|
104
104
|
python-version: "${{ env.DEFAULT_PYTHON_VERSION }}"
|
|
105
105
|
|
|
106
106
|
- name: Install uv
|
|
107
|
-
uses: astral-sh/setup-uv@
|
|
107
|
+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
|
108
108
|
with:
|
|
109
109
|
enable-cache: true
|
|
110
110
|
|
|
@@ -29,15 +29,15 @@ jobs:
|
|
|
29
29
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
30
30
|
|
|
31
31
|
- name: Initialize CodeQL
|
|
32
|
-
uses: github/codeql-action/init@
|
|
32
|
+
uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
|
33
33
|
with:
|
|
34
34
|
languages: ${{ matrix.language }}
|
|
35
35
|
queries: security-extended,security-and-quality
|
|
36
36
|
|
|
37
37
|
- name: Autobuild
|
|
38
|
-
uses: github/codeql-action/autobuild@
|
|
38
|
+
uses: github/codeql-action/autobuild@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
|
39
39
|
|
|
40
40
|
- name: Perform CodeQL Analysis
|
|
41
|
-
uses: github/codeql-action/analyze@
|
|
41
|
+
uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
|
42
42
|
with:
|
|
43
43
|
category: "/language:${{matrix.language}}"
|
|
@@ -63,7 +63,7 @@ jobs:
|
|
|
63
63
|
# actions/upload-pages-artifact v3.0.1
|
|
64
64
|
- name: Upload artifact
|
|
65
65
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
66
|
-
uses: actions/upload-pages-artifact@
|
|
66
|
+
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
|
|
67
67
|
with:
|
|
68
68
|
path: ./site
|
|
69
69
|
|
{iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/.github/workflows/pre-release.yml
RENAMED
|
@@ -80,7 +80,7 @@ jobs:
|
|
|
80
80
|
python-version: ${{ inputs.python_version }}
|
|
81
81
|
|
|
82
82
|
- name: Install uv
|
|
83
|
-
uses: astral-sh/setup-uv@
|
|
83
|
+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
|
84
84
|
with:
|
|
85
85
|
enable-cache: true
|
|
86
86
|
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
python-version: ${{ env.PYTHON_VERSION }}
|
|
32
32
|
|
|
33
33
|
- name: Install uv
|
|
34
|
-
uses: astral-sh/setup-uv@
|
|
34
|
+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
|
35
35
|
with:
|
|
36
36
|
enable-cache: true
|
|
37
37
|
|
|
@@ -57,6 +57,6 @@ jobs:
|
|
|
57
57
|
# Upload the results to GitHub's code scanning dashboard (optional).
|
|
58
58
|
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
|
|
59
59
|
- name: "Upload to code-scanning"
|
|
60
|
-
uses: github/codeql-action/upload-sarif@
|
|
60
|
+
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
|
61
61
|
with:
|
|
62
62
|
sarif_file: results.sarif
|
|
@@ -13,6 +13,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
+
## [1.14.7] - 2025-12-17
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- MkDocs documentation site deployed to GitHub Pages
|
|
20
|
+
- Comprehensive SDK API reference documentation
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- Correct repository name in all documentation links (iam-policy-auditor → iam-policy-validator)
|
|
24
|
+
- Fix SDK docstring formatting for proper mkdocstrings rendering
|
|
25
|
+
- Update PyPI metadata with correct documentation and changelog URLs
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
16
29
|
## [1.14.6] - 2025-12-15
|
|
17
30
|
|
|
18
31
|
### Fixed
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: help install dev clean test lint format ruff type-check build publish publish-test version sync-defaults
|
|
1
|
+
.PHONY: help install dev clean test lint format ruff type-check build publish publish-test version sync-defaults docs docs-serve mcp-inspector
|
|
2
2
|
|
|
3
3
|
# Default target
|
|
4
4
|
help:
|
|
@@ -27,6 +27,13 @@ help:
|
|
|
27
27
|
@echo "Examples:"
|
|
28
28
|
@echo " make validate-example Run validator on example policies"
|
|
29
29
|
@echo ""
|
|
30
|
+
@echo "Documentation:"
|
|
31
|
+
@echo " make docs Build documentation"
|
|
32
|
+
@echo " make docs-serve Serve documentation locally (http://localhost:8000)"
|
|
33
|
+
@echo ""
|
|
34
|
+
@echo "MCP Server:"
|
|
35
|
+
@echo " make mcp-inspector Start MCP Inspector for debugging"
|
|
36
|
+
@echo ""
|
|
30
37
|
@echo "AWS Services Backup:"
|
|
31
38
|
@echo " make download-aws-services Download all AWS service definitions"
|
|
32
39
|
|
|
@@ -121,3 +128,14 @@ download-aws-services:
|
|
|
121
128
|
# CI/CD simulation
|
|
122
129
|
ci: check build
|
|
123
130
|
@echo "✓ CI checks complete!"
|
|
131
|
+
|
|
132
|
+
# Documentation
|
|
133
|
+
docs:
|
|
134
|
+
@uv run --extra docs mkdocs build
|
|
135
|
+
|
|
136
|
+
docs-serve:
|
|
137
|
+
@uv run --extra docs mkdocs serve -w docs/
|
|
138
|
+
|
|
139
|
+
# MCP Server debugging
|
|
140
|
+
mcp-inspector:
|
|
141
|
+
@npx @modelcontextprotocol/inspector uv run --directory $(CURDIR) --extra mcp iam-validator-mcp
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iam-policy-validator
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.15.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://boogy.github.io/iam-policy-validator
|
|
@@ -11,7 +11,7 @@ Author-email: boogy <0xboogy@gmail.com>
|
|
|
11
11
|
License: MIT
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
Keywords: aws,github-action,iam,policy,security,validation
|
|
14
|
-
Classifier: Development Status ::
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: Intended Audience :: System Administrators
|
|
17
17
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -19,6 +19,8 @@ Classifier: Programming Language :: Python :: 3
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
24
|
Classifier: Topic :: Security
|
|
23
25
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
26
|
Classifier: Topic :: System :: Systems Administration
|
|
@@ -44,6 +46,8 @@ Requires-Dist: mkdocs-literate-nav>=0.6.0; extra == 'docs'
|
|
|
44
46
|
Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
|
|
45
47
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
46
48
|
Requires-Dist: mkdocstrings[python]>=0.24.0; extra == 'docs'
|
|
49
|
+
Provides-Extra: mcp
|
|
50
|
+
Requires-Dist: fastmcp>=2.14.1; extra == 'mcp'
|
|
47
51
|
Description-Content-Type: text/markdown
|
|
48
52
|
|
|
49
53
|
# IAM Policy Validator
|
|
@@ -55,6 +59,8 @@ Description-Content-Type: text/markdown
|
|
|
55
59
|
[](LICENSE)
|
|
56
60
|
[](https://scorecard.dev/viewer/?uri=github.com/boogy/iam-policy-validator)
|
|
57
61
|
|
|
62
|
+
**[📖 Full Documentation](https://boogy.github.io/iam-policy-validator/)**
|
|
63
|
+
|
|
58
64
|
---
|
|
59
65
|
|
|
60
66
|
## Why This Tool Exists
|
|
@@ -434,15 +440,14 @@ Validates against official AWS IAM requirements:
|
|
|
434
440
|
|
|
435
441
|
Identifies overly permissive configurations:
|
|
436
442
|
|
|
437
|
-
| Check
|
|
438
|
-
|
|
|
439
|
-
| **Wildcard Action**
|
|
440
|
-
| **Wildcard Resource**
|
|
441
|
-
| **Full Wildcard**
|
|
442
|
-
| **Service Wildcards**
|
|
443
|
-
| **Sensitive Actions
|
|
444
|
-
| **
|
|
445
|
-
| **Condition Enforcement** | Organization-specific requirements (your custom rules) |
|
|
443
|
+
| Check | What It Catches |
|
|
444
|
+
| ------------------------- | ------------------------------------------------------ |
|
|
445
|
+
| **Wildcard Action** | `Action: "*"` grants all AWS permissions |
|
|
446
|
+
| **Wildcard Resource** | `Resource: "*"` applies to all resources |
|
|
447
|
+
| **Full Wildcard** | Both `Action: "*"` AND `Resource: "*"` (admin access) |
|
|
448
|
+
| **Service Wildcards** | `s3:*`, `iam:*`, `ec2:*` (overly broad) |
|
|
449
|
+
| **Sensitive Actions** | 490+ privilege escalation patterns and dangerous actions |
|
|
450
|
+
| **Condition Enforcement** | Organization-specific condition requirements |
|
|
446
451
|
|
|
447
452
|
**Note on Sensitive Actions:** This check has two modes:
|
|
448
453
|
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
[](https://scorecard.dev/viewer/?uri=github.com/boogy/iam-policy-validator)
|
|
9
9
|
|
|
10
|
+
**[📖 Full Documentation](https://boogy.github.io/iam-policy-validator/)**
|
|
11
|
+
|
|
10
12
|
---
|
|
11
13
|
|
|
12
14
|
## Why This Tool Exists
|
|
@@ -386,15 +388,14 @@ Validates against official AWS IAM requirements:
|
|
|
386
388
|
|
|
387
389
|
Identifies overly permissive configurations:
|
|
388
390
|
|
|
389
|
-
| Check
|
|
390
|
-
|
|
|
391
|
-
| **Wildcard Action**
|
|
392
|
-
| **Wildcard Resource**
|
|
393
|
-
| **Full Wildcard**
|
|
394
|
-
| **Service Wildcards**
|
|
395
|
-
| **Sensitive Actions
|
|
396
|
-
| **
|
|
397
|
-
| **Condition Enforcement** | Organization-specific requirements (your custom rules) |
|
|
391
|
+
| Check | What It Catches |
|
|
392
|
+
| ------------------------- | ------------------------------------------------------ |
|
|
393
|
+
| **Wildcard Action** | `Action: "*"` grants all AWS permissions |
|
|
394
|
+
| **Wildcard Resource** | `Resource: "*"` applies to all resources |
|
|
395
|
+
| **Full Wildcard** | Both `Action: "*"` AND `Resource: "*"` (admin access) |
|
|
396
|
+
| **Service Wildcards** | `s3:*`, `iam:*`, `ec2:*` (overly broad) |
|
|
397
|
+
| **Sensitive Actions** | 490+ privilege escalation patterns and dangerous actions |
|
|
398
|
+
| **Condition Enforcement** | Organization-specific condition requirements |
|
|
398
399
|
|
|
399
400
|
**Note on Sensitive Actions:** This check has two modes:
|
|
400
401
|
|
|
@@ -182,7 +182,7 @@ When contributing to the project:
|
|
|
182
182
|
|
|
183
183
|
The validator includes security features to help users:
|
|
184
184
|
|
|
185
|
-
1. **
|
|
185
|
+
1. **19 Built-in Security Checks**: Detect overly permissive policies, privilege escalation paths, and security anti-patterns
|
|
186
186
|
2. **AWS Access Analyzer Integration**: Leverage AWS's official policy validation service
|
|
187
187
|
3. **Privilege Escalation Detection**: Identify dangerous action combinations
|
|
188
188
|
4. **Public Access Detection**: Check 29+ AWS resource types for public exposure
|
|
@@ -190,31 +190,6 @@ The validator includes security features to help users:
|
|
|
190
190
|
6. **Policy Comparison**: Detect new permissions vs baseline to prevent scope creep
|
|
191
191
|
7. **Wildcard Detection**: Flag overly permissive wildcards in actions and resources
|
|
192
192
|
|
|
193
|
-
## Vulnerability Disclosure Policy
|
|
194
|
-
|
|
195
|
-
### Scope
|
|
196
|
-
|
|
197
|
-
Security vulnerabilities within scope:
|
|
198
|
-
|
|
199
|
-
- **In Scope**:
|
|
200
|
-
- Authentication and authorization bypass
|
|
201
|
-
- Code injection vulnerabilities
|
|
202
|
-
- Sensitive data exposure
|
|
203
|
-
- Denial of service (DoS)
|
|
204
|
-
- AWS credential leakage
|
|
205
|
-
- GitHub token leakage
|
|
206
|
-
- Path traversal vulnerabilities
|
|
207
|
-
- Dependency vulnerabilities with active exploits
|
|
208
|
-
- Logic errors in security checks that could miss vulnerabilities
|
|
209
|
-
|
|
210
|
-
- **Out of Scope**:
|
|
211
|
-
- Social engineering attacks
|
|
212
|
-
- Physical attacks
|
|
213
|
-
- Attacks requiring physical access to infrastructure
|
|
214
|
-
- Issues in third-party dependencies without active exploits
|
|
215
|
-
- Issues already reported and known
|
|
216
|
-
- Self-XSS or CSP bypasses without security impact
|
|
217
|
-
|
|
218
193
|
### Safe Harbor
|
|
219
194
|
|
|
220
195
|
We support safe harbor for security researchers who:
|
|
@@ -224,26 +199,6 @@ We support safe harbor for security researchers who:
|
|
|
224
199
|
- Do not exploit vulnerabilities for malicious purposes
|
|
225
200
|
- Follow responsible disclosure practices
|
|
226
201
|
|
|
227
|
-
## Security Audit History
|
|
228
|
-
|
|
229
|
-
We welcome third-party security audits and will list notable audits here:
|
|
230
|
-
|
|
231
|
-
- No formal audits completed yet (as of v1.7.0)
|
|
232
|
-
|
|
233
|
-
## Security-Related Configuration
|
|
234
|
-
|
|
235
|
-
### Logging Levels
|
|
236
|
-
|
|
237
|
-
Be cautious with logging levels in production:
|
|
238
|
-
|
|
239
|
-
```bash
|
|
240
|
-
# ⚠️ WARNING: Debug logging may expose sensitive policy content
|
|
241
|
-
--log-level debug # Only use for troubleshooting
|
|
242
|
-
|
|
243
|
-
# ✅ RECOMMENDED: Use warning or error in production
|
|
244
|
-
--log-level warning
|
|
245
|
-
```
|
|
246
|
-
|
|
247
202
|
### GitHub Integration
|
|
248
203
|
|
|
249
204
|
Configure minimal permissions for GitHub Actions:
|
|
@@ -286,5 +241,5 @@ _Thank you to the following researchers who have helped improve the security of
|
|
|
286
241
|
|
|
287
242
|
---
|
|
288
243
|
|
|
289
|
-
**Last Updated**:
|
|
290
|
-
**Policy Version**: 1.
|
|
244
|
+
**Last Updated**: 2026-01-19
|
|
245
|
+
**Policy Version**: 1.1
|
|
@@ -158,7 +158,7 @@ runs:
|
|
|
158
158
|
python-version-file: "${{ github.action_path }}/.python-version"
|
|
159
159
|
|
|
160
160
|
- name: Install uv
|
|
161
|
-
uses: astral-sh/setup-uv@
|
|
161
|
+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
|
162
162
|
with:
|
|
163
163
|
enable-cache: true
|
|
164
164
|
cache-suffix: ci # Prune cache in CI to reduce bloat
|
|
@@ -186,7 +186,7 @@ runs:
|
|
|
186
186
|
|
|
187
187
|
- name: Restore AWS service definitions cache
|
|
188
188
|
id: cache-aws-services
|
|
189
|
-
uses: actions/cache/restore@
|
|
189
|
+
uses: actions/cache/restore@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
|
|
190
190
|
with:
|
|
191
191
|
path: ~/.cache/iam-validator/aws_services
|
|
192
192
|
# Cache key refreshes weekly to get latest AWS service updates
|
|
@@ -514,7 +514,7 @@ runs:
|
|
|
514
514
|
# Attempting to save with an existing key will silently do nothing
|
|
515
515
|
# Use always() to ensure cache is saved even if validation fails
|
|
516
516
|
if: always() && steps.cache-aws-services.outputs.cache-hit != 'true'
|
|
517
|
-
uses: actions/cache/save@
|
|
517
|
+
uses: actions/cache/save@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
|
|
518
518
|
with:
|
|
519
519
|
path: ~/.cache/iam-validator/aws_services
|
|
520
520
|
key: aws-services-${{ runner.os }}-${{ steps.week.outputs.week }}
|
|
@@ -23,11 +23,11 @@ async def validate_file(
|
|
|
23
23
|
|
|
24
24
|
**Parameters:**
|
|
25
25
|
|
|
26
|
-
| Name
|
|
27
|
-
|
|
28
|
-
| `file_path`
|
|
29
|
-
| `config_path` | `str \| None`
|
|
30
|
-
| `config`
|
|
26
|
+
| Name | Type | Description |
|
|
27
|
+
| ------------- | ------------------------- | ---------------------------------------------- |
|
|
28
|
+
| `file_path` | `str \| Path` | Path to the policy file (JSON or YAML) |
|
|
29
|
+
| `config_path` | `str \| None` | Optional path to configuration file |
|
|
30
|
+
| `config` | `ValidatorConfig \| None` | Optional config object (overrides config_path) |
|
|
31
31
|
|
|
32
32
|
**Returns:** `PolicyValidationResult`
|
|
33
33
|
|
|
@@ -61,12 +61,12 @@ async def validate_directory(
|
|
|
61
61
|
|
|
62
62
|
**Parameters:**
|
|
63
63
|
|
|
64
|
-
| Name
|
|
65
|
-
|
|
66
|
-
| `dir_path`
|
|
67
|
-
| `config_path` | `str \| None`
|
|
68
|
-
| `config`
|
|
69
|
-
| `recursive`
|
|
64
|
+
| Name | Type | Description |
|
|
65
|
+
| ------------- | ------------------------- | ----------------------------------------- |
|
|
66
|
+
| `dir_path` | `str \| Path` | Path to directory containing policy files |
|
|
67
|
+
| `config_path` | `str \| None` | Optional path to configuration file |
|
|
68
|
+
| `config` | `ValidatorConfig \| None` | Optional config object |
|
|
69
|
+
| `recursive` | `bool` | Search subdirectories (default: `True`) |
|
|
70
70
|
|
|
71
71
|
**Returns:** `list[PolicyValidationResult]`
|
|
72
72
|
|
|
@@ -97,12 +97,12 @@ async def validate_json(
|
|
|
97
97
|
|
|
98
98
|
**Parameters:**
|
|
99
99
|
|
|
100
|
-
| Name
|
|
101
|
-
|
|
102
|
-
| `policy_json` | `dict`
|
|
103
|
-
| `policy_name` | `str`
|
|
104
|
-
| `config_path` | `str \| None`
|
|
105
|
-
| `config`
|
|
100
|
+
| Name | Type | Description |
|
|
101
|
+
| ------------- | ------------------------- | --------------------------------------- |
|
|
102
|
+
| `policy_json` | `dict` | IAM policy as a Python dict |
|
|
103
|
+
| `policy_name` | `str` | Name to identify this policy in results |
|
|
104
|
+
| `config_path` | `str \| None` | Optional path to configuration file |
|
|
105
|
+
| `config` | `ValidatorConfig \| None` | Optional config object |
|
|
106
106
|
|
|
107
107
|
**Returns:** `PolicyValidationResult`
|
|
108
108
|
|
|
@@ -139,11 +139,11 @@ async def quick_validate(
|
|
|
139
139
|
|
|
140
140
|
**Parameters:**
|
|
141
141
|
|
|
142
|
-
| Name
|
|
143
|
-
|
|
144
|
-
| `policy`
|
|
145
|
-
| `config_path` | `str \| None`
|
|
146
|
-
| `config`
|
|
142
|
+
| Name | Type | Description |
|
|
143
|
+
| ------------- | ------------------------- | ----------------------------------------- |
|
|
144
|
+
| `policy` | `str \| Path \| dict` | File path, directory path, or policy dict |
|
|
145
|
+
| `config_path` | `str \| None` | Optional path to configuration file |
|
|
146
|
+
| `config` | `ValidatorConfig \| None` | Optional config object |
|
|
147
147
|
|
|
148
148
|
**Returns:** `bool` — `True` if all policies are valid
|
|
149
149
|
|
|
@@ -183,12 +183,12 @@ async def get_issues(
|
|
|
183
183
|
|
|
184
184
|
**Parameters:**
|
|
185
185
|
|
|
186
|
-
| Name
|
|
187
|
-
|
|
188
|
-
| `policy`
|
|
189
|
-
| `min_severity` | `str`
|
|
190
|
-
| `config_path`
|
|
191
|
-
| `config`
|
|
186
|
+
| Name | Type | Description |
|
|
187
|
+
| -------------- | ------------------------- | ------------------------------------------------------------- |
|
|
188
|
+
| `policy` | `str \| Path \| dict` | File path, directory path, or policy dict |
|
|
189
|
+
| `min_severity` | `str` | Minimum severity: `critical`, `high`, `medium`, `low`, `info` |
|
|
190
|
+
| `config_path` | `str \| None` | Optional path to configuration file |
|
|
191
|
+
| `config` | `ValidatorConfig \| None` | Optional config object |
|
|
192
192
|
|
|
193
193
|
**Returns:** `list[ValidationIssue]`
|
|
194
194
|
|
|
@@ -263,11 +263,11 @@ async with validator() as v:
|
|
|
263
263
|
|
|
264
264
|
The context object provides these methods:
|
|
265
265
|
|
|
266
|
-
| Method
|
|
267
|
-
|
|
268
|
-
| `validate_file(path)`
|
|
266
|
+
| Method | Description |
|
|
267
|
+
| -------------------------- | ------------------------------------ |
|
|
268
|
+
| `validate_file(path)` | Validate a single policy file |
|
|
269
269
|
| `validate_directory(path)` | Validate all policies in a directory |
|
|
270
|
-
| `generate_report(results)` | Print a formatted report
|
|
270
|
+
| `generate_report(results)` | Print a formatted report |
|
|
271
271
|
|
|
272
272
|
---
|
|
273
273
|
|
|
@@ -334,6 +334,46 @@ print(f"Resources: {resources}")
|
|
|
334
334
|
|
|
335
335
|
---
|
|
336
336
|
|
|
337
|
+
### extract_condition_keys_from_statement
|
|
338
|
+
|
|
339
|
+
Extract all condition keys from a single statement.
|
|
340
|
+
|
|
341
|
+
```python
|
|
342
|
+
def extract_condition_keys_from_statement(statement: Statement) -> set[str]
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Parameters:**
|
|
346
|
+
|
|
347
|
+
| Name | Type | Description |
|
|
348
|
+
| ----------- | ----------- | -------------------------------------------- |
|
|
349
|
+
| `statement` | `Statement` | The statement to extract condition keys from |
|
|
350
|
+
|
|
351
|
+
**Returns:** `set[str]` — Set of condition key names
|
|
352
|
+
|
|
353
|
+
**Example:**
|
|
354
|
+
|
|
355
|
+
```python
|
|
356
|
+
from iam_validator.sdk import extract_condition_keys_from_statement
|
|
357
|
+
from iam_validator.core.models import Statement
|
|
358
|
+
|
|
359
|
+
statement = Statement(
|
|
360
|
+
Effect="Allow",
|
|
361
|
+
Action=["s3:GetObject"],
|
|
362
|
+
Resource=["*"],
|
|
363
|
+
Condition={
|
|
364
|
+
"StringEquals": {
|
|
365
|
+
"aws:ResourceAccount": "123456789012",
|
|
366
|
+
"aws:ResourceTag/Environment": "production"
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
keys = extract_condition_keys_from_statement(statement)
|
|
372
|
+
# {'aws:ResourceAccount', 'aws:ResourceTag/Environment'}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
337
377
|
### get_policy_summary
|
|
338
378
|
|
|
339
379
|
Get a summary of policy contents.
|
|
@@ -404,11 +444,11 @@ async def query_actions(
|
|
|
404
444
|
|
|
405
445
|
**Parameters:**
|
|
406
446
|
|
|
407
|
-
| Name
|
|
408
|
-
|
|
409
|
-
| `fetcher`
|
|
410
|
-
| `service`
|
|
411
|
-
| `access_level` | `str \| None`
|
|
447
|
+
| Name | Type | Description |
|
|
448
|
+
| -------------- | ------------------- | -------------------------------------------------------------------- |
|
|
449
|
+
| `fetcher` | `AWSServiceFetcher` | AWS service fetcher instance |
|
|
450
|
+
| `service` | `str` | Service name (e.g., `s3`, `ec2`) |
|
|
451
|
+
| `access_level` | `str \| None` | Filter: `read`, `write`, `list`, `tagging`, `permissions-management` |
|
|
412
452
|
|
|
413
453
|
**Example:**
|
|
414
454
|
|
|
@@ -146,11 +146,11 @@ async def test_with_real_policy():
|
|
|
146
146
|
|
|
147
147
|
## Test Markers
|
|
148
148
|
|
|
149
|
-
| Marker
|
|
150
|
-
|
|
151
|
-
| `@pytest.mark.asyncio`
|
|
152
|
-
| `@pytest.mark.slow`
|
|
153
|
-
| `@pytest.mark.benchmark`
|
|
149
|
+
| Marker | Usage |
|
|
150
|
+
| -------------------------- | ----------------------- |
|
|
151
|
+
| `@pytest.mark.asyncio` | Async tests |
|
|
152
|
+
| `@pytest.mark.slow` | Long-running tests |
|
|
153
|
+
| `@pytest.mark.benchmark` | Performance tests |
|
|
154
154
|
| `@pytest.mark.integration` | External resource tests |
|
|
155
155
|
|
|
156
156
|
```python
|
{iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/developer-guide/architecture.md
RENAMED
|
@@ -20,7 +20,7 @@ Overview of IAM Policy Validator's architecture and design.
|
|
|
20
20
|
│ (CheckRegistry → Parallel Execution) │
|
|
21
21
|
├───────────────────────┬─────────────────────────────────┤
|
|
22
22
|
│ Built-in Checks │ Custom Checks │
|
|
23
|
-
│ (
|
|
23
|
+
│ (19 checks) │ (User-defined) │
|
|
24
24
|
├───────────────────────┴─────────────────────────────────┤
|
|
25
25
|
│ AWS Service Fetcher │
|
|
26
26
|
│ (Service definitions, caching) │
|
|
@@ -182,8 +182,8 @@ config = ConfigLoader.load("./iam-validator.yaml")
|
|
|
182
182
|
|
|
183
183
|
### Cache Locations
|
|
184
184
|
|
|
185
|
-
| Platform | Location
|
|
186
|
-
|
|
187
|
-
| Linux
|
|
188
|
-
| macOS
|
|
189
|
-
| Windows
|
|
185
|
+
| Platform | Location |
|
|
186
|
+
| -------- | ------------------------------------- |
|
|
187
|
+
| Linux | `~/.cache/iam-validator/` |
|
|
188
|
+
| macOS | `~/Library/Caches/iam-validator/` |
|
|
189
|
+
| Windows | `%LOCALAPPDATA%\iam-validator\Cache\` |
|
|
@@ -194,9 +194,9 @@ checks:
|
|
|
194
194
|
|
|
195
195
|
See the [examples/custom_checks/](https://github.com/boogy/iam-policy-validator/tree/main/examples/custom_checks) directory for additional examples:
|
|
196
196
|
|
|
197
|
-
| Check
|
|
198
|
-
|
|
199
|
-
| `domain_restriction_check.py`
|
|
200
|
-
| `tag_enforcement_check.py`
|
|
201
|
-
| `time_based_access_check.py`
|
|
202
|
-
| `cross_account_external_id_check.py` | Confused deputy prevention
|
|
197
|
+
| Check | Description |
|
|
198
|
+
| ------------------------------------ | ----------------------------- |
|
|
199
|
+
| `domain_restriction_check.py` | Restrict S3 access to domains |
|
|
200
|
+
| `tag_enforcement_check.py` | Enforce resource tagging |
|
|
201
|
+
| `time_based_access_check.py` | Business hours restrictions |
|
|
202
|
+
| `cross_account_external_id_check.py` | Confused deputy prevention |
|
|
@@ -60,6 +60,20 @@ keys = extract_condition_keys(policy)
|
|
|
60
60
|
# ['aws:SourceAccount', 's3:prefix']
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
### extract_condition_keys_from_statement
|
|
64
|
+
|
|
65
|
+
Get all condition keys from a single statement.
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
from iam_validator.sdk import extract_condition_keys_from_statement
|
|
69
|
+
|
|
70
|
+
# Extract keys from a specific statement
|
|
71
|
+
keys = extract_condition_keys_from_statement(statement)
|
|
72
|
+
# {'aws:ResourceAccount', 'aws:ResourceTag/Environment'}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
This is useful when you need to analyze conditions at the statement level rather than the entire policy.
|
|
76
|
+
|
|
63
77
|
## Analysis
|
|
64
78
|
|
|
65
79
|
### get_policy_summary
|
{iam_policy_validator-1.14.7 → iam_policy_validator-1.15.0}/docs/getting-started/first-validation.md
RENAMED
|
@@ -257,14 +257,14 @@ iam-validator validate --path user-policy.json --format json
|
|
|
257
257
|
|
|
258
258
|
## Understanding Severity Levels
|
|
259
259
|
|
|
260
|
-
| Severity
|
|
261
|
-
|
|
262
|
-
| **Critical** | Severe security risk
|
|
263
|
-
| **High**
|
|
264
|
-
| **Medium**
|
|
265
|
-
| **Low**
|
|
266
|
-
| **Error**
|
|
267
|
-
| **Warning**
|
|
260
|
+
| Severity | Meaning | Action |
|
|
261
|
+
| ------------ | ----------------------- | ---------------- |
|
|
262
|
+
| **Critical** | Severe security risk | Block deployment |
|
|
263
|
+
| **High** | Security concern | Fix before merge |
|
|
264
|
+
| **Medium** | Best practice violation | Address soon |
|
|
265
|
+
| **Low** | Minor improvement | Optional fix |
|
|
266
|
+
| **Error** | AWS will reject | Must fix |
|
|
267
|
+
| **Warning** | Potential issue | Review |
|
|
268
268
|
|
|
269
269
|
## What's Next?
|
|
270
270
|
|