Early accessSource-available remediation agent for AWS + Terraform →

Fix cloud findings with PRs your team will actually merge.

PosturaNet learns what really uses each resource from your flow logs and CloudTrail, then opens the smallest Terraform fix that keeps all of it working. Read-only, in your CI, with your own LLM.

$ pip install posturanet
Early access, 0.1.0 · Python 3.11+ · security group ingress only.
$ posturanet fix finding.json --open-pr
HIGHAWS Security Hub · EC2.19

Security groups should not allow unrestricted access to ports with high risk

resourcesg-0a91f3c2account123456789012 · us-east-1ruleingress tcp/22 from 0.0.0.0/0

Read as data: instructions inside finding text are ignored and logged.

Example data. Click a step, or use the arrow keys. Hover to pause.

Security Hub controls in scope
EC2.2 sgEC2.13 sgEC2.14 sgEC2.18 sgEC2.19 sgEC2.53 sgEC2.54 sgS3.1 s3 · nextS3.2 s3 · nextS3.3 s3 · nextS3.8 s3 · nextS3.19 s3 · nextIAM.1 iam · nextIAM.21 iam · next
The real problem

Finding issues is solved. Fixing them safely isn't.

A scanner says 0.0.0.0/0 is too open, and it's right. But the CI runners, the VPN and the office still SSH in. PosturaNet reads who actually connected, and writes exactly that.

modules/bastion/main.tf · ingress tcp/22
+"10.0.4.0/24"CI runners · 41,880 flows / 90d
+"10.0.9.12/32"VPN · 2,104 flows / 90d
+"192.0.2.10/32"Office · 318 flows / 90d

Exactly the sources that connected in 90 days. Nothing else.

Why it won't break production

Five checks stand between a finding and your main branch.

Any one of them failing stops the run. You get a reason, not a PR.

01

A read-only role

A published IAM allowlist with no write actions. A test fails the build if any mutating call appears.

02

Real-traffic evidence

90 days of VPC flow logs and CloudTrail show who actually connects, so the fix keeps them working.

03

A solver, not a guess

Z3 computes the smallest rule set that keeps every must_allow. The LLM only writes the explanation.

04

Plan-scope check

terraform plan must touch only the flagged resource, updated in place. Anything wider stops the run.

05

A human merges

PosturaNet opens a PR for the code owner. It never applies, never pushes to main, never changes live resources.

0write permissions in the IAM role it runs with
0daysof flow-log evidence behind every fix
0PRper finding. Re-runs update it, never duplicate it
YoursCI and LLM. Findings, logs and state stay in your account
Behavior contracts

Keep the traffic that's real. Close everything else.

PosturaNet watches who actually connects, writes it down as a contract your team approves, and computes the fix that keeps exactly that. The contract stays in your repo and checks every future Terraform PR.

ingress tcp/22 from 3 CIDRs · contract: 3 kept, 1 denied

sourcesg-bastion · tcp/22 →
CI runners10.0.4.0/24
✓ must_allow
VPN10.0.9.12/32
✓ must_allow
Office192.0.2.10/32
✓ must_allow
Internet0.0.0.0/0
✗ must_deny
View the contract file
# posturanet/contracts/sg-bastion.yml
resource: module.bastion.aws_security_group.this
evidence: { source: vpc_flow_logs, window: 90d }
must_allow:
  - { proto: tcp, port: 22, from: 10.0.4.0/24 }
  - { proto: tcp, port: 22, from: 10.0.9.12/32 }
  - { proto: tcp, port: 22, from: 192.0.2.10/32 }
must_deny:
  - { proto: tcp, port: 22, from: 0.0.0.0/0 }
approved_by: "@acme/platform-network"
For AI coding agents

When AI writes your Terraform, PosturaNet checks it first.

Claude Code, Cursor and other agents call PosturaNet through MCP before touching security groups. A change that breaks a contract is blocked, with the reason, before it ever reaches review. IAM and S3 checks come next.

MCP serverClaude skillcheck_change
Fits what you already run

Findings in. Pull requests out.

  • AWS Security Hub
  • Terraform
  • GitHub
  • AWS
  • Claude + MCP

Prowler, AWS ASR and CNAPP exports are planned. Marks are generic symbols, not vendor logos.

Read the security model →
FSL-1.1 · source available

Source available. Read every line before it reads your account.

The agent, the IAM policy and the safety checks are all in one public repository. Run it free with no account and no key. Each release becomes Apache 2.0 two years after it ships.

posturanetAgent, CLI, GitHub Action and MCP server
View on GitHub
Pricing · early access

Free to run. Founding seats for teams that want more, sooner.

CommunityEarly access
Free forever

1 AWS account, security group fix PRs, 25 contracts.

Install
FoundingEarly access
$500 / month

10 seats. Every Team feature as it ships, and a say in the roadmap.

Claim a seat
TeamComing
Coming

Runs on every new finding, post-merge verify, Slack.

Join the waitlist
Compare plans →

Your next finding could be a reviewed PR.

Install it, point it at one finding, read the dry run. Nothing is written until you say so.

$ pip install posturanet