Prerequisites
- At least one organization with online hosts running the Go agent v1.7.0 or later
- User role with compliance.view permission for read access
- User role with compliance.manage permission for creating policies, triggering scans, and managing exceptions
- Hosts must have an active agent installed and a status of "online" or "maintenance"
Understanding compliance frameworks
SPOG ships system templates for three compliance frameworks. Each template contains a set of checks that the agent evaluates against the host's configuration.
| Framework | Code | Description |
|---|---|---|
| CIS Level 1 | cis_level1 | Baseline security configuration. Recommended for all hosts. Minimal performance impact. |
| CIS Level 2 | cis_level2 | Extended hardening controls. May restrict some functionality. Recommended for sensitive systems. |
| STIG | stig | DoD Security Technical Implementation Guide. Strictest controls. Required for government/defense environments. |
| Custom | user-defined | Organization-scoped templates created by copying a system template and customizing checks. |
Activating a system template
To start compliance scanning, create a policy that binds a template to an organization and OS type.
- Navigate to Compliance page.
- View available system templates on the Templates tab (filter to system templates).
- Click Create Policy and select the organization, OS type, template, and scan interval.
- The system enforces one framework per OS type per organization. If a policy already exists for that combination, update or delete it first.
- Scans begin automatically on the next scheduler tick (within 30 minutes).
Customizing a template
Copy a system template to create an org-scoped version where you can enable/disable individual checks, edit parameters, and add custom checks.
- Navigate to the system template and click Copy Template. Provide a name and select the target organization.
- This creates an organization-scoped copy with all checks from the source.
- Use Bulk Toggle to enable or disable individual checks.
- Click on individual checks to edit parameters or expected values.
- Click Add Check to create custom checks.
- Assign the custom template to a policy by creating or updating a policy with the new template.
Template deletion rules
- System templates cannot be deleted.
- Custom templates referenced by active policies cannot be deleted. Remove or update the policy first.
- Deleting a template also removes all its checks.
Running compliance scans
Scheduled scans
The scheduler checks for due scans every 30 minutes. For each active policy, it identifies hosts matching the organization and OS type, checks whether a scan is due based on the interval, resolves the correct template (including per-host overrides), and dispatches compliance check jobs to agents. Up to 50 hosts per sweep.
On-demand scan
- Navigate to the host or policy detail page and click Trigger Scan.
- The host must be online and in the same organization as the policy.
- The scan starts with status "pending".
- Monitor progress on the scan detail page. Status transitions: pending → running → completed or failed.
What the agent does
The agent receives a compliance check job containing the list of checks. For each check, it runs the appropriate collector (e.g., registry value on Windows, file permissions on Linux), compares the actual value against the expected value using the configured operator, and returns a per-check result with status pass, fail, error, or skip.
Shipped CIS benchmark templates
Two comprehensive CIS benchmark templates are seeded at installation with 316 total checks across 10+ categories.
CIS Benchmarks -- Linux Level 1 (158 checks)
Based on CIS v2.0.0. Categories: filesystem configuration, services, network parameters, logging and auditing, access/authentication, firewall configuration, mandatory access control (MAC), process hardening, password policy, account lockout, and user rights assignment.
Check types include: command output, file content, file permissions, file existence, package installed, service state, sysctl settings, and login banner. Includes distro-specific overrides for expected values (Ubuntu, RHEL, Debian).
CIS Benchmarks -- Windows Server Level 1 (158 checks)
Based on CIS v3.0.0. Categories: registry configuration, services, audit policy, account policy, firewall, security options, user rights assignment, password policy, account lockout, and network security.
Check types include: registry value, security policy, audit policy, service state, and login banner.
Server-side evaluated checks
Two check types are evaluated on the server rather than on the agent: Software Installed and Service Running. The agent already collects software inventory and service status through its host-info sync cycle, so these checks query the existing data instead of requiring a separate agent collection.
Software Installed
Checks the host's software inventory with case-insensitive matching. Supports wildcard patterns in the expected value (e.g., Microsoft Defender*). Returns pass if the software is found, fail with "not installed" otherwise.
Service Running
Checks the host's service list with case-insensitive matching. Returns pass if the service exists and is running or active, fail with the actual service status otherwise.
Reviewing scan results
- Navigate to a host's detail page > Compliance tab to view the latest scan results.
- Click a scan to view the per-check results detail.
- Use the History view to see scan history for a specific policy.
Per-check result fields
Status meanings
| Status | Meaning | Included in score? |
|---|---|---|
pass | Host configuration meets the expected value. | Yes (numerator + denominator) |
fail | Host configuration does not meet the expected value. | Yes (denominator only) |
error | Agent collector failed to retrieve the value. | No (excluded) |
skip | Platform-incompatible check (e.g., Windows-only on Linux). | No (excluded) |
waived | Check failed but covered by an active exception/waiver. | No (excluded) |
Managing exceptions and waivers
Exceptions allow you to waive specific compliance check failures for a host, host group, or entire organization. Waived checks are excluded from the score denominator.
Creating an exception
- Navigate to Compliance > Exceptions and click Create Exception.
- Select the organization, enter the check rule ID (e.g., CIS-1.1.1), and provide a reason explaining the waiver.
- Optionally scope to a specific host or host group. Omitting both creates an org-wide exception.
- Optionally set an expiration date for temporal expiry.
- The exception takes effect on the next scan. Failed checks matching the rule and scope are marked as waived.
Exception lifecycle
| State | Transition | Trigger |
|---|---|---|
| Active | → Expired | Expiration date has passed (checked every 30 minutes) |
| Active | → Revoked | User deletes the exception |
Expired and revoked are terminal states. Once an exception leaves the active state, the waiver no longer applies to future scans.
Exception scope resolution
During scan result processing, exceptions are matched in this order:
- Host-level: exception is scoped to a specific host matching the scanned host.
- Group-level: exception is scoped to a host group that the scanned host belongs to.
- Org-wide: exception has no host or group scope (applies to all hosts in the organization).
Per-host policy overrides
Overrides let you assign a different template to a specific host within a policy, without changing the default template for all other hosts.
- Navigate to the policy detail page > Overrides tab.
- Click Add Override, select the host and the template to use.
- The host will now use the override template instead of the policy default for all future scans.
- Only one override per host per policy. Delete the existing override first if you need to change it.
- Click Delete on an override to remove it.
Compliance dashboard
The dashboard provides an aggregate view of compliance posture for an organization.
- Navigate to Compliance > Dashboard.
Dashboard panels
Score calculation
Score = (passed / evaluable) x 100, where evaluable = total checks minus skipped, errors, and waived.
- Score below 70% triggers a warning notification.
- Score below 50% triggers a critical notification.
Exporting compliance data
Export completed scan data for offline analysis or audit submissions.
CSV export
- Navigate to Compliance > Export and select CSV format.
- Optionally filter by policy, host, and row limit (1 to 100,000; default 10,000).
- The export includes: scan ID, host, template, framework, OS type, score percentage, passed/failed/error/skipped/total counts, and scan date.
JSON export
- Select JSON format on the export page.
- The export streams as newline-delimited JSON (NDJSON), one scan record per line.
Historical score trending
Track compliance posture over time with daily score aggregation.
- Navigate to Compliance > Trends. Optionally filter by policy and time range (1-365 days, default 30).
Trend data
Permissions reference
| Permission | Grants |
|---|---|
| compliance.view | List/get templates, checks, policies, overrides, scans, exceptions, dashboard, export, and trends. |
| compliance.manage | Create/update/delete custom templates, checks, policies, overrides, and exceptions. Trigger scans. Toggle system template active status. |
Navigation reference
| Feature | Location |
|---|---|
| Templates | Compliance > Templates -- view, copy, edit, delete templates and checks |
| Policies | Compliance > Policies -- create, edit, delete policies and per-host overrides |
| Scans | Compliance > Scans or host detail > Compliance tab -- trigger and review scans |
| Exceptions | Compliance > Exceptions -- create and revoke exceptions/waivers |
| Export | Compliance > Export -- download scan data as CSV or JSON |
| Trends | Compliance > Trends -- daily score trending charts |
| Dashboard | Compliance > Dashboard -- aggregate compliance posture |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| No scans running | No active policies for the org/OS combination | Create a policy and ensure it is enabled. |
| Scan stuck in "pending" | Host offline or agent not polling | Verify host status is "online" on the Hosts page. |
| All checks show "skip" | Wrong OS template assigned to host | Verify the policy's OS type matches the host's actual OS type. |
| Low score despite fixes | Cached scan results from previous run | Trigger an on-demand scan or wait for the next interval. |
| 409 on policy create | Policy already exists for this org + OS | Update the existing policy or delete it first. |
| 409 on template delete | Template is referenced by an active policy | Delete or update the policy before deleting the template. |
| 403 on template edit | Attempted to edit a system template | Copy the template first, then edit the copy. |
| Wrong expected values on checks | OS version override not applied | Verify the OS version overrides are configured correctly on the check definition. |