Skip to main contentClaim $5 in free credit — one-time, per account. Claim $5 free
Krova CloudKrova Cloud
Security

Isolation you can check, layer by layer

Every Cube boots its own kernel inside a per-cube sandbox, sits on a private network with no inbound route until you open a port, and serves web traffic through a hardened managed-TLS ingress. Here's exactly how each layer works — and where each one stops.

01Isolation

Its own kernel. A sandbox around every Cube.

A container shares one kernel across every tenant on the host — a single kernel bug can expose all of them. Krova Cloud is the opposite by design.

Its own kernel, per Cube

Every Cube boots its own kernel — never shared with another tenant or the host. One Cube's kernel bug can't reach yours.

Per-cube jailer sandbox

Each Cube's hypervisor runs inside a jailer sandbox — its own unprivileged user, chroot, and PID namespace. A hypervisor escape lands in that sandbox, not as root on the host.

Isolated from other Cubes, not just the host

Cubes can't reach each other on the private network. The bridge drops cube-to-cube traffic in the kernel — not with a firewall rule that has to match first — and a second rule at the routing layer backs it up. Kernel-isolated and network-isolated.

KVM isolation, hardened host

KVM-enforced VM isolation (the same virtualization behind AWS Lambda), the most restrictive seccomp filters, and cross-VM memory-dedup side channels disabled.

KROVA — A KERNEL PER CUBEYour app + dataGuest userspace · your rootOwn kernel · Linux 6.11 per CubeKVM + jailer sandboxHost serverEscape lands in an unprivileged sandbox —never host root.CONTAINERS — ONE SHARED KERNELapp 1app 2app 3one shared host kernelhost server1 kernel bug → every tenant exposed
02Networking

Your app is public. Your server isn't.

Lightsail, DigitalOcean, Vultr and Linode all hand your server a public IP — a fixed address the whole internet can scan and hammer, from the second it boots. Krova Cloud gives your app a front door and leaves the machine behind it unlisted.

INTERNETvisitors+ DDoS attacksKROVA INGRESSTLS · hidden originauto HTTPS · health-managedKROVA HOSTDDoS-mitigateddefault-deny fwCUBEprivate IPYOU CHOOSENothing reaches in until you publish a port— outbound is unrestricted.

Outbound: everything. Inbound: your call.

Outbound: everything. Your Cube installs packages, pulls images and calls APIs exactly like any other server. Inbound: your call — it lives on a private, NAT'd network, so there is simply no address out there for botnets to find and probe until you publish one.

Managed TLS, hidden origin

Web traffic on your custom domains enters through Krova Cloud's health-managed ingress tier: certificates are issued and renewed automatically, the origin stays hidden, and unhealthy nodes drop out of DNS on their own. Prefer Cloudflare in front? Orange-cloud your domain and it works instantly.

Only what you open

Nothing inbound is reachable unless you explicitly open a port, and every mapping can be locked to an IP allowlist behind a stateful default-deny firewall. Hosts add provider-grade network DDoS mitigation on top.

What replaces the public IP

What makes your app reachable is your domain and the ports you choose to expose, not a fixed address bolted to the whole machine. Your websites and APIs go out worldwide over HTTPS through the Krova Cloud ingress; SSH, databases, and any other TCP service open through an IP-allowlistable port mapping, on demand. You get inbound access to exactly what you expose — without the standing address the rest of the internet spends all day scanning and attacking. Fewer doors, and all of them yours.

03Automation

A fresh, isolated Cube per API call

Forget the AWS dance — VPC, subnet, security group, AMI, key pair, IAM role, launch template. One call creates a Cube with its own kernel and its own sandbox, and it starts in seconds. Loop it to give every user, agent or build its own: your tier sets how many run at once, and the top tier sets no fixed cap.

create-cube.sh
curl -X POST https://krova.cloud/api/v1/spaces/$SPACE/cubes \
  -H "X-API-KEY: $KROVA_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "name": "web-1",
    "image": "ubuntu-24.04",
    "resources": { "vcpu": 2, "ramGb": 4, "diskGb": 40 },
    "sshPublicKey": "ssh-ed25519 AAAA...",
    "region": "us"
  }'
Full v1 REST APIIdempotency keyscloud-init user-dataOpenAPI spec

Read the API reference →

PROVISION PROGRAMMATICALLYPOST /v1/cubes201 created · cube_1201 created · cube_2201 created · cube_3× as many as you need · no cap
04Operating posture

What happens when something goes wrong

Every isolation story is easy to tell on the happy path. These are the answers to the questions that actually decide whether you put a production workload here.

If a Cube is compromised

Defence in depth means assuming a layer fails. If a guest kernel is compromised, the attacker is inside their own kernel — not one shared with you — and still bounded by the KVM boundary. If the hypervisor itself were escaped, the jailer sandbox is what they land in: an unprivileged user, in a chroot, in its own PID namespace, behind the most restrictive seccomp filter set. Not root on the host. Cross-VM memory deduplication is disabled, so there is no shared-page side channel between tenants to begin with.

How kernel updates reach you

Your Cube's kernel is supplied by the host, not by the guest — which is why rebooting from inside a Cube cannot change it, and why a compromised guest cannot pin itself to an old kernel. A cold restart from the dashboard or API boots the Cube on the refreshed kernel with its disk exactly as you left it. Above the kernel, security updates for the packages you install arrive daily on their own, without a reboot and without interrupting SSH — and you still have full root to manage everything else yourself.

Your data, and getting it back

Snapshots are content-addressed and deduplicated (Restic), encrypted with a key unique to each Cube, and stored separately from the host it runs on. Deleting a Cube offers to keep a full backup first — checked by default on plans that include backups — so an accidental destroy is recoverable. You can export any Cube as a .cube archive and import it again — your data is portable out of Krova, not just inside it. RAM and disk are reserved 1:1 against real hardware, so a noisy neighbour cannot take capacity you have paid for.

05Disclosure

Reporting a vulnerability

If you have found a security issue, please tell us before you tell anyone else. Email [email protected] with enough detail to reproduce it. We will acknowledge your report, keep you updated while we fix it, and credit you if you would like to be credited.

We will not pursue legal action against researchers who act in good faith: test only against your own account and your own Cubes, do not access, modify or destroy anyone else's data, do not degrade the service for other customers, and give us a reasonable window to fix the issue before publishing. Our machine-readable contact is published at /.well-known/security.txt.

06Compliance

Everything you can read before you sign

The agreements, the service commitment and the subprocessor list are all published — read them before you create an account, not after.

Available today

Your data stays yours

07Answers

Frequently asked questions

Is a Cube more isolated than a container?

It is a different boundary, not a stronger version of the same one. A container shares the host's single Linux kernel with every other tenant on the machine, so one kernel-level bug can expose all of them. A Cube is a Firecracker microVM that boots its own kernel behind a KVM hardware-virtualization boundary, and its hypervisor process runs inside a per-cube jailer sandbox — an unprivileged user, a chroot, and its own PID namespace. An escape lands in that sandbox, not on the host as root.

Can another Cube on the same host reach mine?

No. Cube-to-cube traffic is dropped by the kernel at the bridge itself — port isolation on every cube's tap, so the frames never reach a firewall rule that has to match first — and a second rule at the routing layer backs it up. The host does not answer ARP on a cube's behalf either, so it cannot route between them.

How do I reach my Cube if it has no public IP?

Through your domain and the ports you choose. Web traffic on your custom domains enters over HTTPS through Krova Cloud's managed ingress, which issues and renews certificates for you and keeps the origin hidden. SSH, databases and any other TCP service open through a port mapping you create — and every mapping can be locked to an IP allowlist behind a stateful default-deny firewall.

What agreements and controls can I review before signing?

A Data Processing Agreement, a published SLA and a named subprocessor list are all available to read before you create an account. Your data stays portable: any Cube exports as a .cube archive you can take with you, and snapshots are deduplicated, encrypted with a key unique to each Cube, and stored separately from the host the Cube runs on.

Can I get my data back out?

Yes. Any Cube exports as a portable .cube archive that you can import again, so your data is portable out of Krova Cloud rather than only inside it. Snapshots are deduplicated, encrypted with a key unique to each Cube, and stored separately from the host it runs on. Deleting a Cube offers to keep a full backup first — checked by default on plans that include backups.

Publish your app, not your server.

Launch an isolated Cube with full root access in under a minute — its own kernel, its own sandbox, and you decide what it exposes.

Cubes from $2.92/moNo credit card to sign up