🛡️ GuardFox Security Systems Documentation

Cloud Security Posture (CSPM)

Audit AWS, Azure, and GCP against a built-in library of misconfiguration checks — open ports, unrotated keys, missing MFA, public storage — then track each finding by severity and copy a ready-made CLI remediation command.

Route: /cloud-posture

How Cloud Security Posture works

Overview

How Cloud Security Posture works

The CSPM module scans three cloud providers — AWS, Azure, and GCP — against GuardFox's built-in check library. Each scan records the provider's checks as findings, and the page rolls them up into a security score, a dashboard, and a filterable findings feed.

The check library

Each provider has a fixed set of best-practice checks. A scan writes every check in the selected provider's library as an open finding, tagged with the severity, description, and manual remediation defined for that check.

ProviderCheckSeverity
AWSRoot account has no MFACritical
AWSRoot account has access keysCritical
AWSSecurity group allows 0.0.0.0/0:3389 (RDP)Critical
AWSS3 bucket allows public accessHigh
AWSSecurity group allows 0.0.0.0/0:22 (SSH)High
AWSCloudTrail not enabledHigh
AWSRDS instance is publicly accessibleHigh
AWSGuardDuty not enabledHigh
AWSKMS key rotation disabledMedium
AWSVPC flow logs not enabledMedium
AzureMFA not required for adminsCritical
AzureStorage account allows public accessHigh
AzureNSG allows SSH from internetHigh
AzureMicrosoft Defender for Cloud offHigh
AzureKey Vault diagnostic logs offMedium
AzureSQL Database TDE not enabledMedium
GCPMFA not required for GCP usersCritical
GCPStorage bucket has public accessHigh
GCPVPC firewall allows open SSHHigh
GCPAudit logging disabledMedium
GCPService account keys unrotatedMedium

The dashboard

Four cards sit above the findings feed:

  • Security Score — a compliance rating derived from open findings (see the API reference for the formula).
  • Open Violations — the total number of open findings across all providers.
  • Critical Severity — the count of open findings with severity Critical.
  • Connected Providers — how many of the three providers currently have at least one open finding, shown as n / 3.

Finding lifecycle

Findings start as open and stay in the feed until you close them. Resolving a finding sets its status so it drops out of the open feed. Re-running a scan does not duplicate findings — an existing finding for the same provider, resource, and check is updated in place.

Every scan (re-)writes the selected provider's full check library. Findings are matched on provider + resource + check, so scanning repeatedly refreshes existing findings rather than piling up duplicates.

Running a scan & connecting a provider

How to use

Running a scan

  1. Open Cloud Posture from the sidebar (/cloud-posture).
  2. Find the card for the provider you want — AWS Elastic, Azure Cloud, or GCP Platform.
  3. Fill in the provider's configuration parameters (see below). These are recorded on the findings the scan produces.
  4. Click Scan API. The button shows a spinner while the scan runs, then the findings feed and dashboard refresh.

Configuration parameters

Each provider card exposes its own fields:

ProviderFieldConfig keyExample
AWSAWS Account ARN PrefixaccountId111122223333
AWSTarget AWS Regionregionus-east-1
AzureAzure AD Tenant GUID IDtenantId
AzureApp Registration Client IDclientId
GCPGCP Project IdentifierprojectIdguardfox-xdr-gcp
GCPDefault Compute Zonezoneus-central1-a

What happens on a scan

  • Every check in the provider's library is saved as an open finding for your organization.
  • If the scan produces any Critical findings, a single alert is raised (source cspm-scanner, tagged cspm / provider / misconfiguration) and SOAR playbooks are triggered against it.
  • The response reports how many checks were scanned, how many findings were saved, and the critical count.

Working with findings

How to use

Working with findings

Filtering the feed

Two segmented controls sit above the feed:

  • Providerall, aws, azure, or gcp.
  • Severityall, Critical, High, Medium, or Low.

Both filters are applied server-side. Click Reload Feed to re-fetch with the current selection. When no open findings match, the feed shows a "Cloud Posture Secure" empty state.

Expanding a finding

Each row shows the severity, provider icon, check name, and the resource type / region / resource ID. Click a row to expand it and reveal:

  • Description — what the check flags.
  • Manual Remediation Protocol — the step-by-step console fix for that check.
  • Remediation CLI CoPilot — for most checks, a ready-to-run CLI command (AWS CLI, Azure CLI, or gcloud/gsutil) with a Copy Command button. A few checks that have no single CLI equivalent (for example, enforcing admin MFA via Conditional Access) show a guidance note instead.

Closing a finding

The expanded view has two buttons, Mark Resolved and Accept Risk. Both set the finding's status to resolved, which removes it from the open feed and updates the dashboard counts. There is no separate accept-risk state in the current UI.

Resolving is not permanent — the next scan of that provider re-opens the check as a finding again, since the scan rewrites the provider's full library.

API reference

Reference

API reference

All CSPM actions run through one endpoint, /api/cspm/scan. It is a session-authenticated app endpoint — call it from a signed-in session — and every request is scoped to your organization.

Run a scan

POST /api/cspm/scan. Body requires provider (aws, azure, or gcp) and an optional config object. Returns { provider, scanned, saved, critical }.

curl -X POST https://portal.guardfoxsecurity.com/api/cspm/scan \
  -H "Content-Type: application/json" \
  -d '{"provider":"aws","config":{"accountId":"111122223333","region":"us-east-1"}}'

List open findings

GET /api/cspm/scan. Optional query params provider and severity filter the results (open findings only, up to 200, newest first). Returns findings plus byProvider and bySeverity group counts and a total.

curl "https://portal.guardfoxsecurity.com/api/cspm/scan?provider=aws&severity=Critical"

Update a finding's status

PATCH /api/cspm/scan. Body requires id and status. Returns { success, updated }.

curl -X PATCH https://portal.guardfoxsecurity.com/api/cspm/scan \
  -H "Content-Type: application/json" \
  -d '{"id":"","status":"resolved"}'

Finding fields

FieldTypeNotes
idstringUnique finding ID
providerstringaws | azure | gcp
accountIdstring?Account / tenant / project from scan config
regionstring?Region, or global
resourceTypestringe.g. AWS::General
resourceIdstringResource identifier
checkIdstringStable check key, e.g. aws-s3-public
checkNamestringHuman-readable check name
severitystringCritical | High | Medium | Low
statusstringopen | resolved | accepted (default open)
descriptionstringWhat the check flags
remediationstring?Manual remediation steps
detectedAtdatetimeWhen the finding was recorded

Security score formula

The dashboard's Security Score is computed from open findings as:

score = max(30, 100 − 12 × Critical − 6 × High − 2 × Medium)

Low-severity findings do not affect the score, and the score never drops below 30.