Skip to main content
CI

vamp-aws-audit

VampSecure Labs · Security Research Division

🇬🇧 English · 🇪🇸 Español


🇬🇧 English

CIS AWS Foundations Benchmark Level 1 security auditor with 71 controls distributed across 8 modules. Implements AWS Signature Version 4 from scratch with hmac+hashlib — no external dependencies beyond aiohttp and rich.


Modules

Module Controls CIS Section
IAM 18 CIS 1.x
S3 5×bucket CIS 2.1, 2.2, 2.6, 2.7
EC2/VPC 6 CIS 5.x
CloudTrail 4 CIS 3.x
RDS 5×instance —
KMS 2×key CIS 3.7
GuardDuty 1 —
Config 2 CIS 2.5

Installation

pip install vamp-aws-audit
# or with Homebrew:
brew install vampsecure-labs/labs/vamp-aws-audit
pip install -r requirements.txt   # aiohttp rich

Requirements: Python 3.11+


Usage

# Environment variables (recommended)
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
python vamp_aws_audit.py --region eu-west-1

# Or pass credentials as arguments
python vamp_aws_audit.py --access-key AKIA... --secret-key ... --region us-east-1

# IAM and S3 modules only, JSON output
python vamp_aws_audit.py --modules iam s3 --fmt json --out report.json

# EC2 module only
python vamp_aws_audit.py --modules ec2

Arguments

Argument Description
--access-key AWS Access Key ID
--secret-key AWS Secret Access Key
--region AWS region (default: us-east-1)
--modules Modules to run: iam s3 ec2 cloudtrail rds kms guardduty config
--fmt Output format: rich (default) or json
--out Write the raw findings as JSON
--report-html Write the VSL client engagement report (HTML)
--report-pdf Write the VSL client engagement report (PDF, needs fpdf2)
--client / --engagement / --auditor Engagement metadata embedded in the report
--out FILE Save findings to JSON

Sample Output

  vamp-aws-audit v1.1.1 · CIS AWS Level 1 · 8 modules
  Region: us-east-1  Modules: iam, s3, ec2, cloudtrail, rds, kms, guardduty, config
  ✓ Authenticated: arn:aws:iam::123456789012:user/auditor

                    vamp-aws-audit — Findings
  ┌──────────────┬──────────┬────────┬──────────────────────────────────┐
  │ ID           │ Sev.     │ Status │ Control                          │
  ├──────────────┼──────────┼────────┼──────────────────────────────────┤
  │ CIS-1.14     │ CRITICAL │ FAIL   │ Root account has MFA enabled     │
  │ CIS-1.4      │ CRITICAL │ FAIL   │ Root account has no access keys  │
  │ CIS-1.2      │ HIGH     │ FAIL   │ All IAM users have MFA           │
  │ CIS-3.1      │ CRITICAL │ FAIL   │ CloudTrail multi-region active   │
  │ CIS-GD-1     │ HIGH     │ FAIL   │ GuardDuty enabled in region      │
  │ CIS-2.5      │ MEDIUM   │ FAIL   │ AWS Config recorder active       │
  └──────────────┴──────────┴────────┴──────────────────────────────────┘

  Total: 48 controls  3 CRITICAL  8 HIGH  12 MEDIUM  4 LOW  ✓ 21 PASS  – 0 SKIP

  Remediations (FAIL/WARN):
    CIS-1.14 → Enable virtual or hardware MFA on the root account via IAM console
    CIS-1.4  → Delete all access keys from the root account in IAM > Security credentials
    CIS-3.1  → CloudTrail > Create trail > Apply trail to all regions: Yes

Exit Codes

Code Meaning
0 No CRITICAL or HIGH findings
1 At least one HIGH finding
2 At least one CRITICAL finding

No AWS SDK Dependency

This auditor does not use boto3 or any AWS SDK library. It implements AWS Signature Version 4 directly with hmac and hashlib from the stdlib. The only HTTP dependency is aiohttp for async calls.


References


Why vamp-aws-audit vs Prowler · ScoutSuite · CloudSploit

Feature vamp-aws-audit Prowler ScoutSuite CloudSploit
Zero AWS SDK dependency (no boto3) ✅ ❌ (boto3) ❌ (boto3) ❌ (AWS SDK)
Native SigV4 via stdlib (hmac+hashlib) ✅ ❌ ❌ ❌
CIS AWS Foundations Benchmark v3.0.0 ✅ 71 controls ✅ ✅ ⚠️ partial
Async aiohttp (parallel module execution) ✅ ⚠️ ⚠️ ❌
Air-gap / offline capable ✅ ❌ ❌ ❌
VSL client report (HTML/PDF) ✅ ⚠️ HTML ⚠️ HTML ✅ (SaaS)
CI/CD exit codes (0/1/2) ✅ ✅ ⚠️ ⚠️
Multi-cloud coverage ❌ (AWS only) ✅ ✅ ✅
License AGPL-3.0 Apache 2.0 GPL-2.0 AGPL-3.0

Key differentiators:

  • No boto3, no AWS CLI: implements AWS Signature Version 4 natively with hmac+hashlib from the Python stdlib. Runs in any minimal Python environment without installing the AWS SDK or configuring credential profiles.
  • Air-gap friendly: the only network requirement is connectivity to AWS API endpoints. No package manager calls, no metadata token fetches — a single pip install aiohttp rich is the full dependency surface.
  • 71 CIS Level 1 controls in one async pass: IAM credential hygiene, S3 public access, CloudTrail multi-region, VPC security groups, RDS encryption, KMS key rotation, and GuardDuty status — all covered in a single run.
  • Deterministic CI/CD exit codes: 0 (clean), 1 (HIGH findings), 2 (CRITICAL findings) — a clean integration point for Forgejo/GitHub Actions gates without parsing JSON output.

Check Coverage

Check ID Description Standard Severity
CIS-1.4 Root account has active access keys CIS AWS 1.4 / NIST SP 800-53 AC-2 CRITICAL
CIS-1.14 Root account does not have MFA enabled CIS AWS 1.14 / NIST SP 800-53 IA-5 CRITICAL
CIS-1.2 IAM user without MFA enabled CIS AWS 1.2 / NIST SP 800-53 IA-5 HIGH
CIS-1.3 IAM credentials unused for 90+ days not disabled CIS AWS 1.3 / NIST SP 800-53 AC-2 HIGH
CIS-1.5 IAM password policy: minimum password length below 14 CIS AWS 1.5 / NIST SP 800-63B §5.1.1 MEDIUM
CIS-2.1.5 S3 bucket with public access block not enabled CIS AWS 2.1.5 / NIST SP 800-53 AC-3 HIGH
CIS-2.2.1 S3 bucket without server-side encryption enabled CIS AWS 2.2.1 / NIST SP 800-53 SC-28 MEDIUM
CIS-3.1 CloudTrail not enabled across all AWS regions CIS AWS 3.1 / NIST SP 800-53 AU-2 CRITICAL
CIS-3.7 CloudTrail log files not encrypted with a KMS CMK CIS AWS 3.7 / NIST SP 800-53 AU-9 MEDIUM
CIS-5.1 Default VPC security group allows all inbound or outbound traffic CIS AWS 5.1 / NIST SP 800-53 SC-7 HIGH
CIS-5.2 SSH port 22 open to 0.0.0.0/0 in a security group CIS AWS 5.2 / NIST SP 800-53 SC-7 CRITICAL
CIS-GD-1 GuardDuty not enabled in the audited region AWS Well-Architected SEC 1 / NIST SP 800-53 SI-4 HIGH

Version History

Version Main changes
v1.1.0 VSL client engagement report (HTML + PDF) via the shared vampsec_report module: --report-html/--report-pdf + --client/--engagement/--auditor. The comparison table advertised it; the CLI now delivers it.
v1.0.1 Bilingual README (EN/ES)
v1.0.0 Initial release: CIS AWS Foundations Benchmark Level 1, 71 controls, 8 modules, native SigV4, async aiohttp

© VampSecure Studios — VampSecure Labs Security Research Division
For use in authorized audits only. Unauthorized use is illegal.


🇪🇸 Español

Auditor de seguridad CIS AWS Foundations Benchmark Level 1 con 71 controles distribuidos en 8 módulos. Implementa AWS Signature Version 4 desde cero con hmac+hashlib — sin dependencias externas más allá de aiohttp y rich.


Módulos

Módulo Controles Sección CIS
IAM 18 CIS 1.x
S3 5×bucket CIS 2.1, 2.2, 2.6, 2.7
EC2/VPC 6 CIS 5.x
CloudTrail 4 CIS 3.x
RDS 5×instancia —
KMS 2×clave CIS 3.7
GuardDuty 1 —
Config 2 CIS 2.5

Instalación

pip install vamp-aws-audit
# o con Homebrew:
brew install vampsecure-labs/labs/vamp-aws-audit
pip install -r requirements.txt   # aiohttp rich

Requisitos: Python 3.11+


Uso

# Variables de entorno (recomendado)
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
python vamp_aws_audit.py --region eu-west-1

# O pasar las credenciales por argumento
python vamp_aws_audit.py --access-key AKIA... --secret-key ... --region us-east-1

# Solo módulos IAM y S3, salida JSON
python vamp_aws_audit.py --modules iam s3 --fmt json --out report.json

# Solo módulo EC2
python vamp_aws_audit.py --modules ec2

Argumentos

Argumento Descripción
--access-key AWS Access Key ID
--secret-key AWS Secret Access Key
--region Región AWS (default: us-east-1)
--modules Módulos a ejecutar: iam s3 ec2 cloudtrail rds kms guardduty config
--fmt Formato de salida: rich (default) o json
--out Guardar los hallazgos crudos como JSON
--report-html Informe de cliente VSL (HTML)
--report-pdf Informe de cliente VSL (PDF, requiere fpdf2)
--client / --engagement / --auditor Metadatos del engagement en el informe
--out FILE Guardar findings en JSON

Ejemplo de salida

  vamp-aws-audit v1.1.1 · CIS AWS Level 1 · 8 módulos
  Región: us-east-1  Módulos: iam, s3, ec2, cloudtrail, rds, kms, guardduty, config
  ✓ Autenticado: arn:aws:iam::123456789012:user/auditor

                    vamp-aws-audit — Hallazgos
  ┌──────────────┬──────────┬────────┬──────────────────────────────────┐
  │ ID           │ Sev.     │ Estado │ Control                          │
  ├──────────────┼──────────┼────────┼──────────────────────────────────┤
  │ CIS-1.14     │ CRITICAL │ FAIL   │ Cuenta root tiene MFA activado   │
  │ CIS-1.4      │ CRITICAL │ FAIL   │ Cuenta root no tiene access keys │
  │ CIS-1.2      │ HIGH     │ FAIL   │ Todos los usuarios IAM tienen MFA│
  │ CIS-3.1      │ CRITICAL │ FAIL   │ CloudTrail multi-región activo   │
  │ CIS-GD-1     │ HIGH     │ FAIL   │ GuardDuty activado en la región  │
  │ CIS-2.5      │ MEDIUM   │ FAIL   │ AWS Config recorder activo       │
  └──────────────┴──────────┴────────┴──────────────────────────────────┘

  Total: 48 controles  3 CRITICAL  8 HIGH  12 MEDIUM  4 LOW  ✓ 21 PASS  – 0 SKIP

  Remediaciones (FAIL/WARN):
    CIS-1.14 → Activar MFA virtual o hardware en la cuenta root vía IAM console
    CIS-1.4  → Eliminar todas las access keys de la cuenta root en IAM > Security credentials
    CIS-3.1  → CloudTrail > Create trail > Apply trail to all regions: Yes

Exit codes

Código Significado
0 Sin hallazgos CRITICAL o HIGH
1 Al menos un hallazgo HIGH
2 Al menos un hallazgo CRITICAL

Sin dependencias AWS SDK

Este auditor no usa boto3 ni ninguna librería de AWS SDK. Implementa AWS Signature Version 4 directamente con hmac y hashlib de la stdlib. La única dependencia HTTP es aiohttp para las llamadas asíncronas.


Referencias


Why vamp-aws-audit vs Prowler · ScoutSuite · CloudSploit

Feature vamp-aws-audit Prowler ScoutSuite CloudSploit
Zero AWS SDK dependency (no boto3) ✅ ❌ (boto3) ❌ (boto3) ❌ (AWS SDK)
Native SigV4 via stdlib (hmac+hashlib) ✅ ❌ ❌ ❌
CIS AWS Foundations Benchmark v3.0.0 ✅ 71 controls ✅ ✅ ⚠️ partial
Async aiohttp (parallel module execution) ✅ ⚠️ ⚠️ ❌
Air-gap / offline capable ✅ ❌ ❌ ❌
VSL client report (HTML/PDF) ✅ ⚠️ HTML ⚠️ HTML ✅ (SaaS)
CI/CD exit codes (0/1/2) ✅ ✅ ⚠️ ⚠️
Multi-cloud coverage ❌ (AWS only) ✅ ✅ ✅
License AGPL-3.0 Apache 2.0 GPL-2.0 AGPL-3.0

Diferenciadores clave:

  • Sin boto3, sin AWS CLI: implementa AWS Signature Version 4 de forma nativa con hmac+hashlib de la stdlib de Python. Se ejecuta en cualquier entorno Python mínimo sin instalar el AWS SDK ni configurar perfiles de credenciales.
  • Compatible con air-gap: el único requisito de red es conectividad a los endpoints de la API de AWS. Sin llamadas a gestores de paquetes, sin obtención de tokens de metadatos — un único pip install aiohttp rich es la superficie de dependencias completa.
  • 71 controles CIS Level 1 en un solo pase asíncrono: higiene de credenciales IAM, acceso público S3, CloudTrail multi-región, grupos de seguridad VPC, cifrado RDS, rotación de claves KMS y estado de GuardDuty — todo cubierto en una sola ejecución.
  • Códigos de salida deterministas para CI/CD: 0 (limpio), 1 (hallazgos HIGH), 2 (hallazgos CRITICAL) — punto de integración limpio para gates de Forgejo/GitHub Actions sin necesidad de parsear la salida JSON.

Cobertura de checks

Check ID Descripción Estándar Severidad
CIS-1.4 La cuenta root tiene access keys activas CIS AWS 1.4 / NIST SP 800-53 AC-2 CRITICAL
CIS-1.14 La cuenta root no tiene MFA habilitado CIS AWS 1.14 / NIST SP 800-53 IA-5 CRITICAL
CIS-1.2 Usuario IAM sin MFA habilitado CIS AWS 1.2 / NIST SP 800-53 IA-5 HIGH
CIS-1.3 Credenciales IAM sin uso durante más de 90 días no deshabilitadas CIS AWS 1.3 / NIST SP 800-53 AC-2 HIGH
CIS-1.5 Política de contraseñas IAM: longitud mínima inferior a 14 CIS AWS 1.5 / NIST SP 800-63B §5.1.1 MEDIUM
CIS-2.1.5 Bucket S3 sin bloqueo de acceso público habilitado CIS AWS 2.1.5 / NIST SP 800-53 AC-3 HIGH
CIS-2.2.1 Bucket S3 sin cifrado en el lado del servidor habilitado CIS AWS 2.2.1 / NIST SP 800-53 SC-28 MEDIUM
CIS-3.1 CloudTrail no habilitado en todas las regiones AWS CIS AWS 3.1 / NIST SP 800-53 AU-2 CRITICAL
CIS-3.7 Ficheros de log de CloudTrail no cifrados con una CMK de KMS CIS AWS 3.7 / NIST SP 800-53 AU-9 MEDIUM
CIS-5.1 El grupo de seguridad VPC por defecto permite todo el tráfico entrante o saliente CIS AWS 5.1 / NIST SP 800-53 SC-7 HIGH
CIS-5.2 Puerto SSH 22 abierto a 0.0.0.0/0 en un grupo de seguridad CIS AWS 5.2 / NIST SP 800-53 SC-7 CRITICAL
CIS-GD-1 GuardDuty no habilitado en la región auditada AWS Well-Architected SEC 1 / NIST SP 800-53 SI-4 HIGH

Historial de versiones

Versión Cambios principales
v1.1.0 Informe de cliente VSL (HTML + PDF) vía el módulo compartido vampsec_report: --report-html/--report-pdf + --client/--engagement/--auditor. La tabla comparativa lo anunciaba; ahora la CLI lo entrega.
v1.0.1 README bilingüe (EN/ES)
v1.0.0 Primera versión: CIS AWS Foundations Benchmark Level 1, 71 controles, 8 módulos, SigV4 nativo, aiohttp asíncrono

© VampSecure Studios — VampSecure Labs Security Research Division
Uso exclusivo en auditorías autorizadas. El uso no autorizado es ilegal.

Metadata

Release files for vamp-aws-audit 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vamp-aws-audit 1.1.1
File Size Uploaded Provenance
vamp_aws_audit-1.1.1.tar.gz 39.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for vamp-aws-audit 1.1.1
File Interpreter ABI Platform
vamp_aws_audit-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 69.8 kB

Release files / vamp_aws_audit-1.1.1.tar.gz

Download URL vamp_aws_audit-1.1.1.tar.gz
Size 39.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8a50b7f6fc70fe4ca4cda4d833f47e2f6b04fcba28f0f8a8cb2a7839777749b9
BLAKE2b-256 checksum
How to use checksums
7a27aae1236682ec7f102fa3399bf5554db37e75d26c8a39669480bb5b0de783
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / vamp_aws_audit-1.1.1-py3-none-any.whl

Download URL vamp_aws_audit-1.1.1-py3-none-any.whl
Size 30.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77cda58408687400ec5180583356e855a918c007119059780c3b825ff452e18c
BLAKE2b-256 checksum
How to use checksums
fb80ea440a97553e4f037094e2e865b28548508df1e75656c7275ffed23e92fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for vamp-aws-audit 1.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page