VulcanGov

VulcanGov Secure Configuration Guide

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.

Authentication

Top-level administrative accounts

Privileged accounts

Administrative access

Sharing

Sessions

Data ingress

Secure defaults

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.

Tracked items

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).

IdItemStateStatement
SDF-1Provider administrative lane granting on email domain aloneclosed 2026-08-21The 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-2Email one-time-passcode retirementopen-dated 2026-12-15Commitment: 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

Recommended secure defaults (machine-readable)

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 idScopeRecommendedComparatorEnforced byStatement
authentication.twoFactorEnforceddeploymenttrueequalsidentity-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.reauthenticationHoursdeployment12equalsidentity-provider sign-on policySign-on re-authentication is required every 12 hours.
authentication.phoneSmsFactorsDisableddeploymenttrueequalsidentity-provider authenticator policyPhone and SMS factors are disabled deployment-wide.
authentication.securityQuestionsDisableddeploymenttrueequalsidentity-provider authenticator policySecurity questions are disabled deployment-wide.
authentication.hostedLoginOnlydeploymenttrueequalsapplication 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.agencyFederationtenant(review; see statement)reviewagency 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.idleTimeoutMinutesdeployment30equalsapplication session cookie (SESSION_INACTIVITY_TIMEOUT_SECONDS; the cookie lifetime is derived from the same value)Idle sessions terminate after 30 minutes.
sharing.publicShareLinksDisableddeploymenttrueequalsapplication 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.userFileUploadsModedeployment"admin-gated"equalsbuild-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.publicFileUploadsEnableddeploymentfalseequalsapplication code (hard-off; the anonymous portal has no identity to gate on)No anonymous or public upload path exists.
capabilities.disableddeployment["cloud-files", "email", "web"]equalsbuild-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.managedWebSearchEnableddeployment(review; see statement)reviewruntime transport variable for the in-boundary managed search providerWeb 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.managedWebFetchEnableddeployment(review; see statement)reviewruntime transport variable for the co-located fetch sidecarSingle-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.managedWebFetchAllowlistdeployment[".gov", ".mil"]equalsbedrock-proxy sidecar and fetcher service allowlist (enforced outside the application process)Managed web fetch retrieves U.S. government and military domains only.
audit.adminAuditTrailEnableddeploymenttrueequalsapplication 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.counttenant(review; see statement)reviewagency 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.nonActiveWithRightstenant0equalsagency 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.configuredtenanttrueequalsprovider provisioning of the per-tenant permission groups; agency administrator assigns membershipUse 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.counttenant(review; see statement)reviewagency administrator with manage_permissions (per-user grant) and the user's own settings toggleGrant file uploads per named user only when the role needs it; the default is deny.
tenant.contentExportEnabledtenantfalseequalsprovider staff (CISO) only, per tenant, audit-loggedExporting 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.disabledtenant(review; see statement)reviewprovider operations, per tenant, on the agency's requestProduct features withheld from this tenant beyond the deployment floor. Reported so the agency can confirm the list matches what it asked for.
tenant.siemDestinations.enabledCounttenant(review; see statement)reviewagency administrator with manage_api_clientsSIEM push destinations receive only this tenant's audit events; review that each enabled destination is still wanted.
tenant.apiClients.activeCounttenant(review; see statement)reviewagency administrator with manage_api_clientsAudit-pull API clients are read-only and tenant-scoped; revoke clients no longer in use and prefer an expiry on every client.
tenant.contractExpiredtenant(review; see statement)reviewprovider staffWhether the tenant is in the contract-expired state (users can sign in but see a deactivation overlay). Reported for completeness.

Settings API: export, compare, adjust

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.

View, export and compare

MethodPathPurpose
GET/api/admin/groups/{groupId}/security-settingsexport (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)

Adjust

MethodPathRequiresAdjusts
PATCH/api/admin/users/{memberId}/accessmanage_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_clientsaudit-pull API clients
POST / PATCH / DELETE/api/admin/groups/{groupId}/splunk-destinations[/{destinationId}]manage_api_clientsSIEM push destinations
PATCH/api/admin/groups/{groupId}/deactivationmanage_deactivationtenant-wide deactivation date
PUT/api/admin/groups/{groupId}/content-exportprovider staff (CISO) onlyprompt/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).

Roadmap

Change history

VersionDateNote
1.42026-09-12Adds 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.32026-08-25Corrects 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.22026-08-25Adds 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.12026-08-20Authentication + 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.02026-08-18Initial 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.