Skip to content
Conduit

skill

security-atlas

Open-source replacement-grade GRC platform — architecture ideation canvas

mgoodric/security-atlascommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/mgoodric/security-atlas itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 25, 2026

security-atlas

License: Apache 2.0 CI codecov Latest release

One open-source, self-hosted platform for your whole security program — compliance and audit, risk, third-party, policy, evidence, and board reporting — instead of a dozen spreadsheets and single-purpose tools.


What is security-atlas?

security-atlas is a GRC platform — Governance, Risk, and Compliance — that a security team runs as the single system of record for its program. It replaces the usual sprawl: evidence in screenshots and spreadsheets, a risk register in Excel, a separate vendor-review tracker, policy PDFs on a shared drive, and a SaaS compliance tool that holds your data and gets expensive at renewal.

You host it yourself, so your evidence, risk data, and audit trail never leave your control. It is Apache-2.0 open source — no paid edition, no features locked behind a license tier.

The core idea: describe a control once, and satisfy every framework it maps to. Most tools make you re-create the same control separately for SOC 2, then ISO 27001, then PCI. security-atlas keeps one set of controls and crosswalks each to the frameworks it satisfies — built on the Secure Controls Framework (SCF), an open catalog of ~1,400 controls already mapped to 200+ frameworks. Adding a framework becomes mostly mapping, not re-work.

What it covers

security-atlas spans the disciplines a security program runs day to day — not just audit prep:

DisciplineWhat the platform does
Compliance & audit managementOne control catalog crosswalked to SOC 2, ISO 27001, NIST CSF, PCI DSS, HIPAA, and GDPR. A dedicated auditor workspace with evidence sampling, control walkthroughs, and reviewer comments. Export to OSCAL — the NIST open standard — as SSP, Assessment Plan, Assessment Results, and POA&M.
Evidence & continuous control monitoringRead-only connectors pull evidence from the systems you already run (AWS, GitHub, Okta, GCP, Azure, Kubernetes, osquery, and more). Manual evidence — a signed policy, a meeting note — is first-class. Per-control freshness and drift tracking show when a control quietly stops passing.
Risk managementA risk register with inherent-vs-residual scoring, a treatment lifecycle (mitigate / transfer / accept / avoid), and links from each risk to the controls that address it — organized as a tier that rolls up your org hierarchy (see below).
Third-party / vendor riskA vendor register, recurring vendor reviews with a review-due burndown, and intake for the security questionnaires your own customers send you.
Policy & exception managementA policy library with acknowledgment tracking, an exception workflow (request → approve → active → auto-expire, with compensating controls and a hard expiry cap), and Action Plans for tracking remediation commitments to closure.
Trust & questionnairesAnswer inbound security questionnaires from one place, with AI-assist that drafts answers grounded in your actual evidence and policies (every suggestion cited; see the AI boundary below).
Metrics & board reportingKPI and metric dashboards for program health, plus first-class board pack generation — the quarterly security update for leadership, built from real program data rather than hand-assembled slides.
Identity, access & multi-tenancySign-in through your existing IdP (Okta, Entra ID, Google) over OIDC, role-based and attribute-based access control, and multi-tenant isolation enforced in the database itself — not just in application code.

What makes it different

A few things security-atlas does that most GRC tools don't:

  • One control, many frameworks — for real. Controls are never duplicated per framework. Each maps to the requirements it satisfies through a shared SCF reference, so a single control can answer SOC 2 CC-series, an ISO 27001 Annex A control, and a PCI requirement at once. Add a framework and you are mostly mapping, not rebuilding.

  • A tiered, methodology-aware risk register. Risks roll up through your org hierarchy (a division's risk posture aggregates from its teams), carry both inherent and residual scores, and enforce a treatment discipline — marking a risk mitigated requires linking the controls that mitigate it; marking it accepted requires an explicit accept-until date. Scoring ships with NIST SP 800-30 and a qualitative 5×5 today, with FAIR, CIS RAM, and ISO 27005 modeled for future support. Most tools give you one flat 5×5 grid and a spreadsheet export.

  • An append-only evidence ledger you can replay. Evidence is never overwritten or deleted — it is an immutable ledger. Ingestion (recording evidence) and evaluation (scoring controls against it) are separate stages, so a bug in scoring can never corrupt the underlying record, and you can reconstruct exactly what was true on any past date.

  • Frozen audit periods. When you freeze an audit period, the auditor samples from a stable snapshot as of the freeze date, while your live program keeps moving underneath. No more "the evidence changed while the auditor was looking at it."

  • Framework-scoped applicability. A PCI cardholder-data environment, a HIPAA ePHI boundary, and a SOC 2 system boundary are not the same scope. security-atlas computes whether a control applies as the intersection of the control's applicability and the framework's scope — rather than pretending your whole estate is in scope for everything.

  • Remediation modeled precisely. An Exception (accepted non-compliance with compensating controls and a fixed expiry) is a distinct object from an Action Plan (a forward-looking remediation with milestones, exported as an OSCAL POA&M). Most tools collapse both into one "issue," which is exactly what pushes teams back to a spreadsheet.

  • Private, auditable AI-assist. AI features run on a local model by default — nothing leaves your deployment. Every AI suggestion (a questionnaire answer, a board-narrative section, a gap explanation) carries mandatory citations to the specific evidence or policy behind it, numeric claims are checked against the source data, and nothing is published without one-click human approval. No hallucinated audit answers.

How it compares

Most teams choose a compliance tool from one of two categories. Here is where security-atlas sits — including the trade-offs, so you can judge the fit honestly:

DimensionSaaS compliance tools (e.g. Vanta, Drata)Enterprise GRC suites (e.g. OneTrust, Archer)security-atlas
Where it runsVendor-hosted SaaSVendor-hosted or licensed enterprise installYou self-host — a single VM up to Kubernetes
Where your evidence livesThe vendor's cloudThe vendor's cloud or your enterprise estateYour infrastructure only
Cost modelAnnual subscription, commonly scaling with frameworks + headcountEnterprise licensingApache-2.0 open source — no license fee, no paid tier
Adding a frameworkMore subscription and per-framework setupA configuration projectMostly crosswalk mapping — one control satisfies many frameworks (SCF)
Data portabilityExport varies by vendorVaries by vendorOSCAL in and out (the NIST open standard)
BreadthFocused on audit / compliance automationBroad GRC, often heavy to operateAudit, risk, vendor, policy, evidence, and board reporting in one app

security-atlas is the right fit when you want to own your data and your control graph, run a broad program from one place, and avoid a renewal cliff. The honest trade-off: it is not a managed service — there is no vendor SOC to call and you run your own upgrades and backups. If you want zero-ops SaaS and don't mind vendor-hosted evidence, a hosted tool is the better choice.

Who it's for

Built first for the solo security leader at a 50–150-person company who runs the entire program alone — risk register, board reporting, SOC 2, vendor reviews, policies, exceptions — and whose own customers scrutinize how they handle security. The goal is concrete: run your next SOC 2 audit out of security-atlas and build your next board pack from it, without reaching for a spreadsheet to fill a gap. It scales up from there to a small security team.

Project status

security-atlas is a community open-source project under the Apache 2.0 license. v1 is complete and operator-grade; active v2 development continues (deeper PCI/HIPAA and privacy workflows are on the roadmap). There is no hosted SaaS from the project owners and no paid edition with locked-away features — you run the whole thing yourself.

For what shipped and when, see the latest release and CHANGELOG.md. The governance model, funding posture, and succession plan live in GOVERNANCE.md. The full design rationale — architecture invariants, the anti-patterns the project rejects, and the AI-assist boundary — lives in the architecture canvas and CLAUDE.md.


Screenshots

Captured from the running app against the hermetic demo fixtures (fixtures/readme-demo/). Run ATLAS_DEMO_SEED=1 just refresh-screenshots to regenerate them. The capture pipeline refuses to run unless ATLAS_DEMO_SEED=1 is set and the upstream HTTP target is loopback / RFC1918 private (an information-disclosure safety gate; every captured PNG is public forever once the README merges). Light and dark variants below; the page selects per prefers-color-scheme.

Control detail: framework crosswalks

One control mapped to every framework requirement it satisfies — SOC 2, ISO 27001, and more — through a single shared SCF reference, instead of a duplicated control per framework.

Audit workspace: frozen audit period

The auditor's surface. Period header with frozen-at timestamp; sampling, walkthrough, and comments tabs per control.

Board pack preview: the quarterly artifact

The leadership-facing report. Templated narrative per section, per-section approval, frozen on publish.


Install

# clone
git clone https://github.com/mgoodric/security-atlas.git
cd security-atlas

# bring up local Postgres + apply migrations
just db-up
just migrate-up

# build everything
just build

Detailed local dev setup, prerequisites, and the full just recipe surface live in CONTRIBUTING.md. For a production self-host walkthrough (docker-compose, service roles, backups), see docs/SELF_HOSTING.md.

Your first sign-in (self-host)

The platform mints a one-time bootstrap admin token at startup. The /login page detects fresh-install state and shows three orthogonal ways to find it:

  • docker-compose: docker compose logs atlas 2>&1 | grep BOOTSTRAP_TOKEN
  • Helm: kubectl logs deploy/atlas --tail=200 2>&1 | grep BOOTSTRAP_TOKEN
  • Filesystem: cat ${ATLAS_DATA_DIR:-/var/lib/atlas}/bootstrap-token (mode 0600)

The bootstrap-token file is deleted atomically on first successful sign-in. If you get stuck (token rolled out of the log buffer; the file was already consumed but no session was established), see the first-time login troubleshooting page; it documents the atlas-cli credentials issue --reset-bootstrap --force recovery path.


Quickstart: first evidence in 5 minutes

# 1. start the platform locally
just db-up && just migrate-up
export DATABASE_URL_APP="postgres://postgres:postgres@localhost:5432/security_atlas?sslmode=disable"
go build -o ./bin/ ./cmd/atlas ./cmd/atlas-cli
./bin/atlas &

# 2. push a hello-world evidence record (the CLI speaks gRPC on :50051)
export SECURITY_ATLAS_ENDPOINT=localhost:50051
export SECURITY_ATLAS_TOKEN="<a credential from \`atlas-cli credentials issue\`>"
./bin/atlas-cli evidence push --insecure \
  --kind hello.world.v1 \
  --control CTL-001 \
  --scope '{"environment":"dev"}' \
  --observed-at "$(date -u +%FT%TZ)" \
  --result pass \
  --payload '{"message":"first record"}' \
  --idempotency-key quickstart-1 \
  --actor-id quickstart

# 3. read it back over the HTTP API
curl -fsS http://localhost:8080/v1/evidence \
  -H "Authorization: Bearer $SECURITY_ATLAS_TOKEN"

just build-go runs go build ./... as a compile check — it does not write binaries. Use the explicit go build -o ./bin/ above (or go run ./cmd/atlas-cli) when you want something to execute.

For a connector-driven walkthrough (AWS S3 encryption posture, GitHub branch-protection, osquery host posture), see docs/SELF_HOSTING.md.

Verifying your install

The build version, commit, and build time are baked into the binary at release time and surface in three places. All three report the same value (single source of truth: Go ldflags).

# Server binary: JSON, suitable for scripts
curl -s http://localhost:8080/v1/version

# CLI: human-readable banner
./bin/atlas-cli version

# Docker image: OCI image annotations
docker inspect ghcr.io/mgoodric/security-atlas:latest \
  --format '{{ index .Config.Labels "org.opencontainers.image.version" }}'

The same version also renders in the bottom-right of every page in the web UI; click the trigger to expand a small panel showing commit, build_time, and go_version. No phone-home; no "check for updates". The value is read once at app boot and cached for the session.


Documentation


Authentication

security-atlas authenticates request traffic via an internal OAuth 2.0 Authorization Server that issues short-lived JWT access tokens carrying the tenant in-claim (RFC 9068 JWT Profile + RFC 8693 Token Exchange for tenant switching). This is the live auth mechanism today — the JWKS endpoint (/.well-known/jwks.json), OIDC discovery (/.well-known/openid-configuration), and the grant flows (authorization-code + PKCE for the browser, device-code for the CLI, client-credentials for services) are all shipped.

The Authorization Server layers on an OIDC relying party: the relying party authenticates the human against your external IdP (Okta, Entra ID, Google, etc.); the AS layer mints the atlas JWT. Two roles, one server process — security-atlas is not itself an IdP. The architectural commitment is captured in ADR-0003; operator setup lives in the OAuth grants and OIDC setup guides.


Assistant access (MCP)

security-atlas ships an MCP (Model Context Protocol) server — atlas-mcp — so your security team can query and update the program from an AI assistant (Claude Desktop, Claude Code, or any MCP client) instead of clicking through the UI. Ask "what are my top risks in treatment?" or "which controls have stale evidence?" and the assistant answers from your live data.

  • Read tools cover controls, risks, evidence, audit periods, policies, vendors, exceptions, and action plans — scoped to your tenant, with the same row-level isolation as the rest of the platform. A few ready-made operator skills wrap them into one-command workflows (risk briefing, evidence-freshness sweep, audit-readiness snapshot).
  • Write tools (create a risk, update a control's state, push evidence, change a risk's treatment) never mutate your data unattended. Each files a proposal that a human approver must confirm — in the assistant via confirm_write, or with the Approve button in the web UI — and that boundary is enforced at the database layer. An AI cannot publish an audit-binding change on its own.
  • The assistant authenticates with a normal atlas bearer token and sees only what that credential is allowed to see.

Status: experimental — the tool surface is in soak and may change; pin your MCP client to a specific atlas-mcp version. Full setup (client config for Claude Desktop / Claude Code, token handling, the complete tool list, and the approval flow) is in the MCP server guide and cmd/atlas-mcp/README.md.


Security

security-atlas treats security as a first-class concern. The project ships with:

  • Reporting channel: see SECURITY.md for the private vulnerability disclosure process and response timelines. Please do not open a public issue for a security finding.
  • Pipeline hardening: CodeQL static analysis (Go + JS/TS), GitGuardian secret scanning, and Dependabot version-bump alerts run on every PR.
  • Dependency vulnerability scanning: Go · govulncheck (Go call-graph-aware CVE detection), Frontend · npm audit (runtime-shipped JS deps in web/), and Container · Trivy scan (OS-package CVEs in the built atlas image). All three fail on HIGH/CRITICAL; reports upload as workflow artifacts. These complement Dependabot: Dependabot opens PRs when an upgrade is available; these flag known CVEs on the current version when no upgrade exists yet.
  • Hardening headers: HSTS / CSP / X-Frame-Options / X-Content-Type-Options / Referrer-Policy applied on every response. See internal/api/securityheaders/.
  • Audit reports: maintainer-led security audits live under docs/audits/. The first-pass audit is 2026-Q2-security-audit.md.
  • Audit cadence: quarterly scheduled review, plus an additional audit after any major change to authentication, authorization, middleware, or evidence-ingestion code paths. First-pass audits are not a substitute for third-party penetration testing; they catch the high-yield patterns automated scanners miss.
  • Remediation tracking: actionable findings from each audit are filed as discrete remediation slices under docs/issues/ and tracked through the normal review/merge process.

Contributing

See CONTRIBUTING.md for dev setup, the Conventional Commits convention, and the DCO sign-off requirement.

By participating in this project you agree to abide by the Code of Conduct.

Security issues: please do not open a public issue. See SECURITY.md for the private disclosure channel.


License

Apache License 2.0. See LICENSE.

SPDX-License-Identifier: Apache-2.0

↑↓ navigate openesc close