Skip to main content

Cloud security posture

Cloud posture as a workflow, not a monthly report.

A cloud security posture scan is a runbook. Discover accounts, audit them with provider-specific actions, probe public exposure from the outside, correlate the two sides into findings, deduplicate across runs, and notify a channel when something new matters.

  • Nine cloud providers
  • Edge probes plus inside audits
  • Evidence-first findings
  • No per-provider pricing tier

The two surfaces

Outside and inside, together.

A public bucket is a serious finding. A bucket that an inside-account IAM path lets a low-trust role make public is a bigger finding. The combination is what Skydra treats as the native shape of the problem.

Outside-in probes

What anyone on the internet can see without credentials. Public buckets, anonymous object storage, exposed function URLs, dangling CDN origins, Firebase RTDB anonymous reads, Container Registry anonymous pulls.

Inside-account audits

What a least-privileged auditor sees. IAM paths, access keys, policy evaluation, cross-account trust, logging coverage, encryption posture, secret rotation, resource-level firewalls.

Correlation

A finding on one side links to the matching evidence on the other. "This bucket is publicly readable" plus "this role can also make this bucket public" is one finding chain, not two.

Evidence-first

Public URLs that respond with sensible contents stay as leads until a stronger check establishes impact. The severity reflects demonstrated reach, not a cloud provider's theoretical worst case.

A representative runbook

A continuous multi-cloud posture scan.

continuous-posture.runbook (pseudo)
inputs:
  accounts: list<CloudAccount>

steps:
  audit:
    action: cloud.audit
    forEach: inputs.accounts
    with: { connection: item.connection }
    maxConcurrency: 2

  public_resources:
    refine: filter(audit.output.findings, item.publicReachable == true)

  verify_reachability:
    action: http.get
    forEach: public_resources.output.filter(item.resourceUrl ne null)
    with: { url: item.resourceUrl }

  write_findings:
    action: findings.record
    forEach: audit.output.findings

  summary:
    action: slack.post
    condition: audit.output.findings.filter(item.severity in ["critical", "high"]) ne []
    with:
      channel: "#cloud-security"
      summary: templates.posture_report.render(audit.output, verify_reachability.output)
      runUrl: run.url
Scheduled nightly, this runbook deduplicates findings across runs. A publicly-readable bucket seen again tonight does not create a new finding — it bumps the observation count on the existing one. Only genuinely new exposures reach Slack.

What ships, by provider

The actions you compose from.

AWS

aws.audit, bucket.enumerate, lambda.url, aws.cloudtrail, 20+ more

Azure

azure.audit, azure.audit_graph, azure.blob_url, apim.invoke, 15+ more

GCP

gcp.audit, firebase.rtdb_auth_url, firestore.write, gcp.invoke, 15+ more

Alibaba

alibaba.audit, alibaba.oss_url, alibaba.cr_url, alibaba.probe

Huawei

huawei.audit, huawei.obs_url, huawei.swr_url, huawei.probe

IBM Cloud

ibm.audit, ibm.cos_url, ibm.icr_url

OCI

oci.audit, oci.object_storage_url, oci.registry_url, oci.probe

Tencent

tencent.audit, tencent.cos_url, tencent.tcr_url, tencent.probe

DigitalOcean, Linode, Hetzner, Vultr, OVH, Scaleway, Yandex

Per-provider audit and object-storage URL parsers

Known edges

What we deliberately leave out.

  • Compliance-framework mapping (SOC 2, ISO 27001, HIPAA, PCI DSS). Skydra produces evidence; framework mapping is operator-owned.
  • Multi-cloud cost analysis. Posture, not spend.
  • Agent-based runtime detection (eBPF, host IDS). Skydra audits configuration and observable behavior, not kernel-level activity.
  • Container image CVE scanning as a primary feature. Skydra probes container registry exposure and anonymous pulls; CVE scanning is a different product category.
  • SIEM/XDR ingestion. Skydra produces evidence; downstream aggregation is a connection, not a core capability.

Point Skydra at your clouds.

A least-privileged read-only auditor identity per cloud is enough to run the inside half; the outside half runs against whatever is in the workspace scope.