# Security controls summary

> The controls in one table, linking to the detail.

Every row links to the page that describes the control in full. “Yours” means your account; “Atlantic’s” means LightHouse.

## Identity and access

| Control                                                                                                                                | Enforced in                                               | How to verify                                  |
| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ---------------------------------------------- |
| [Sign-in through your own identity provider](/security/api/#people-sign-in-through-your-identity-provider); no Atlantic-held passwords | Cloudflare Access and the LightHouse service (Atlantic’s) | Your identity provider’s sign-in log           |
| [A second factor for every person, checked twice; fails closed](/security/api/#a-second-factor-enforced-twice)                         | Edge and service (Atlantic’s)                             | `viewer.mfa.source` on `GET /api/v1/me`        |
| [Sessions at most 12 hours](/security/ui/#sessions)                                                                                    | Cloudflare Access (Atlantic’s)                            | Reload after the session length                |
| [Machine keys: read-only roles, one tenant, at most 365 days, stored as a hash](/security/api/#machines-a-key-and-a-service-token)     | LightHouse service (Atlantic’s)                           | The key at another tenant’s host answers `401` |
| [Four cumulative roles, checked on every route and tool](/security/api/#roles-and-least-privilege)                                     | LightHouse service (Atlantic’s)                           | `403 role_required` on a route above your role |
| [Guard rails your administrators cannot remove](/security/api/#roles-and-least-privilege)                                              | LightHouse service (Atlantic’s)                           | `422 guard_rail` naming the rule               |
| [No key may pay, raise a limit, approve or administer](/security/api/#what-a-machine-key-may-never-do)                                 | LightHouse service (Atlantic’s); your handler (yours)     | `403 person_required`                          |
| [Atlantic staff: at most `content_viewer`, and only if you allow it](/data-sovereignty/access/)                                        | LightHouse service (Atlantic’s)                           | `GET /api/v1/access/review`                    |
| [Break-glass flagged until your administrator next saves](/data-sovereignty/access/#break-glass)                                       | LightHouse service (Atlantic’s)                           | `break_glass: true` in your audit log          |

## Isolation and data

| Control                                                                                                                        | Enforced in                                            | How to verify                        |
| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------ |
| [Tenant taken from the hostname only](/security/api/#the-tenant-comes-from-the-hostname)                                       | LightHouse service (Atlantic’s)                        | A `client` parameter changes nothing |
| [Row-level security, forced on every tenant table](/security/api/#tenant-isolation-in-the-database)                            | The database (Atlantic’s)                              | Walk-through under NDA               |
| [Telemetry content-free by allow-list, on both sides](/data-sovereignty/#how-telemetry-stays-content-free)                     | Your engine (yours) and LightHouse intake (Atlantic’s) | Capture your egress                  |
| [Content read in place, signed, logged in your account](/security/architecture/#content-viewed-in-place)                       | Your content reader (yours)                            | Your reader’s log                    |
| [Content export off by default](/data-sovereignty/#content-export)                                                             | LightHouse (Atlantic’s)                                | `tier_c` on `GET /api/v1/me`         |
| [Report documents sealed under a key for your tenant alone](/data-sovereignty/where-everything-lives/)                         | LightHouse and AWS KMS (Atlantic’s)                    | Offboarding destroys the key         |
| [Data encrypted at rest; database private, across availability zones](/data-sovereignty/where-everything-lives/#the-telemetry) | AWS (Atlantic’s)                                       | Under NDA                            |
| [Export with a checksum manifest, at any time](/data-sovereignty/leaving/#export)                                              | LightHouse (Atlantic’s)                                | `POST /api/v1/exports`               |

## The engine, in your account

| Control                                                                                                              | Enforced in                                  | How to verify                               |
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------- |
| [The gateway is the only path to a model](/security/engine/#the-gateway-is-the-only-path-to-a-model)                 | Your gateway (yours)                         | Every call is a `model_call` record         |
| [Spending caps and kill switches, before every call](/security/engine/#caps-and-kill-switches)                       | Your gateway (yours)                         | `GET /api/v1/refusals`, `GET /api/v1/kills` |
| [Global inference profiles refused](/data-sovereignty/regions/#the-inference-geography-of-each-model-path)           | Your gateway (yours); cloud guardrail policy | Your policy cannot enable one               |
| [Personal data masked before inference](/security/engine/#personal-data-masked-before-inference)                     | Your gateway (yours)                         | Your policy’s `masking` section             |
| [The tool gate: run token, Cedar, scopes, the person’s own credential](/security/engine/#the-tool-gate)              | Your engine (yours)                          | `tool_denials_total`, by reason             |
| [Retrieved text fenced; injection signals counted](/security/mcp/#prompt-injection)                                  | Your engine (yours)                          | Screening counts in `GET /api/v1/refusals`  |
| [Approvals only as signed commands from a person](/security/mcp/#a-person-on-anything-that-acts)                     | Your engine and handler (yours)              | Other routes are refused and logged         |
| [No long-lived cloud keys](/security/engine/#no-long-lived-keys)                                                     | Your cloud’s identity service                | No IAM users or access keys in the stack    |
| [Nothing listens for Atlantic; connections opened from your side](/security/architecture/#what-runs-in-your-account) | Your network (yours)                         | Your firewall rules                         |

## Interfaces

| Control                                                                                              | Enforced in                                  | How to verify                        |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------ |
| [Nonce-based content security policy; no inline scripts](/security/ui/#content-security-policy)      | The portal (Atlantic’s)                      | The `Content-Security-Policy` header |
| [HSTS, `nosniff`, framing denied, referrer and permissions policies](/security/ui/#security-headers) | Portal and API (Atlantic’s)                  | `curl -sI`                           |
| [Branding as values, never CSS; images re-encoded](/security/ui/#branding-uploads)                   | LightHouse service (Atlantic’s)              | Upload an SVG with a script: refused |
| [MCP read only and stateless](/security/mcp/#read-only-deliberately)                                 | LightHouse service (Atlantic’s)              | `tools/list`                         |
| [Request bodies capped and read in chunks](/security/api/#rate-limits-and-request-sizes)             | LightHouse service (Atlantic’s)              | A 300 KB body is refused             |
| [Idempotency keys on commands; versions on settings](/security/api/#idempotency)                     | LightHouse service and database (Atlantic’s) | The same `command_id` twice          |
| [Append-only audit log](/security/api/#every-write-is-audited)                                       | The database (Atlantic’s)                    | `GET /api/v1/audit`                  |
| Per-key rate limits on the read API                                                                  |                                              | \[Coming]                            |
| OAuth sign-in on the MCP endpoint                                                                    |                                              | \[Coming]                            |

## Build and supply chain

| Control                                                                                                            | Enforced in                                       | How to verify                         |
| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------- | ------------------------------------- |
| [Secrets, keys and syntax checked on every commit](/security/supply-chain/#on-every-commit)                        | Atlantic’s repositories                           | Under NDA                             |
| [Secrets, SAST, IaC, dependency and Dockerfile scans in every pipeline](/security/supply-chain/#in-every-pipeline) | Atlantic’s CI                                     | Under NDA                             |
| [Images pinned by digest, non-root, no package installer](/security/supply-chain/#images)                          | Image builds                                      | Scan the image yourself               |
| [Signed telemetry: Ed25519, five-minute window, replay refused](/security/supply-chain/#signed-telemetry)          | Your deployment signs; LightHouse intake verifies | `deployment_keys` on `GET /api/v1/me` |
| [Portal tested on every change: CSP violations, accessibility, hostile input](/security/ui/#tests-on-every-change) | Atlantic’s CI                                     | Under NDA                             |
| [Red-team suite for Octy before a first pilot](/security/verify/#what-a-red-team-suite-covers-before-go-live)      | Atlantic’s CI and a live run                      | `GET /api/v1/evals`                   |
| An independent third-party penetration test report                                                                 |                                                   | Not yet available                     |

## Certifications

Atlantic holds no security certification today. LightHouse is **audit-ready**: each control above is enforced in code or in the platform, and each says how to verify it.

Source: https://docs.atlanticagenticlabs.com/trust/security-controls/
