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.
/cloud-postureHow Cloud Security Posture works
OverviewHow 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.
| Provider | Check | Severity |
|---|---|---|
| AWS | Root account has no MFA | Critical |
| AWS | Root account has access keys | Critical |
| AWS | Security group allows 0.0.0.0/0:3389 (RDP) | Critical |
| AWS | S3 bucket allows public access | High |
| AWS | Security group allows 0.0.0.0/0:22 (SSH) | High |
| AWS | CloudTrail not enabled | High |
| AWS | RDS instance is publicly accessible | High |
| AWS | GuardDuty not enabled | High |
| AWS | KMS key rotation disabled | Medium |
| AWS | VPC flow logs not enabled | Medium |
| Azure | MFA not required for admins | Critical |
| Azure | Storage account allows public access | High |
| Azure | NSG allows SSH from internet | High |
| Azure | Microsoft Defender for Cloud off | High |
| Azure | Key Vault diagnostic logs off | Medium |
| Azure | SQL Database TDE not enabled | Medium |
| GCP | MFA not required for GCP users | Critical |
| GCP | Storage bucket has public access | High |
| GCP | VPC firewall allows open SSH | High |
| GCP | Audit logging disabled | Medium |
| GCP | Service account keys unrotated | Medium |
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 useRunning a scan
- Open Cloud Posture from the sidebar (
/cloud-posture). - Find the card for the provider you want — AWS Elastic, Azure Cloud, or GCP Platform.
- Fill in the provider's configuration parameters (see below). These are recorded on the findings the scan produces.
- 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:
| Provider | Field | Config key | Example |
|---|---|---|---|
| AWS | AWS Account ARN Prefix | accountId | 111122223333 |
| AWS | Target AWS Region | region | us-east-1 |
| Azure | Azure AD Tenant GUID ID | tenantId | — |
| Azure | App Registration Client ID | clientId | — |
| GCP | GCP Project Identifier | projectId | guardfox-xdr-gcp |
| GCP | Default Compute Zone | zone | us-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
Criticalfindings, a single alert is raised (sourcecspm-scanner, taggedcspm/ 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 useWorking with findings
Filtering the feed
Two segmented controls sit above the feed:
- Provider —
all,aws,azure, orgcp. - Severity —
all,Critical,High,Medium, orLow.
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
ReferenceAPI 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
| Field | Type | Notes |
|---|---|---|
id | string | Unique finding ID |
provider | string | aws | azure | gcp |
accountId | string? | Account / tenant / project from scan config |
region | string? | Region, or global |
resourceType | string | e.g. AWS::General |
resourceId | string | Resource identifier |
checkId | string | Stable check key, e.g. aws-s3-public |
checkName | string | Human-readable check name |
severity | string | Critical | High | Medium | Low |
status | string | open | resolved | accepted (default open) |
description | string | What the check flags |
remediation | string? | Manual remediation steps |
detectedAt | datetime | When 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.