cloud-audit 2.3.1__tar.gz → 2.5.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.
Files changed (188) hide show
  1. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/workflows/ci.yml +7 -7
  2. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/workflows/docs.yml +2 -2
  3. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/workflows/example-scan.yml +1 -1
  4. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/workflows/release.yml +9 -9
  5. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/CHANGELOG.md +181 -0
  6. cloud_audit-2.5.0/PKG-INFO +540 -0
  7. cloud_audit-2.5.0/README.md +493 -0
  8. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/ROADMAP.md +24 -3
  9. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/mkdocs.yml +4 -1
  10. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/pyproject.toml +8 -3
  11. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/server.json +2 -2
  12. cloud_audit-2.5.0/src/cloud_audit/agent_blast.py +671 -0
  13. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/blast_radius.py +24 -1
  14. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/cli.py +231 -148
  15. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/frameworks/bsi_c5_2020.json +6 -1
  16. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/frameworks/cis_aws_v3.json +6 -1
  17. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/frameworks/hipaa_security.json +12 -2
  18. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/frameworks/iso27001_2022.json +12 -2
  19. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/frameworks/nis2_directive.json +6 -1
  20. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/frameworks/soc2_type2.json +24 -4
  21. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/config.py +1 -1
  22. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/cost_model.py +89 -0
  23. cloud_audit-2.5.0/src/cloud_audit/demo_data.py +475 -0
  24. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/mcp_server.py +28 -0
  25. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/models.py +107 -0
  26. cloud_audit-2.5.0/src/cloud_audit/proof.py +418 -0
  27. cloud_audit-2.5.0/src/cloud_audit/providers/aws/agent_inventory.py +476 -0
  28. cloud_audit-2.5.0/src/cloud_audit/providers/aws/checks/agentcore.py +545 -0
  29. cloud_audit-2.5.0/src/cloud_audit/providers/aws/checks/data_perimeter.py +702 -0
  30. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/iam_analyzer.py +141 -1
  31. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/provider.py +4 -0
  32. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/markdown.py +2 -0
  33. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/scanner.py +68 -0
  34. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/simulate.py +6 -8
  35. cloud_audit-2.5.0/tests/aws/test_agent_inventory.py +440 -0
  36. cloud_audit-2.5.0/tests/aws/test_agentcore.py +383 -0
  37. cloud_audit-2.5.0/tests/aws/test_data_perimeter.py +662 -0
  38. cloud_audit-2.5.0/tests/test_agent_blast.py +375 -0
  39. cloud_audit-2.5.0/tests/test_cli_agent_blast.py +143 -0
  40. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_cli_scan.py +35 -0
  41. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_compliance_frameworks.py +5 -0
  42. cloud_audit-2.5.0/tests/test_coverage_gaps.py +66 -0
  43. cloud_audit-2.5.0/tests/test_demo_data.py +86 -0
  44. cloud_audit-2.5.0/tests/test_iam_grants.py +168 -0
  45. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_mcp_server.py +39 -0
  46. cloud_audit-2.5.0/tests/test_proof.py +538 -0
  47. cloud_audit-2.3.1/PKG-INFO +0 -535
  48. cloud_audit-2.3.1/README.md +0 -488
  49. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.cloud-audit.example.yml +0 -0
  50. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/FUNDING.yml +0 -0
  51. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  52. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  53. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  54. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.github/dependabot.yml +0 -0
  55. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.gitignore +0 -0
  56. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.mcp.json +0 -0
  57. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/.pre-commit-hooks.yaml +0 -0
  58. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/CODEOWNERS +0 -0
  59. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/CODE_OF_CONDUCT.md +0 -0
  60. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/CONTRIBUTING.md +0 -0
  61. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/Dockerfile +0 -0
  62. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/LICENSE +0 -0
  63. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/Makefile +0 -0
  64. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/SECURITY.md +0 -0
  65. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/action.yml +0 -0
  66. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/blast-audit-boardroom.png +0 -0
  67. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/blast-audit-counterfactual.png +0 -0
  68. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/blast-audit-hero.png +0 -0
  69. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/demo.gif +0 -0
  70. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/logo-nobg.png +0 -0
  71. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/logo.png +0 -0
  72. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/report-preview.png +0 -0
  73. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/assets/social-preview.png +0 -0
  74. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/examples/daily-scan-with-diff.yml +0 -0
  75. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/examples/github-actions.yml +0 -0
  76. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/examples/post-deploy-scan.yml +0 -0
  77. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/overrides/main.html +0 -0
  78. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/scripts/generate_demo_gif.py +0 -0
  79. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/scripts/generate_report_screenshot.py +0 -0
  80. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/__init__.py +0 -0
  81. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/__main__.py +0 -0
  82. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/__init__.py +0 -0
  83. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/compliance/engine.py +0 -0
  84. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/correlate.py +0 -0
  85. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/diff.py +0 -0
  86. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/graph.py +0 -0
  87. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/history.py +0 -0
  88. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/__init__.py +0 -0
  89. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/__init__.py +0 -0
  90. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/__init__.py +0 -0
  91. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/account.py +0 -0
  92. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/backup.py +0 -0
  93. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/bedrock.py +0 -0
  94. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/cloudtrail.py +0 -0
  95. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/cloudwatch.py +0 -0
  96. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/config_.py +0 -0
  97. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/ddb.py +0 -0
  98. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/ec2.py +0 -0
  99. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/ecs.py +0 -0
  100. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/efs.py +0 -0
  101. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/eip.py +0 -0
  102. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/guardduty.py +0 -0
  103. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/iam.py +0 -0
  104. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/inspector.py +0 -0
  105. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/kms.py +0 -0
  106. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/lambda_.py +0 -0
  107. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/rds.py +0 -0
  108. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/s3.py +0 -0
  109. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/sagemaker.py +0 -0
  110. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/secrets.py +0 -0
  111. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/securityhub.py +0 -0
  112. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/ssm.py +0 -0
  113. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/vpc.py +0 -0
  114. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/checks/waf.py +0 -0
  115. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/iam_trust_graph.py +0 -0
  116. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/__init__.py +0 -0
  117. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/cloudtrail_tampering.py +0 -0
  118. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/cryptomining_role.py +0 -0
  119. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/datazone_overgrant.py +0 -0
  120. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/lambda_function_url.py +0 -0
  121. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/mmdsv1_in_use.py +0 -0
  122. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/quarantine_policy.py +0 -0
  123. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/roles_anywhere_abuse.py +0 -0
  124. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/ses_phishing.py +0 -0
  125. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/trufflehog_ua.py +0 -0
  126. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/aws/threat_feed/whoami_confusion.py +0 -0
  127. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/providers/base.py +0 -0
  128. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/py.typed +0 -0
  129. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/__init__.py +0 -0
  130. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/compliance_html.py +0 -0
  131. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/compliance_markdown.py +0 -0
  132. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/diff_markdown.py +0 -0
  133. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/html.py +0 -0
  134. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/sarif.py +0 -0
  135. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/reports/templates/report.html.j2 +0 -0
  136. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/src/cloud_audit/root_cause.py +0 -0
  137. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/__init__.py +0 -0
  138. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/__init__.py +0 -0
  139. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_bedrock.py +0 -0
  140. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_cis_checks.py +0 -0
  141. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_cloudtrail.py +0 -0
  142. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_cloudwatch.py +0 -0
  143. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_config.py +0 -0
  144. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_ddb.py +0 -0
  145. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_ec2.py +0 -0
  146. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_ecs.py +0 -0
  147. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_eip.py +0 -0
  148. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_guardduty.py +0 -0
  149. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_iam.py +0 -0
  150. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_iam_analyzer.py +0 -0
  151. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_iam_trust_graph.py +0 -0
  152. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_kms.py +0 -0
  153. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_lambda.py +0 -0
  154. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_rds.py +0 -0
  155. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_s3.py +0 -0
  156. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_sagemaker.py +0 -0
  157. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_secrets.py +0 -0
  158. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_ssm.py +0 -0
  159. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/test_vpc.py +0 -0
  160. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/__init__.py +0 -0
  161. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_cloudtrail_tampering.py +0 -0
  162. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_cryptomining_role.py +0 -0
  163. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_datazone_overgrant.py +0 -0
  164. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_lambda_function_url.py +0 -0
  165. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_mmdsv1_in_use.py +0 -0
  166. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_quarantine_policy.py +0 -0
  167. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_roles_anywhere_abuse.py +0 -0
  168. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_ses_phishing.py +0 -0
  169. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_trufflehog_ua.py +0 -0
  170. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/aws/threat_feed/test_whoami_confusion.py +0 -0
  171. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/conftest.py +0 -0
  172. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_blast_radius.py +0 -0
  173. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_cli.py +0 -0
  174. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_config.py +0 -0
  175. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_correlate.py +0 -0
  176. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_cost_model.py +0 -0
  177. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_diff.py +0 -0
  178. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_graph.py +0 -0
  179. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_history.py +0 -0
  180. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_html.py +0 -0
  181. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_markdown.py +0 -0
  182. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_models.py +0 -0
  183. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_provider.py +0 -0
  184. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_root_cause.py +0 -0
  185. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_sarif.py +0 -0
  186. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_scanner.py +0 -0
  187. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_simulate.py +0 -0
  188. {cloud_audit-2.3.1 → cloud_audit-2.5.0}/tests/test_soc2_framework.py +0 -0
@@ -15,8 +15,8 @@ jobs:
15
15
  name: Lint & Format
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
19
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
18
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
19
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v6
20
20
  with:
21
21
  python-version: "3.12"
22
22
  cache: "pip"
@@ -28,8 +28,8 @@ jobs:
28
28
  name: Type Check
29
29
  runs-on: ubuntu-latest
30
30
  steps:
31
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
32
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
31
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
32
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v6
33
33
  with:
34
34
  python-version: "3.12"
35
35
  cache: "pip"
@@ -43,8 +43,8 @@ jobs:
43
43
  matrix:
44
44
  python-version: ["3.10", "3.11", "3.12", "3.13"]
45
45
  steps:
46
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
47
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
46
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
47
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v6
48
48
  with:
49
49
  python-version: ${{ matrix.python-version }}
50
50
  cache: "pip"
@@ -55,6 +55,6 @@ jobs:
55
55
  name: Docker Build
56
56
  runs-on: ubuntu-latest
57
57
  steps:
58
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
58
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
59
59
  - run: docker build -t cloud-audit:test .
60
60
  - run: docker run --rm cloud-audit:test version
@@ -15,8 +15,8 @@ jobs:
15
15
  deploy:
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
- - uses: actions/checkout@v6
19
- - uses: actions/setup-python@v6
18
+ - uses: actions/checkout@v7
19
+ - uses: actions/setup-python@v7
20
20
  with:
21
21
  python-version: '3.12'
22
22
  - run: pip install mkdocs-material
@@ -27,7 +27,7 @@ jobs:
27
27
  name: cloud-audit scan
28
28
  runs-on: ubuntu-latest
29
29
  steps:
30
- - uses: actions/checkout@v6
30
+ - uses: actions/checkout@v7
31
31
 
32
32
  - uses: aws-actions/configure-aws-credentials@v6
33
33
  with:
@@ -18,8 +18,8 @@ jobs:
18
18
  needs: ci
19
19
  runs-on: ubuntu-latest
20
20
  steps:
21
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
22
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
21
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
22
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v6
23
23
  with:
24
24
  python-version: "3.12"
25
25
  - name: Verify tag matches package version
@@ -51,7 +51,7 @@ jobs:
51
51
  with:
52
52
  name: dist
53
53
  path: dist/
54
- - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
54
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
55
55
 
56
56
  docker:
57
57
  name: Publish Docker image
@@ -61,17 +61,17 @@ jobs:
61
61
  contents: read
62
62
  packages: write
63
63
  steps:
64
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
65
- - uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
64
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
65
+ - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
66
66
  with:
67
67
  registry: ghcr.io
68
68
  username: ${{ github.actor }}
69
69
  password: ${{ secrets.GITHUB_TOKEN }}
70
- - uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
70
+ - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
71
71
  with:
72
72
  username: ${{ secrets.DOCKERHUB_USERNAME }}
73
73
  password: ${{ secrets.DOCKERHUB_TOKEN }}
74
- - uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0
74
+ - uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
75
75
  id: meta
76
76
  with:
77
77
  images: |
@@ -81,7 +81,7 @@ jobs:
81
81
  type=semver,pattern={{version}}
82
82
  type=semver,pattern={{major}}.{{minor}}
83
83
  type=raw,value=latest
84
- - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
84
+ - uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
85
85
  with:
86
86
  context: .
87
87
  push: true
@@ -95,7 +95,7 @@ jobs:
95
95
  permissions:
96
96
  contents: write
97
97
  steps:
98
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
98
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
99
99
  - name: Extract changelog for this version
100
100
  id: changelog
101
101
  run: |
@@ -7,6 +7,187 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.5.0] - 2026-09-08
11
+
12
+ ### Added
13
+
14
+ - **`cloud-audit agent-blast`** - what can a hijacked AI agent reach in your
15
+ AWS account, and can you prove it? For every Bedrock Agent, AgentCore runtime,
16
+ gateway, code interpreter and browser discovered by `scan`, answers under two
17
+ threat models: *identity takeover* (the attacker holds the credentials of a
18
+ role the agent runs as: full role, escalation methods, AssumeRole hops) and
19
+ *behaviour takeover* (prompt injection steering the agent's tools, bounded by
20
+ the tools' own execution roles). Reach covers S3, Secrets Manager, SSM,
21
+ DynamoDB, RDS Data API, KMS, SQS, Lambda invoke/code, AssumeRole and Bedrock
22
+ model invocation; the agent's own knowledge-base buckets are concrete targets
23
+ even under wildcard grants (write access there is flagged as RAG poisoning).
24
+ Findings carry OWASP Top 10 for Agentic Applications (2026) and MITRE ATLAS
25
+ (v2026.08) identifiers. Output: tree, JSON, Markdown. Pure in-memory analysis
26
+ of the saved scan. `--verify` asks the read-only IAM policy simulator about
27
+ every concrete (principal, action, resource) and every escalation path.
28
+ - **AI agent identity inventory** - `scan` now records `agents` on the report:
29
+ Bedrock Agents (resource role, action groups at DRAFT version resolved to the
30
+ Lambda execution role, knowledge bases resolved to S3 data-source buckets)
31
+ and AgentCore (runtime role and network mode, gateway role with authorizer,
32
+ policy engine and targets, code interpreter and browser execution roles).
33
+ Read-only list/get calls, no charge. A denied read is recorded as a coverage
34
+ gap, never as "no agents here".
35
+ - **Policy grants for agent identities** - `report.principal_grants` keeps the
36
+ raw `(action, resource, effect, condition-flag, source)` statements for agent
37
+ roles and their tools' roles only. Conditions are flagged, not evaluated; the
38
+ IAM policy simulator decides.
39
+ - **Coverage gaps** - `CheckResult.coverage_gaps` and `summary.coverage_gaps`.
40
+ AgentCore checks now record an `AccessDenied` as "not assessed in this
41
+ region" (console, JSON, Markdown) instead of silently skipping the region.
42
+ A pass with gaps is not a clean pass.
43
+ - **Proof Mode per resource** - `proof.verify_resource_access` simulates one
44
+ action against concrete resource ARNs with optional context keys
45
+ (`ATTACKER_CONTEXT_ENTRIES`: no MFA on the session, TLS transport), reports
46
+ which policy layer denied (SCP, permissions boundary) and follows result
47
+ pagination.
48
+ - **Sample scan through the real engines** - `cloud-audit demo` now renders an
49
+ invented account through the actual correlation, root-cause, breach-cost and
50
+ security-graph engines instead of printing canned text; `demo --save FILE`
51
+ writes it as a scan report so `blast-radius`, `agent-blast`, `simulate`,
52
+ `exposure` and `diff` can be tried offline, and `agent-blast --demo` needs no
53
+ file at all. The sample includes a Bedrock Agent, an AgentCore runtime, a
54
+ gateway with Lambda and remote-MCP targets and a code interpreter.
55
+ - **MCP tool `get_agent_blast`** - the agent-blast report (Markdown) for every
56
+ agent in the last scan, or one agent by name, id or ARN substring.
57
+
58
+ ### Fixed
59
+
60
+ - The MCP SDK dependency is pinned to `mcp>=1.20,<2`. The `mcp` 2.x line
61
+ (released 2026-07-28) moved `FastMCP` out of `mcp.server.fastmcp`, so a fresh
62
+ `pip install cloud-audit` resolved to 2.x and `cloud-audit-mcp` failed to
63
+ import. The 1.x line is still maintained (1.30.0 on 2026-09-07); 2.x support
64
+ is a follow-up.
65
+ - `simulate` reported relationship-based chains (`AC-01` internet-exposed admin
66
+ instance, `AC-07` OIDC to admin) as broken by any fix, because re-detection
67
+ from findings alone cannot see EC2-to-role and OIDC-to-policy relationships a
68
+ saved scan does not carry. A chain now survives a simulated fix unless one of
69
+ its own findings was fixed, and the remaining risk exposure is priced
70
+ accordingly.
71
+ - `blast-radius` (tree output) crashed on Windows consoles with `cp1250`
72
+ encoding, and rendered emoji elsewhere, when a node label contained an ARN
73
+ segment such as `:secret:`: Rich interpreted it as an emoji shortcode.
74
+ Tree labels are now rendered with emoji disabled. `agent-blast` uses the same
75
+ renderer.
76
+
77
+ ### Changed
78
+
79
+ - Proof Mode documentation now reflects the IAM policy simulator as of
80
+ 2026-07-30: the attached permissions boundary and the organization's SCPs
81
+ (including their condition keys and resource scoping) are evaluated; RCPs,
82
+ VPC endpoint policies, role chaining and resource-based policies for IAM
83
+ roles are not. The "verified" detail text says so.
84
+ - `blast-radius` labels IAM principals as `role/<name>` / `user/<name>` instead
85
+ of a truncated account prefix.
86
+ - README rewritten around `agent-blast`, with every sample block taken from the
87
+ commands' real output on the built-in sample scan.
88
+
89
+ ## [2.4.0] - 2026-06-30
90
+
91
+ ### Added
92
+
93
+ - **Data Perimeter Scanner** - new check category (`aws-dp-001` .. `aws-dp-005`)
94
+ that evaluates resource-based policies for the two boundary failures detectable
95
+ from a single account's configuration - read-only, and without AWS Organizations
96
+ access:
97
+
98
+ - **Confused deputy**: an `Allow` statement grants an AWS service principal
99
+ without an `aws:SourceAccount` / `aws:SourceArn` / `aws:SourceOrgID` /
100
+ `aws:SourceOwner` condition (`MEDIUM`). A service acting on behalf of another
101
+ account could be coerced into operating on your resource.
102
+ - **Cross-organization exposure**: an `Allow` statement grants a wildcard
103
+ (`"*"`) or external-account AWS principal without an organization-boundary
104
+ condition (`aws:PrincipalOrgID`, `aws:ResourceOrgID`, `aws:SourceOrgID`, ...).
105
+ Wildcard grants are `HIGH`; a named external account is `LOW` (often an
106
+ intentional partner share). On Secrets Manager these are escalated to
107
+ `CRITICAL` (wildcard) / `MEDIUM` (external) as a direct credential-exfiltration
108
+ path.
109
+
110
+ Services covered: S3 bucket policies (`aws-dp-001`), SNS topic policies
111
+ (`aws-dp-002`), SQS queue policies (`aws-dp-003`), Secrets Manager resource
112
+ policies (`aws-dp-004`), and Lambda resource policies (`aws-dp-005`). Every
113
+ finding ships CLI + Terraform remediation and a breach-cost estimate. Condition
114
+ keys are matched case-insensitively, and condition **values** are evaluated (not
115
+ just key presence) - a guardrail scoped to a *foreign* account or org is still
116
+ flagged. Default SNS/SQS policies relying on `aws:SourceOwner` set to the owner
117
+ account are correctly treated as account-scoped (no false positive). Federated
118
+ provider ARNs in a foreign account are flagged as external; federated URL IdPs
119
+ and `CanonicalUser` principals are out of scope.
120
+
121
+ This closes a gap the dominant open-source scanner explicitly does not cover
122
+ (Prowler issue #7114, "Integrating SCP/RCP Policy Awareness", open since
123
+ 2025-03): evaluating data-perimeter condition keys on resource policies. SCP/RCP
124
+ enforcement at the AWS Organizations level is intentionally out of scope.
125
+ Detection taxonomy follows the AWS data perimeter whitepaper and the AWS
126
+ cross-service confused-deputy guidance.
127
+
128
+ - **Proof Mode** - new opt-in `scan --verify` that cross-checks each detected IAM
129
+ privilege-escalation path against the read-only `iam:SimulatePrincipalPolicy`
130
+ API to confirm the principal's policies actually allow the required actions. Each
131
+ path is annotated `verified` with `verification_detail` evidence: `true` = the
132
+ simulator allowed every required action (policy-allowed; *simulated, not
133
+ executed*); `false` = the simulator denied one (the static path is likely a
134
+ false positive); `null` = not asserted. The scan prints
135
+ `Proof Mode: N/M escalation path(s) policy-allowed by IAM simulator`. Honest
136
+ framing throughout: this confirms the permission exists, not end-to-end
137
+ exploitability - the simulator does not factor in SCPs, permission boundaries,
138
+ resource policies, or trust conditions. Resource-scoped methods (`iam:PassRole`,
139
+ `sts:AssumeRole`, compute-hijack) are deliberately left `null` because without
140
+ resource ARNs the simulator evaluates against `*` and would over-report; paths
141
+ gated by unevaluated condition keys are also left `null`.
142
+ `iam:SimulatePrincipalPolicy` has no per-call charge, so the opt-in controls
143
+ latency/throttling only; calls are deduplicated per (principal, action-set). New
144
+ module `proof.py`; `EscalationPath` gains `verified` / `verification_detail`
145
+ (backward compatible, default unchecked). Brings the 2026 "proof, not
146
+ probability" validation trend - which commercial scanners sell as a paid
147
+ flagship - to open-source AWS.
148
+
149
+ - **AgentCore checks** - first OSS scanner with dedicated Amazon Bedrock AgentCore
150
+ (GA 2025-10) coverage: 6 read-only checks `aws-agc-001..006` over the AI agent
151
+ platform. Flags Code Interpreter / Runtime in PUBLIC network mode (egress
152
+ exfiltration), Runtime not enforcing MMDSv2 (metadata credential theft), Memory
153
+ without a customer-managed KMS key, Gateway with no inbound authorizer
154
+ (`authorizerType=NONE`), and Gateway with no enforcing policy engine (missing or
155
+ `LOG_ONLY`). Each finding ships a CLI + Terraform fix and breach-cost estimate,
156
+ and maps to Palo Alto Unit 42 "Cracks in the Bedrock" research. Read-only
157
+ `bedrock-agentcore-control` (no per-call charge); the service is regional and
158
+ absent regions are skipped silently. New module `agentcore.py`; field names,
159
+ operations and enum values verified against the live boto3 service model.
160
+
161
+ ### Changed
162
+
163
+ - Check count: 99 -> 110 (across 25 services). AgentCore adds a new service module
164
+ of 6 checks; the data perimeter's 5 checks remain a cross-cutting category over
165
+ existing services, like Threat Feed.
166
+
167
+ ### Tests
168
+
169
+ - 836 -> 948 (+112). New file `tests/aws/test_data_perimeter.py`: 43 unit tests
170
+ pinning the `_find_perimeter_gaps` detection engine (confused deputy, cross-org
171
+ wildcard/external, condition-value evaluation so a guardrail pointing at a
172
+ foreign account/org is still flagged, federated provider ARNs, case-insensitive
173
+ conditions, Deny/NotPrincipal/CanonicalUser/malformed handling) plus 17 moto
174
+ integration tests across all five services. New file `tests/test_proof.py`:
175
+ 28 tests pinning the Proof Mode engine (decision semantics: allowed /
176
+ explicit+implicit deny / unknown-decision / incomplete / empty / malformed; the
177
+ resource-scoping gate that leaves PassRole/AssumeRole and deny-removal paths
178
+ unasserted; condition-key gating; API-call dedup; per-path error isolation;
179
+ provider-backed path). New file `tests/aws/test_agentcore.py`: 24 fixture-based
180
+ tests (moto lacks bedrock-agentcore-control) covering each check's positive and
181
+ negative cases across network mode, MMDSv2, memory KMS, gateway authorizer and
182
+ policy engine, empty policy config, multi-page pagination, plus
183
+ region-unavailable / access-denied skip and multi-region aggregation.
184
+
185
+ ### Compliance
186
+
187
+ - `aws-dp-001` .. `aws-dp-005` mapped: SOC 2 (CC5.2, CC6.1, CC6.6, C1.1),
188
+ CIS AWS v3.0 (2.1.4), HIPAA (164.308(a)(1)(ii)(A), 164.312(a)(1)),
189
+ ISO/IEC 27001:2022 (A.8.3, A.8.12), NIS2 (NIS2-RM-09a), BSI C5:2020 (IDM-07).
190
+
10
191
  ## [2.3.1] - 2026-05-26
11
192
 
12
193
  ### Added