Version 1.4 · Updated 2026-09-12 · FedRAMP ID FR2619254906 · Machine-readable: scg.json · Trust Center home
Recommendations for securely operating VulcanGov for your agency. VulcanGov is delivered secure-by-default: the sections below describe the shipped configuration (verified against the deployed code and live identity-provider policy) and the few choices your agency makes.
The shipped configuration is the recommended configuration: two-factor enforcement, no public links, no user uploads, a 30-minute idle timeout, deny-by-default access, and privileged rights granted only by group membership with a per-request check are the state of the deployment as provisioned — not settings an administrator must apply. The one recommended action for agency administrators is factor choice: enroll users in phishing-resistant authenticators (Okta Verify / passkeys) rather than email one-time-passcode.
The configuration exceptions this guide has disclosed since v1.1, each with its current state and a date (SCG-CSO-SDF). Measured 2026-09-12 against the application code, the identity provider and the provider's 2026-09-11 control measurement; record of measurement: scg-tracked-items-2026-09-12.md, sha256 9b42f80297e5680ec0dfde1a6b003110c0aadd2ff9a6eeb35d4a1c8811ff2440 (available through the FedRAMP Security Inbox on request).
| Id | Item | State | Statement |
|---|---|---|---|
| SDF-1 | Provider administrative lane granting on email domain alone | closed 2026-08-21 | The secondary scoped-access lane that granted provider administrative access on email domain alone was brought under the same verified provider-organization membership check as the primary lane in code on 2026-08-21 (regression test asserts the denial), and has been in the served production image since no later than the 2026-09-04 build, verified serving 2026-09-11. Consequence on the government tenant: no account satisfies the in-application provider full-administrator check; provider administrative access is break-glass only (break-glass register). Evidence: scg-tracked-items-2026-09-12.md item 1, sha256 9b42f80297e5680ec0dfde1a6b003110c0aadd2ff9a6eeb35d4a1c8811ff2440 |
| SDF-2 | Email one-time-passcode retirement | open-dated 2026-12-15 | Commitment: phishing-resistant multi-factor authentication for all users by 2026-12-15, then removal of the email factor as an authentication method (scoped by method and identity provider) after the enrollment campaign. Baseline 2026-09-11: the okta_email authenticator is active; 59 of 73 active users hold no phishing-resistant factor; 0 privileged users hold no phishing-resistant factor. Sequencing: trust the agency identity provider's MFA claim on both federations and prove a claim-less sign-in is refused (2026-10-15); every direct-identity-provider account enrolled in a phishing-resistant factor, break-glass first (2026-11-13); system-log proof that federated sign-ins no longer challenge email (2026-11-27); email removed as an authentication method and recorded in the next guide revision (2026-12-15). Evidence: scg-tracked-items-2026-09-12.md item 2, sha256 9b42f80297e5680ec0dfde1a6b003110c0aadd2ff9a6eeb35d4a1c8811ff2440 |
Machine-readable recommended secure defaults (SCG-ENH-MRG / SCG-ENH-CMP). Each entry names one security setting by a stable id, the recommended value, and how it is enforced. comparator 'equals' means a current value is compliant when it equals 'recommended'; 'review' means the guide states a posture but no single value is correct for every agency, so the current value is surfaced for the administrator to judge and no automatic verdict is given. The VulcanGov application exports a tenant's current values and compares them against this list at GET /api/admin/groups/{groupId}/security-settings (see settingsApi). Deployment-scope settings are identical for every tenant and are the shipped state; tenant-scope settings are the choices an agency administrator makes.
| Setting id | Scope | Recommended | Comparator | Enforced by | Statement |
|---|---|---|---|---|---|
authentication.twoFactorEnforced | deployment | true | equals | identity-provider sign-on policy (catch-all rule) | Two-factor authentication is enforced by policy for direct application sign-ins; it is not a per-user option. Agency-federated sign-ins carry the factor at the agency identity provider. |
authentication.reauthenticationHours | deployment | 12 | equals | identity-provider sign-on policy | Sign-on re-authentication is required every 12 hours. |
authentication.phoneSmsFactorsDisabled | deployment | true | equals | identity-provider authenticator policy | Phone and SMS factors are disabled deployment-wide. |
authentication.securityQuestionsDisabled | deployment | true | equals | identity-provider authenticator policy | Security questions are disabled deployment-wide. |
authentication.hostedLoginOnly | deployment | true | equals | application code (hosted-login gate: every embedded credential lane refuses unless explicitly enabled) | Sign-in is the hosted identity-provider flow only; no embedded password or email-code lane is accepted by the application. |
authentication.agencyFederation | tenant | (review; see statement) | review | agency identity provider (configured by the provider on request) | If your agency federates, multi-factor enforcement moves upstream to your identity provider; keep it enforced there. The application does not measure identity-provider configuration; verify it at your IdP. |
sessions.idleTimeoutMinutes | deployment | 30 | equals | application session cookie (SESSION_INACTIVITY_TIMEOUT_SECONDS; the cookie lifetime is derived from the same value) | Idle sessions terminate after 30 minutes. |
sharing.publicShareLinksDisabled | deployment | true | equals | application code (hard-true predicate at the data-access choke points; not a configuration setting) | Public and anonymous share links are disabled. The sanctioned sharing path is in-app grants to named users, teams or groups. |
dataIngress.userFileUploadsMode | deployment | "admin-gated" | equals | build-time deployment mode (JUSTINIAN_USER_FILE_UPLOADS_MODE) | User file uploads are default-deny per user and require an explicit dual-consent administrative grant; the capability is never open by default or self-service. |
dataIngress.publicFileUploadsEnabled | deployment | false | equals | application code (hard-off; the anonymous portal has no identity to gate on) | No anonymous or public upload path exists. |
capabilities.disabled | deployment | ["cloud-files", "email", "web"] | equals | build-time capability floor (JUSTINIAN_DISABLED_CAPABILITIES) | General web access, mailbox integration and cloud-drive integrations are compiled out of the deployment for every user. |
web.managedWebSearchEnabled | deployment | (review; see statement) | review | runtime transport variable for the in-boundary managed search provider | Web search, where enabled, is the narrow managed in-boundary lane only (curated index, no arbitrary URL retrieval). The value is reported so an agency can see whether the lane is on. |
web.managedWebFetchEnabled | deployment | (review; see statement) | review | runtime transport variable for the co-located fetch sidecar | Single-page web fetch is enabled in production (2026-10-28) and goes through the provider-owned sidecar and fetcher with allowlist enforcement on both. The value is reported so an agency can see whether the lane is on; the per-chat Internet toggle and the account-level Web Fetch permission gate it. |
web.managedWebFetchAllowlist | deployment | [".gov", ".mil"] | equals | bedrock-proxy sidecar and fetcher service allowlist (enforced outside the application process) | Managed web fetch retrieves U.S. government and military domains only. |
audit.adminAuditTrailEnabled | deployment | true | equals | application code (every administrative grant, revoke and setting change writes an admin audit event with acting identity and timestamp) | Administrative actions are recorded in a durable audit trail available to the agency administrator and, on request, to assessors. |
tenant.administrators.count | tenant | (review; see statement) | review | agency administrator (grant / revoke via the access API) | Keep the number of agency administrators to the smallest workable set; review the list on a fixed cadence and treat a dormant administrator as a candidate for removal. |
tenant.administrators.nonActiveWithRights | tenant | 0 | equals | agency administrator (withdraw rights before disabling or deleting the account) | No suspended, deprovisioned or otherwise non-active account should still hold agency administrator rights. |
tenant.permissionModel.configured | tenant | true | equals | provider provisioning of the per-tenant permission groups; agency administrator assigns membership | Use the permission-group model so each administrator holds only the permissions the job needs. When no permission groups exist for a tenant, every agency administrator implicitly holds every permission. |
tenant.fileUploadGrants.count | tenant | (review; see statement) | review | agency administrator with manage_permissions (per-user grant) and the user's own settings toggle | Grant file uploads per named user only when the role needs it; the default is deny. |
tenant.contentExportEnabled | tenant | false | equals | provider staff (CISO) only, per tenant, audit-logged | Exporting prompt and response text to an external SIEM is a CUI-export decision; the default is disabled and the audit feed carries metadata only. |
tenant.featureGates.disabled | tenant | (review; see statement) | review | provider operations, per tenant, on the agency's request | Product features withheld from this tenant beyond the deployment floor. Reported so the agency can confirm the list matches what it asked for. |
tenant.siemDestinations.enabledCount | tenant | (review; see statement) | review | agency administrator with manage_api_clients | SIEM push destinations receive only this tenant's audit events; review that each enabled destination is still wanted. |
tenant.apiClients.activeCount | tenant | (review; see statement) | review | agency administrator with manage_api_clients | Audit-pull API clients are read-only and tenant-scoped; revoke clients no longer in use and prefer an expiry on every client. |
tenant.contractExpired | tenant | (review; see statement) | review | provider staff | Whether the tenant is in the contract-expired state (users can sign in but see a deactivation overlay). Reported for completeness. |
How to view, export, compare and adjust security settings programmatically (SCG-ENH-EXP, SCG-ENH-CMP, SCG-ENH-API). All routes are served by the VulcanGov application inside the FedRAMP boundary and require an authenticated VulcanGov session (hosted identity-provider sign-in with two-factor enforced) holding agency administrator rights for the group; provider administrators may read any group. A request for a group outside the caller's administrative scope is refused (HTTP 403). Every export is recorded in the admin audit trail.
Authentication. Browser session (the same session an agency administrator uses for the admin console). Token-authenticated API clients for these routes are a roadmap item; the read-only audit-pull clients (manage_api_clients) do not reach these routes.
| Method | Path | Purpose |
|---|---|---|
| GET | /api/admin/groups/{groupId}/security-settings | export (SCG-ENH-EXP) and comparison against these recommended defaults (SCG-ENH-CMP) application/json: exportedAt, groupId, group, scgVersion, settings (every setting in recommendedDefaults with its current value, scope, basis and source), recommended, comparison [{setting, current, recommended, comparator, matches}], members (ids only; add ?includeEmails=1 for addresses) |
| Method | Path | Requires | Adjusts |
|---|---|---|---|
| PATCH | /api/admin/users/{memberId}/access | manage_permissions (rights and upload grant), manage_deactivation (expiry) | agency administrator rights, per-user upload grant, per-user access expiry, per-user permission-group membership |
| POST / DELETE | /api/admin/groups/{groupId}/api-clients[/{clientId}] | manage_api_clients | audit-pull API clients |
| POST / PATCH / DELETE | /api/admin/groups/{groupId}/splunk-destinations[/{destinationId}] | manage_api_clients | SIEM push destinations |
| PATCH | /api/admin/groups/{groupId}/deactivation | manage_deactivation | tenant-wide deactivation date |
| PUT | /api/admin/groups/{groupId}/content-export | provider staff (CISO) only | prompt/response content export to SIEM (tenant.contentExportEnabled) |
Deployment-scope settings are code- or policy-enforced and identical for every tenant; they have no adjust path by design. Feature gates (tenant.featureGates.disabled) and agency identity-provider federation are changed by the provider on the agency's request through the FedRAMP Security Inbox.
Reference with request/response examples: justinian-govcloud repository, docs/gov-parity/admin-security-settings-api.md (agency customers may request a copy through the FedRAMP Security Inbox).
| Version | Date | Note |
|---|---|---|
| 1.4 | 2026-09-12 | Adds the 'Privileged accounts' section — the Recommended third element of SCG-CSO-RSC: how agency scoped-administrator and permission-bearing accounts and the provider's engineering and service identities are accessed, configured, operated and decommissioned, and which security-related settings only they can operate, derived from the deployed application code (seven administrative and seven capability permissions, per-request server-side membership check, audit-before-write trail, deactivation dates, API access clients) and the provider's daily control measurement, with an explicit list of what the section does not claim; the former 'Privileged accounts below top level' paragraph is superseded by it. Records the two tracked items disclosed since v1.1 with their state and dates (new trackedItems block): the provider administrative lane that granted on email domain alone was closed in code on 2026-08-21 and verified serving on 2026-09-11 — no standing provider-side full-administrator account exists in the government tenant and provider administrative access is break-glass only — and email one-time-passcode retirement is now a dated commitment (phishing-resistant MFA for all users by 2026-12-15; baseline 2026-09-11: 59 of 73 users without a phishing-resistant factor, 0 privileged). The Administrative access and Authentication sections state those closed and dated states. Adds the machine-readable recommendedDefaults block (24 settings with stable ids, recommended values and enforcement point) and the settingsApi section describing how to export a tenant's current security settings, compare them against these defaults, and adjust the adjustable ones (SCG-ENH-EXP, SCG-ENH-CMP, SCG-ENH-API; strengthens SCG-ENH-MRG). The three items previously listed as roadmap are delivered by the VulcanGov application's security-settings endpoint, which reads a vendored copy of this guide's recommendedDefaults; the two must be kept in sync and the application's CI checks the vendored copy against the published scg.json. This version is to be published when that endpoint is promoted to production, not before. Roadmap now carries the follow-on items only. |
| 1.3 | 2026-08-25 | Corrects the root-account statement in the top-level administrative accounts section before first publication. v1.2 described root multi-factor authentication as unenrolled and committed to enrolling it. That was wrong: AWS GovCloud (US) account roots have no console sign-in path and cannot hold access keys, so there is no root credential to enrol a factor on. The section now states the measured position — no root access key exists in any account, administration is entirely through federated identities — and explains the AccountMFAEnabled:0 reading an assessor will otherwise encounter without context. v1.2 was merged but never published, so no customer saw the incorrect commitment. |
| 1.2 | 2026-08-25 | Adds the 'Top-level administrative accounts' section required by SCG-CSO-RSC elements 1 and 2 — how top-level administrative accounts are accessed, configured, operated and decommissioned, and which security-related settings only they can operate, for both agency and provider administrators. Every provider-side figure was measured against the live identity provider and cloud control plane on 2026-08-25 rather than authored from documentation. Two open items are disclosed rather than omitted: AWS account root users do not yet have MFA enrolled (no root access keys exist in any account), and, at the time of drafting, provider Super Administrator identities remained on out-of-boundary mail domains. The latter was closed the same day: both such role assignments were removed and an unused administrator account on a retired domain was deprovisioned, leaving two Super Administrators, both in-boundary. The Authentication section's group-hygiene sentence was updated to match the live tenant after a non-production federation was deactivated. |
| 1.1 | 2026-08-20 | Authentication + data-ingress claims corrected to match the live tenant and code. 2FA enforcement stated with its two disclosed exceptions (agency-IdP federation, DAST service account) verified against the live Okta access policy — before/after evidence okta-signon-BEFORE-2026-08-20.json (sha 31f3c278) / okta-signon-AFTER-2026-08-20.json (sha 9e6127a2). Upload wording corrected from 'no admin permission' to 'admin-gated, default-deny, dual-consent'. Admin-surface scoped-access lane disclosed honestly as a tracked hardening item. |
| 1.0 | 2026-08-18 | Initial public release. Because the secure configuration is code-enforced rather than setting-based, the version history of this guide tracks the version history of the defaults. |