Stop SSHing into prod. Run plans instead.
Opafra governs every change and every access to the servers you run. AI drafts each plan, Git keeps it as code, and every approval leaves the evidence your clients and auditors ask for.
Patch nginx across prod
Upgrade nginx to 1.25.3 on web-01 web-02 web-03 and keep TLS 1.3 only.
Activity
- Alex Moreau asked for this run14:28
- AI composer drafted 4 steps for @alex14:28
- Dry run on 3 hosts: 12 changes, 0 destructive14:29
alex2 min ago
Ready for prod. TLS 1.2 is out and session tickets are off.
danajust now
Checking the dry run for web-02 now.
Alex Moreau asked, waiting 2m
Dry run, revision 7
- 12
- changes
- 3
- hosts
- 0
- destructive
web-01 web-02 web-03
You hold access to prod. This approval covers revision 7 only.
Where Opafra fits. Four situations teams bring to it.
- Team access to productionGive the team access to production without giving away the keys, and answer the auditor with an export.
- Change controlAnswer the change-control question with evidence, not a paragraph.
- Servers for several clientsEvery client isolated by its own keys, and every change on the client's own record.
- One person with all the keysStop being the only one who can touch the servers.
Coming from AWX, Rundeck, SaltStack or Chef? Each comparison says where the other tool is the better choice.
Four states. Each one leaves something you can read later.
Every change to a server is drafted, dry-run on each host, approved for the exact revision and written to an append-only log.
Plans /Patch nginx across prod
Request
@alex
14:28:31
Patch nginx across prod and keep TLS 1.3 only.
Drafted by the composer
14:28:55
4 steps, 3 hosts, environment prod derived from the targets
- 1Back up current configreads
- 2Upgrade nginx to 1.25.3changes
- 3Write nginx.conf and reloadchanges
- 4Verify TLS on :443reads
Dry run #4f2a, revision 7
| Host | Changes | Destructive | Time |
|---|---|---|---|
| web-01 | 4 | 0 | 810 ms |
| web-02, diff shown | 4 | 0 | 790 ms |
| web-03 | 4 | 0 | 840 ms |
| Total | 12 | 0 | |
| Since the last run | +2 | 0 | |
| ssl_session_tickets added | |||
Diffweb-02
--- a/etc/nginx/nginx.conf+++ b/etc/nginx/nginx.conf@@ -1,7 +1,7 @@user www-data;−worker_processes 4;+worker_processes auto;pid /run/nginx.pid;@@ -31,6 +31,7 @@ssl_prefer_server_ciphers on;− ssl_protocols TLSv1.2;+ ssl_protocols TLSv1.3;+ ssl_session_tickets off;
Patch nginx across prod
Upgrade nginx to 1.25.3@alex → AIDry-run passedApproval requiredAudit
- Revision
- Covers revision 7 only.
- Targets
- web-01, web-02, web-03 in prod, derived from the targets
- Approver
- Must hold access to prod
Audit log /run #4f2a
| Time | Actor | Event |
|---|---|---|
| 14:33:19 | web-03 | reloaded nginx |
| 14:32:07 | dana | approved revision 7 |
| 14:29:40 | alex | dry run on 3 hosts, 12 changes |
| 14:28:55 | AI | drafted 4 steps for alex |
| 14:28:31 | alex | requested Patch nginx across prod |
Being an admin is not access. Two hours of prod, on the record.
A protected environment ignores the organization role. Everyone but the Owner, Admins included, needs a grant, and a grant can expire.
How the product is constrainedprod
Protected: org role alone grants nothing here. Access comes from an explicit grant.
| Member | View | Run | Manage | Via |
|---|---|---|---|---|
| Ada LovelaceOwner | View allowed | Run allowed | Manage allowed | Org role (owner) |
| Bo ChenAdmin | View not allowed | Run not allowed | Manage not allowed | No access |
| Alex MoreauOperator | View allowed, expires in 2h | Run allowed, expires in 2h | Manage not allowed | Grant, expires in 2h |
| Dana OkaforOperator | View allowed | Run allowed | Manage not allowed | Grant, permanent |
| Eli NovakViewer | View not allowed | Run not allowed | Manage not allowed | No access |
- Approved by
- Dana Okafor, 14:02
- Window
- 14:05 to 16:05
- Connections
- 3, each on a 5 min certificate
The evidence clients ask for, produced by the work itself.
Every approved change, access grant and restore test is written as it happens, then exported for one client against the framework they audit to.
Nothing to install on the hosts. The connection closes when the run does.
Opafra connects over SSH as the user you set for each host. There is no daemon to patch and no new listener on the hosts you are protecting.
Your secret manager
- HashiCorp Vault
- Infisical
- AWS Secrets Manager
- GCP Secret Manager
read only when a step runs
Opafra's servers
Runs and dry runs
Your organization's certificate authority
five-minute certificates
Sealed credentials
AES-256-GCM
SSH
Your network
or directly
prod
- web-01
- web-02
- web-03
- SSH from Opafra's servers to each host, or through its bastion.
- A fresh key and a five-minute certificate from your organization's own certificate authority, or a key you give Opafra.
- Every host key, bastions included, checked against the one recorded on first contact. A different key is refused.
- Secret values stay in your secret manager until the step that needs them runs. The plan carries a reference, and the log shows the value masked.
- Credentials Opafra holds are sealed under your organization's own key.
- On the host
- An SSH login. Nothing stays running afterwards.
- Credentials
- Your existing keys, or five-minute certificates from your organization's own certificate authority.
- Inbound to your network
- SSH from Opafra's servers to the host, or to its bastion. Nothing is installed or left listening.
- To operate Opafra
- Nothing. It is hosted: no control-plane VM and no cluster to run.
Works with what you already run. Any Linux host over SSH, on any cloud or bare metal, modules for Docker and NGINX, discovery from Terraform and Kubernetes, plans synced from GitHub.
- Linux
- Docker
- Kubernetes
- Terraform
- Google Cloud
- GitHub
- NGINX
Recently shipped
From the security page
- SSH certificates Five minutes each, from your organization's own authority
- Host keys Pinned on first contact, bastions included
- Credentials Sealed with AES-256-GCM under a key per organization
- Audit log The database refuses to change or delete an entry
- Vulnerability reports Acknowledged within 2 business days
See it against your own setup.
Tell us what you run. You get a demo and your price in writing within one business day, with no call.