Kexa.io - Open-Source IT Security and Compliance Scanner
Open-source multi-cloud security and compliance verification tool. Monitors AWS, Azure, GCP, and OCI with instant alerting and low infrastructure overhead.
TL;DR
TL;DR: Kexa.io is an open-source multi-cloud security and compliance scanner that detects configuration drift and infrastructure misconfigurations across AWS, Azure, GCP, and OCI — with a simple rules engine and no heavy infrastructure overhead.
Source and Accuracy Notes
- Official site: https://kexa.io
- GitHub: https://github.com/4urcloud/Kexa (MIT license, 350+ stars)
- Docs: https://docs.kexa.io
What Is Kexa.io?
Kexa.io is an open-source infrastructure verification and compliance tool designed for DevOps and security teams managing multi-cloud environments. It focuses on catching configuration errors and compliance violations before they reach production, using a lightweight rules engine that runs as a single binary.
Unlike heavyweight CSPM platforms, Kexa takes a simplicity-first approach: define checks as simple configuration rules, run the binary against your cloud accounts, and get structured alerts for any violations.
The tool supports four major cloud providers out of the box: AWS, Azure, Google Cloud Platform, and Oracle Cloud Infrastructure. It can also monitor GitHub organizations for security misconfigurations.
Setup Workflow
Step 1: Install Kexa
Kexa runs as a single binary. Install via the official install script:
# Linux/macOS
curl -sSL https://get.kexa.io | bash
# Or download the binary directly from GitHub releases
# https://github.com/4urcloud/Kexa/releases
Step 2: Configure Cloud Credentials
Kexa uses environment variables or a credentials file for each provider:
# AWS
export AWS_ACCESS_KEY_ID="your_key_id"
export AWS_SECRET_ACCESS_KEY="your_secret_key"
export AWS_REGION="us-east-1"
# Azure
export AZURE_SUBSCRIPTION_ID="your_subscription_id"
export AZURE_TENANT_ID="your_tenant_id"
export AZURE_CLIENT_SECRET="your_client_secret"
# GCP
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"
# OCI
export OCI_TENANCY_OCID="your_tenancy_ocid"
export OCI_USER_OCID="your_user_ocid"
export OCI_FINGERPRINT="your_fingerprint"
export OCI_PRIVATE_KEY_PATH="/path/to/private_key.pem"
Step 3: Define Your First Rules
Kexa rules are defined in YAML files. Create a rules.yaml:
rules:
- name: S3-bucket-should-not-be-public
provider: aws
resource: s3
condition: public_access_blocked == true
severity: high
- name: RDS-should-have-backup-enabled
provider: aws
resource: rds
condition: backup_retention_period > 0
severity: medium
- name: VM-should-not-have-public-IP
provider: azure
resource: virtualmachine
condition: public_ip == null
severity: high
Step 4: Run a Scan
# Scan all configured providers
kexa scan --config ./rules.yaml
# Scan specific provider
kexa scan --provider aws --config ./rules.yaml
# Output in JSON for automation
kexa scan --config ./rules.yaml --format json --output results.json
Step 5: Set Up Continuous Monitoring
For continuous monitoring, run Kexa on a schedule via cron or a lightweight scheduler:
# Run every hour and alert on violations
0 * * * * /usr/local/bin/kexa scan --config /opt/kexa/rules.yaml --format json | \
jq '.violations[] | select(.severity == "high")' | \
mail -s "Kexa High Severity Alert" [email protected]
Deeper Analysis
Rule Engine Architecture
Kexa’s rule engine evaluates cloud resource configurations against YAML-defined conditions. Rules are evaluated locally — there is no data sent to external servers. The rules themselves are stored in a Git repository, making version control and team collaboration straightforward.
The rule format supports comparison operators (==, !=, >, <, >=, <=), boolean logic (and, or, not), and nested resource checks. For AWS, you can check resource properties like s3.bucket_public_access_blocked, rds.backup_retention_period, or iam.password_policy.min_length.
Alerting Options
Kexa supports multiple alerting channels:
- Email via SMTP or sendmail
- Slack webhook integration
- PagerDuty for incident management
- Webhooks for custom integrations
- JSON/STDOUT for log aggregation pipelines
The alerting configuration is defined in a separate alerts.yaml:
alerts:
slack:
webhook_url: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
severity_threshold: "medium"
email:
smtp_host: "smtp.example.com"
smtp_port: 587
from: "[email protected]"
to: ["[email protected]", "[email protected]"]
Multi-Account and Multi-Region Support
For organizations managing multiple cloud accounts, Kexa supports scanning across all of them in a single run. Configure an accounts.yaml file:
accounts:
- name: production
provider: aws
regions: ["us-east-1", "eu-west-1"]
credentials: env # reads from environment
- name: staging
provider: aws
regions: ["us-east-1"]
role_arn: "arn:aws:iam::123456789:role/KexaScanner"
Kexa can assume cross-account IAM roles, making it suitable for AWS Organizations setups where you have a dedicated security account scanning member accounts.
Self-Hosting Requirements
Since Kexa runs as a single binary, self-hosting is straightforward:
- Binary only — no container orchestration required
- Minimal RAM — scans run in-memory, ~100MB baseline
- Stateless — results can be streamed to any storage backend
- No database — for basic scans, output goes directly to STDOUT or files
This makes it practical to run on a small VPS, a Docker container, or even a developer workstation for local testing.
Practical Evaluation Checklist
- [ ] Binary installs and runs without container runtime
- [ ] Rules YAML is readable and team-friendly
- [ ] Scan completes across one AWS account in under 60 seconds
- [ ] JSON output is structured and parseable
- [ ] High-severity violations surface in output
- [ ] Slack alerting fires correctly with formatted message
- [ ] Cross-account role assumption works for AWS Organizations
- [ ] Multi-provider scan runs sequentially without credential conflicts
- [ ] CLI help text is accurate and up to date
Security Notes
Kexa executes read-only API calls against your cloud providers to inspect resource configurations. It does not modify any resources or create new ones. The binary requires read-only IAM permissions (or equivalent for other providers).
No telemetry is sent externally by default. All scan data stays on the machine running the binary. If you use the GitHub integration, Kexa needs a GitHub token with read access to your organization repositories.
Recommended IAM policy for AWS reads as a starting point:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudtrail:LookupEvents",
"config:BatchGetResourceConfig",
"config:ListDiscoveredResources",
"s3:GetBucketPublicAccessBlock",
"s3:GetAccountPublicAccessBlock",
"rds:DescribeDBInstances",
"ec2:DescribeInstances",
"iam:GetAccountPasswordPolicy"
],
"Resource": "*"
}
]
}
FAQ
Q: Which cloud providers does Kexa support? A: AWS, Azure, GCP, and Oracle Cloud Infrastructure are officially supported. GitHub organization scanning is also available for security-relevant repository settings.
Q: Can I self-host Kexa? A: Yes. Since it is a single binary with no external dependencies, you can run it on any Linux host, VPS, or container. There is no managed cloud offering required.
Q: How are rules managed? A: Rules are defined in YAML files stored in your own repository. This means you get full version control, pull request reviews, and branching just like any other code. There is no rule management UI or external service.
Q: What is the difference between Kexa and cloud-native tools like AWS Config or Azure Policy? A: Kexa is provider-agnostic — one ruleset works across all four supported clouds. Cloud-native tools like AWS Config are tied to a single provider and often require additional setup to aggregate findings across multiple accounts. Kexa also has no lock-in to a specific cloud’s ecosystem.
Q: Does Kexa detect drift from a known-good state? A: Yes. You define the desired configuration as rules, and Kexa reports any resource that deviates from that desired state on each scan. This makes it effective for drift detection in addition to compliance checking.
Q: How fast is a typical scan? A: For a single AWS account with moderate resource counts (under 500 resources), scans typically complete in 30 to 90 seconds. The speed depends on API rate limiting and the number of resources being evaluated.
Conclusion
Kexa.io fills a specific niche: teams that want multi-cloud compliance checking without deploying a full CSPM platform. The single-binary deployment, plain YAML rules, and provider-agnostic design make it particularly attractive for small to mid-size teams or for use as a supplement to existing security tooling.
If you are managing infrastructure across more than one cloud provider and want a lightweight way to enforce configuration policies, Kexa is worth evaluating. The rules engine is human-readable, the alerts are actionable, and the footprint is minimal.
Try it at https://kexa.io or browse the GitHub releases at https://github.com/4urcloud/Kexa.
Related Posts
dev-tools
Automotive Skills Suite for AI Engineering
Evaluate Automotive Skills Suite for APQP, ASPICE, HARA, safety-plan, and DIA workflows with setup notes, governance risks, and SME review guidance.
5/28/2026
dev-tools
awesome-agentic-ai-zh Roadmap Guide
Explore awesome-agentic-ai-zh as a Chinese agentic AI learning roadmap, with setup notes, track selection, study workflow, and evaluation guidance.
5/28/2026
dev-tools
Baguette iOS Simulator Automation Guide
Set up Baguette for iOS Simulator automation, web dashboards, device farms, gesture input, streaming, and camera testing with Xcode caveats.
5/28/2026