Enterprise modules
Korta Enterprise adds modules for the platform: the manager, deployments,
cloud instances, secrets, access control, the audit log and the AI assistant.
Each one is used from the web console or the korta CLI, and every change goes
through a plan that someone approves.
| Module | What it does | Guide |
|---|---|---|
| Instances | Registers the hosts that Korta manages, with their SSH key | Instances |
| PostgreSQL | Databases and roles, TLS, network rules, backups and restore | Deployments |
| MySQL | Databases and users, TLS, network rules, dumps and restore | Deployments |
| Node.js and Next.js | Applications from Git, with rollouts and rollback | Deployments |
| AWS instances | Creates and configures EC2 instances from a role | AWS |
| Google Cloud instances | Creates and configures Compute Engine instances from a role | Google Cloud |
| Roles | Markdown roles, plans, approvals and applies | Roles |
| Secrets | Encrypted values for roles | Secrets |
| Access | Users, access levels and API tokens | Access |
| Audit and console | The audit log, operations and an SSH terminal | Audit and console |
| AI assistant | Drafts and revises roles with Claude | AI assistant |
Instances
An instance is a host that the manager configures over SSH. Store its private key once, then register the host.
korta keys create deploy --private-key ~/.ssh/korta_ed25519
korta instances create db1 --host 10.0.0.5 --user ubuntu --key KEY_ID --label env=prod
korta instances check INSTANCE_ID
instances check reconnects and records the operating system, kernel, CPU,
memory, root disk usage and every global IP address. The host key is pinned on
first connection. After a known reinstall, run instances trust-host-key.
Deployments
A deployment keeps a service running on one or more instances. Choose a type, describe what it needs in a JSON spec, and apply it. Korta installs the software natively under systemd from official repositories, with TLS and backups.
korta deployments create orders-db --type postgres --instance INSTANCE_ID --file orders-db.json
korta deployments status DEPLOYMENT_ID
korta deployments connection DEPLOYMENT_ID --role orders --database orders
| Type | Versions | Spec highlights |
|---|---|---|
postgres |
14 to 17 | roles, databases, access (network rules), backup (local disk or S3 with point-in-time restore) |
mysql |
8.4 LTS, 9.7 LTS | users, databases, access, backup (encrypted daily dumps with binary-log restore) |
node |
Node.js from Git | repository, ref, port, healthPath, env, secretEnv, database link |
nextjs |
Next.js from Git | As node; enable output: "standalone" in next.config.js for smaller releases |
A PostgreSQL spec:
{
"roles": [{ "name": "orders" }],
"databases": [{ "name": "orders", "owner": "orders" }],
"access": [{ "database": "orders", "role": "orders", "cidr": "10.0.0.0/16" }],
"backup": {}
}
Applications use the same pattern. Korta builds a release once on the first instance, copies it to the others, and switches one batch at a time. A release that fails its health check rolls back on that instance and stops the rollout.
korta deployments restart DEPLOYMENT_ID
korta deployments rollback DEPLOYMENT_ID
korta deployments backups DEPLOYMENT_ID
korta deployments backup DEPLOYMENT_ID
korta deployments restore DEPLOYMENT_ID # see `korta deployments restore --help`
An application can link to a database deployment with database, and Korta
injects the connection settings. Give a database a DNS name in its tlsNames
if the application's PostgreSQL driver verifies certificates.
AWS
Add AWS accounts under Settings > AWS > Accounts. Each account signs in by assuming an IAM role (recommended), with an access key, or with the manager's own environment. Roles never contain credentials. The IAM policy and every option are in the AWS provisioning guide.
A role creates the instances it describes:
# AWS instance
- name: web
- count: 2
# Firewall
- open 443/tcp from anywhere
# Packages
- nginx
Korta chooses the official image, the network, an SSH key and a security group, launches the instances and configures them. Destroy terminates the instances the role created. Networks, static IPs, load balancers and DNS names are part of the same role. See AWS networking.
Google Cloud
Under Settings > Google Cloud, choose how the manager authenticates: Application Default Credentials (the default), or a service-account key that the vault encrypts. The same role format creates Compute Engine instances:
# GCP instance
- name: web
- project: my-gcp-project
- zone: europe-west1-b
- subnet: default
See Google Cloud credentials for the permissions and the Shared VPC requirements.
Roles
A role is a Markdown file. Create it, plan it, then approve the plan.
korta roles create --file site.md --name site --label env=prod
korta roles plan ROLE_ID
korta roles apply ROLE_ID --approve
korta roles run ROLE_ID # plans, then applies after you confirm
Approval applies exactly the plan you reviewed. A change to the role, its
labels, or a secret after planning invalidates that plan. Plans expire after 24
hours or once they are applied. Roles with custom scripts need
--confirm-commands on approval. The role syntax is in the
Markdown roles guide.
Secrets
Store secret values once, and refer to them in roles as {{ secret.NAME }}.
korta secrets set DB_PASSWORD --value-file ./db-password.txt
korta secrets list
Values are encrypted in the vault, never shown again, and kept out of plans, logs and operation results. Scheduled scripts can't use secret references.
Access
Grant each user an access level, everywhere or only on instances whose labels match a scope. Each level includes the ones above it.
| Level | Allows |
|---|---|
viewer |
Read instances, deployments, roles, plans and operations |
operator |
Check instances, open consoles, apply deployments, edit and plan roles |
approver |
Approve role plans, restore databases, read connection credentials |
admin |
Create and delete deployments; with a global grant, also instances, SSH keys, secrets and the audit log |
owner |
Manage users and grants |
Four-eyes approval is on by default: nobody approves a role they last changed or
planned. Set KORTA_FOUR_EYES=false for single-person teams. Each user can add an
authenticator app, and create personal API tokens for the CLI and CI, valid for
90 days by default.
Audit and console
Every approval, console session and change is in the audit log.
korta audit
korta operations list
korta operations get OPERATION_ID
Open an interactive SSH session on an instance with korta instances console
INSTANCE_ID, or from the web console. The session logs in as the instance's SSH
user, uses the stored key and pinned host key, and follows your access grants.
It closes after 30 minutes without input, and after eight hours at most.
AI assistant
Describe what hosts should look like, and Claude drafts a role. Korta checks it with the same validation as a role written by hand, and a person approves the plan. The assistant never applies changes, and it sees instance names, labels and operating systems, never addresses, keys or passwords.
korta assistant start --role ROLE_ID
korta assistant send CHAT_ID --text 'patch prod weekly, one host at a time'
korta assistant save CHAT_ID
The assistant needs KORTA_ANTHROPIC_API_KEY on the manager. Without it, the
rest of the platform works unchanged.
API
Everything the console and CLI do is available over the HTTP API at /api. The
CLI, web console and API share the same access rules and the same audit log.
Mutations return 202 with an operation to follow. A second change while one is
running returns 409.
korta