Submit

Cloud Audit

@gebalamariusz

Open-source AWS security scanner with Attack Chains, Breach Cost Estimation, and MCP Server. 47 checks across 15 AWS services. Every finding includes copy-paste remediation (CLI + Terraform) and a dollar-risk estimate with verified source. First free standalone AWS security MCP server - Prowler and Wiz require paid SaaS.
Overview

cloud-audit logo

cloud-audit

Find AWS attack chains and get exact fixes.

Open-source CLI scanner that correlates findings into exploitable paths
and generates copy-paste remediation (AWS CLI + Terraform).

Detect exploitable attack paths  -  Get AWS CLI + Terraform fixes  -  Run locally, no SaaS required

PyPI version Python versions CI License: MIT PyPI downloads Docker Featured in HelpNet Security Documentation

Documentation - Quick Start - CIS AWS v3.0 - SOC 2 - Attack Chains - MCP Server

Quick Start

pip install cloud-audit
cloud-audit scan

Uses your default AWS credentials and region. Try without an AWS account:

cloud-audit demo

What You Get

+------- Health Score -------+
| 42 / 100                   |   Risk exposure: $725K - $7.3M
+----------------------------+

+---- Attack Chains (3 detected) -----------------------------------+
|  CRITICAL  Internet-Exposed Admin Instance                         |
|            i-0abc123 - public SG + admin IAM role + IMDSv1         |
|            Fix: Restrict security group (effort: LOW)              |
|                                                                    |
|  CRITICAL  CI/CD to Admin Takeover                                 |
|            github-deploy - OIDC no sub + admin policy              |
|            Fix: Add sub condition (effort: LOW)                    |
+--------------------------------------------------------------------+

Findings by severity:  CRITICAL: 3  HIGH: 8  MEDIUM: 12  LOW: 5

80 checks across 18 AWS services. Every finding includes AWS CLI + Terraform remediation.

cloud-audit demo video
Watch the 1-minute demo

If cloud-audit helped you find something you missed, consider giving it a star. It helps others discover the project.


Features

Attack Chain Detection

Other scanners give you a flat list of findings. cloud-audit correlates them into attack paths an attacker would actually exploit.

  Internet --> Public SG --> EC2 (IMDSv1) --> Admin IAM Creds --> Account Takeover
               aws-vpc-002   aws-ec2-004       Detected: AC-01, AC-02

Examples from the 20 built-in rules:

ChainWhat it catches
Internet-Exposed Admin InstancePublic SG + admin IAM role + IMDSv1 = account takeover
CI/CD to Admin TakeoverOIDC without sub condition + admin policy = pipeline hijack
SSRF to Credential TheftPublic instance + IMDSv1 + no VPC flow logs = invisible exfiltration

Based on MITRE ATT&CK Cloud and Datadog pathfinding.cloud. See all 20 rules in the docs.

Copy-Paste Remediation

Every finding includes AWS CLI commands, Terraform HCL, and documentation links. Export all fixes as a runnable script:

cloud-audit scan --export-fixes fixes.sh

Scan Diff

Compare scans to track drift. Catches ClickOps changes, manual console edits, and regressions that IaC scanning misses.

cloud-audit diff yesterday.json today.json

Exit code 0 = no new findings, 1 = regression. See daily-scan-with-diff.yml for a CI/CD workflow.

CIS AWS v3.0 Compliance

Built-in compliance engine with per-control evidence, readiness scoring, and auditor-ready reports.

  • CIS AWS v3.0 - 62 controls, 55 automated (89%)
  • SOC 2 Type II - 43 criteria, 24 automated (56%)

Planned: BSI C5, ISO 27001, HIPAA, NIS2.

Breach Cost Estimation

Every finding includes a dollar-range risk estimate based on published breach data (IBM Cost of a Data Breach 2024, Verizon DBIR, enforcement actions). Attack chains use compound risk multipliers. Every estimate links to its source.

MCP Server for AI Agents

Ask Claude Code, Cursor, or VS Code Copilot to scan your AWS account:

claude mcp add cloud-audit -- uvx --from cloud-audit cloud-audit-mcp

6 tools: scan_aws, get_findings, get_attack_chains, get_remediation, get_health_score, list_checks. Free and standalone - no SaaS account needed.


How It Compares

FeatureProwlerTrivyCheckovcloud-audit
Checks5765172500+80
Attack chain detectionNoNoNo20 rules
Remediation per findingCIS onlyNoLinks100% (CLI + Terraform)
Breach cost estimationNoNoNoPer finding + chain
CIS v3.0 compliance engineYesNoNo62 controls with evidence
SOC 2 Type II complianceNoNoNo43 criteria with evidence
MCP server (AI agents)Paid ($99/mo)NoNoFree, standalone

cloud-audit has fewer checks than Prowler but deeper output per finding: remediation code, attack chain context, cost estimates, and compliance evidence. If you need exhaustive compliance coverage across multiple clouds, Prowler is the better choice. If you need a focused scan that shows how findings combine into real attack paths and tells you exactly how to fix each one, cloud-audit is built for that.

Feature snapshot as of March 2026. Verify against upstream docs for the latest details.


Reports

cloud-audit scan --format html --output report.html    # Client-ready HTML
cloud-audit scan --format json --output report.json    # Machine-readable
cloud-audit scan --format sarif --output results.sarif # GitHub Code Scanning
cloud-audit scan --format markdown --output report.md  # PR comments

Format is auto-detected from file extension.

cloud-audit HTML report

Installation

pip install cloud-audit          # pip (recommended)
pipx install cloud-audit         # pipx (isolated)
docker run ghcr.io/gebalamariusz/cloud-audit scan  # Docker

Docker with credentials:

docker run -v ~/.aws:/home/cloudaudit/.aws:ro ghcr.io/gebalamariusz/cloud-audit scan

Usage

cloud-audit scan -R                                    # Show remediation
cloud-audit scan --profile prod --regions eu-central-1  # Specific profile/region
cloud-audit scan --regions all                          # All enabled regions
cloud-audit scan --min-severity high                   # Filter by severity
cloud-audit scan --role-arn arn:aws:iam::...:role/audit # Cross-account
cloud-audit scan --quiet                               # Exit code only (CI/CD)
cloud-audit list-checks                                # List all checks
Exit codeMeaning
0No findings
1Findings detected
2Scan error
Configuration file

Create .cloud-audit.yml in your project root:

provider: aws
regions:
  - eu-central-1
  - eu-west-1
min_severity: medium
exclude_checks:
  - aws-eip-001
suppressions:
  - check_id: aws-vpc-001
    resource_id: vpc-abc123
    reason: "Legacy VPC, migration planned for Q3"
    accepted_by: "jane@example.com"
    expires: "2026-09-30"
  - check_id: "aws-cw-*"
    reason: "CloudWatch alarms managed by separate team"
    accepted_by: "ops@example.com"
Environment variables
VariableExample
CLOUD_AUDIT_REGIONSeu-central-1,eu-west-1
CLOUD_AUDIT_MIN_SEVERITYhigh
CLOUD_AUDIT_EXCLUDE_CHECKSaws-eip-001,aws-iam-001
CLOUD_AUDIT_ROLE_ARNarn:aws:iam::...:role/auditor

Precedence: CLI flags > env vars > config file > defaults.

CI/CD

- run: pip install cloud-audit
- run: cloud-audit scan --format sarif --output results.sarif
- uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: results.sarif

Ready-to-use workflows: basic scan, daily diff, post-deploy.

AWS Permissions

cloud-audit requires read-only access. Attach SecurityAudit:

aws iam attach-role-policy --role-name auditor --policy-arn arn:aws:iam::aws:policy/SecurityAudit

cloud-audit never modifies your infrastructure.

What It Checks

80 checks across IAM, S3, EC2, VPC, RDS, EIP, EFS, CloudTrail, GuardDuty, KMS, CloudWatch, Lambda, ECS, SSM, Secrets Manager, AWS Config, Security Hub, and Account.

Full check list (80 checks)

IAM (16 checks)

IDSeverityDescription
aws-iam-001CriticalRoot account without MFA
aws-iam-002HighIAM user with console access but no MFA
aws-iam-003MediumAccess key older than 90 days
aws-iam-004MediumAccess key unused for 45+ days
aws-iam-005CriticalIAM policy with Action:* and Resource:*
aws-iam-006MediumPassword policy below CIS requirements
aws-iam-007CriticalOIDC trust policy without sub condition
aws-iam-008CriticalRoot account has active access keys
aws-iam-009MediumMultiple active access keys per user
aws-iam-010MediumDirect policy attachment on user (not via group)
aws-iam-011MediumNo AWSSupportAccess role
aws-iam-012MediumIAM Access Analyzer not enabled
aws-iam-013MediumExpired SSL/TLS certificate in IAM
aws-iam-014MediumAWSCloudShellFullAccess attached
aws-iam-015MediumRoot uses virtual MFA (not hardware)
aws-iam-016MediumEC2 instance without IAM role

S3 (7 checks)

IDSeverityDescription
aws-s3-001HighS3 bucket without public access block
aws-s3-002LowS3 bucket using SSE-S3 instead of SSE-KMS
aws-s3-003LowS3 bucket without versioning
aws-s3-004LowS3 bucket without lifecycle rules
aws-s3-005MediumS3 bucket without access logging
aws-s3-006MediumS3 bucket policy does not deny HTTP
aws-s3-007LowS3 bucket without MFA Delete

EC2 (6 checks)

IDSeverityDescription
aws-ec2-001HighPublicly shared AMI
aws-ec2-002MediumUnencrypted EBS volume
aws-ec2-003LowStopped EC2 instance (EBS charges continue)
aws-ec2-004HighEC2 instance with IMDSv1 (SSRF risk)
aws-ec2-005LowEC2 instance without termination protection
aws-ec2-006MediumEBS default encryption disabled

VPC (5 checks)

IDSeverityDescription
aws-vpc-001MediumDefault VPC in use
aws-vpc-002CriticalSecurity group open to 0.0.0.0/0 or ::/0 on sensitive ports
aws-vpc-003MediumVPC without flow logs
aws-vpc-004MediumNACL allows internet access to admin ports
aws-vpc-005MediumDefault security group has active rules

RDS (4 checks)

IDSeverityDescription
aws-rds-001CriticalPublicly accessible RDS instance
aws-rds-002HighUnencrypted RDS instance
aws-rds-003MediumSingle-AZ RDS instance
aws-rds-004LowRDS auto minor version upgrade disabled

CloudTrail (7 checks)

IDSeverityDescription
aws-ct-001CriticalNo multi-region CloudTrail trail
aws-ct-002HighCloudTrail log file validation disabled
aws-ct-003CriticalCloudTrail S3 bucket is publicly accessible
aws-ct-004HighCloudTrail S3 bucket has no access logging
aws-ct-005MediumCloudTrail not encrypted with KMS
aws-ct-006MediumS3 object-level write events not logged
aws-ct-007MediumS3 object-level read events not logged

CloudWatch (15 checks)

IDSeverityDescription
aws-cw-001HighNo alarm for root account usage
aws-cw-002MediumNo alarm for unauthorized API calls
aws-cw-003MediumNo alarm for console sign-in without MFA
aws-cw-004MediumNo alarm for IAM policy changes
aws-cw-005MediumNo alarm for CloudTrail config changes
aws-cw-006MediumNo alarm for console auth failures
aws-cw-007MediumNo alarm for CMK disable/deletion
aws-cw-008MediumNo alarm for S3 bucket policy changes
aws-cw-009MediumNo alarm for Config changes
aws-cw-010MediumNo alarm for security group changes
aws-cw-011MediumNo alarm for NACL changes
aws-cw-012MediumNo alarm for network gateway changes
aws-cw-013MediumNo alarm for route table changes
aws-cw-014MediumNo alarm for VPC changes
aws-cw-015MediumNo alarm for Organizations changes

Other Services (20 checks)

IDSeverityDescription
aws-gd-001HighGuardDuty not enabled
aws-gd-002MediumGuardDuty findings unresolved for 30+ days
aws-cfg-001MediumAWS Config not enabled
aws-cfg-002HighAWS Config recorder stopped
aws-kms-001MediumKMS key without automatic rotation
aws-kms-002HighKMS key policy with Principal:*
aws-lambda-001HighLambda function URL with no authentication
aws-lambda-002MediumLambda running on a deprecated runtime
aws-lambda-003HighPotential secrets in Lambda env vars
aws-ecs-001CriticalECS task running in privileged mode
aws-ecs-002HighECS task without log configuration
aws-ecs-003MediumECS service with Execute Command enabled
aws-ssm-001MediumEC2 instance not managed by SSM
aws-ssm-002HighSSM parameter stored as plain String
aws-sm-001MediumSecret without rotation
aws-sm-002LowSecret unused for 90+ days
aws-eip-001LowUnattached Elastic IP
aws-efs-001MediumEFS file system not encrypted
aws-sh-001MediumSecurity Hub not enabled
aws-account-001MediumNo security alternate contact

Alternatives

  • Prowler - 576+ checks, multi-cloud, full CIS coverage, auto-remediation. The most comprehensive open-source scanner.
  • Trivy - Container, IaC, and cloud scanner. Strong on containers, growing cloud coverage.
  • Steampipe - SQL-based cloud querying. Very flexible.
  • AWS Security Hub - Native AWS service with continuous monitoring. Free 30-day trial.

Documentation

cloud-audit has grown beyond what a single README can cover. The full documentation is at haitmg.pl/cloud-audit and includes:

  • Getting Started - installation, quick start, demo mode
  • Compliance - CIS AWS v3.0 with all 62 controls, planned SOC 2, BSI C5, HIPAA, NIS2
  • Attack Chains - all 20 rules with MITRE ATT&CK references
  • MCP Server - full setup guide for Claude Code, Cursor, VS Code
  • Configuration - config file, env vars, suppressions
  • CI/CD - GitHub Actions, SARIF, pre-commit hooks
  • Reports - HTML, JSON, SARIF, Markdown output formats
  • All 80 Checks - full check reference by service

This README covers the essentials. For compliance framework details, advanced configuration, and per-check documentation, see the full docs.

What's Next

  • SOC 2, BSI C5, HIPAA, NIS2 compliance frameworks
  • Terraform drift detection
  • Root cause grouping

Past releases: CHANGELOG.md

Development

git clone https://github.com/gebalamariusz/cloud-audit.git
cd cloud-audit
pip install -e ".[dev]"

pytest -v                          # tests
ruff check src/ tests/             # lint
ruff format --check src/ tests/    # format
mypy src/                          # type check

See CONTRIBUTING.md for how to add a new check.

License

MIT - Mariusz Gebala / HAIT

Server Config

{
  "mcpServers": {
    "cloud-audit": {
      "command": "uvx",
      "args": [
        "--from",
        "cloud-audit",
        "cloud-audit-mcp"
      ]
    }
  }
}
© 2025 MCP.so. All rights reserved.

Build with ShipAny.