StrongDM alternative

The open source, self-hosted alternative to StrongDM

Octelium is a free and open source, self-hosted zero trust access platform. It provides secretless access to SSH servers, databases and Kubernetes clusters, identity-based and layer-7 aware access control on a per-request basis, and full application-layer auditing, with the control plane and the data plane both running on your own infrastructure.

  • Free and open source
  • Designed for self-hosting
  • SSH, databases and Kubernetes
postgres.yaml
A databaseThe upstream password stays in the Cluster. Users connect without ever receiving it.
A database. The upstream password stays in the Cluster. Users connect without ever receiving it.
kind: Service
metadata:
  name: pg-prod
spec:
  mode: POSTGRES
  port: 5432
  config:
    upstream:
      url: postgres://10.0.4.21:5432
    postgres:
      user: analytics_ro
      database: analytics
      auth:
        password:
          fromSecret: pg-password
A Policy. Access is authorized per request, from identity, context and the request itself.
kind: Policy
metadata:
  name: sre
spec:
  rules:
    - effect: ALLOW
      condition:
        all:
          of:
            - match: ctx.user.spec.type == "HUMAN"
            - match: '"sre" in ctx.user.spec.groups'
            - match: ctx.request.ssh.connect.user != "root"
A Kubernetes cluster. One kubeconfig lives in the Cluster and is never handed to a User.
kind: Service
metadata:
  name: prod-k8s
spec:
  mode: KUBERNETES
  config:
    upstream:
      url: https://k8s.internal:6443
    kubernetes:
      kubeconfig:
        fromSecret: kubeconfig-prod
service-private.yaml
A private resourceA resource behind NAT in any environment, reached over the tunnel through a single stable route.
A private resource. A resource behind NAT in any environment, reached over the tunnel through a single stable route.
kind: Service
metadata:
  name: redis
spec:
  mode: TCP
  port: 6379
  config:
    upstream:
      url: tcp://10.0.7.9:6379
Served from a connected host. The upstream address is resolved from the side of a connected client, so nothing needs an inbound port.
kind: Service
metadata:
  name: pg-edge
spec:
  mode: POSTGRES
  config:
    upstream:
      url: postgres://pg.branch.local
      user: branch-gw
A web resource, clientlessly. HTTP-based resources can be published over HTTPS for browsers and for workloads at the same time.
kind: Service
metadata:
  name: grafana
spec:
  mode: HTTP
  isPublic: true
  config:
    upstream:
      url: http://10.0.6.12:3000
policy-k8s.yaml
KubernetesKubernetes verbs, resources and namespaces are authorized without sharing a kubeconfig.
Kubernetes. Kubernetes verbs, resources and namespaces are authorized without sharing a kubeconfig.
kind: Policy
metadata:
  name: k8s-sre
spec:
  rules:
    - effect: ALLOW
      condition:
        all:
          of:
            - match: ctx.request.kubernetes.verb == "get"
            - match: '"sre" in ctx.user.spec.groups'
Databases. The database user requested by the client is part of the request context.
kind: Policy
metadata:
  name: read-only-db
spec:
  rules:
    - effect: ALLOW
      condition:
        all:
          of:
            - match: ctx.request.postgres.connect.user
                == "analytics_ro"
            - match: '"analysts" in ctx.user.spec.groups'
SSH. The requested SSH user is authorized, though the Service can also force it outright.
kind: Policy
metadata:
  name: no-root-ssh
spec:
  rules:
    - effect: ALLOW
      condition:
        all:
          of:
            - match: ctx.request.ssh.connect.user != "root"
            - match: '"ops" in ctx.user.spec.groups'
ssh.yaml
SSHNo private keys or passwords are distributed, and no PKI has to be operated.
SSH. No private keys or passwords are distributed, and no PKI has to be operated.
kind: Service
metadata:
  name: bastion
spec:
  mode: SSH
  port: 22
  config:
    upstream:
      url: ssh://10.0.2.14
    ssh:
      user: deploy
      auth:
        privateKey:
          fromSecret: bastion-key
MySQL. The same model covers MySQL, with the upstream user forced by the Service configuration.
kind: Service
metadata:
  name: mysql-prod
spec:
  mode: MYSQL
  port: 3306
  config:
    upstream:
      url: mysql://10.0.4.30:3306
    mysql:
      user: reporting
      database: sales
      auth:
        password:
          fromSecret: mysql-password
A different user per identity. Group membership selects which upstream account and credential a request is proxied with.
kind: Service
metadata:
  name: ssh1
spec:
  mode: SSH
  dynamicConfig:
    configs:
      - name: root
        upstream:
          url: ssh://10.0.2.14
        ssh:
          user: root
          auth:
            password:
              fromSecret: root-password
      - name: usr
        upstream:
          url: ssh://10.0.2.14
        ssh:
          user: usr
          auth:
            password:
              fromSecret: usr-password
    rules:
      - condition:
          match: '"ops" in ctx.user.spec.groups'
        configName: root
      - condition:
          matchAny: true
        configName: usr
idp.yaml
Secretless workload identityWorkloads authenticate with OIDC assertions issued by the platform running them.
Secretless workload identity. Workloads authenticate with OIDC assertions issued by the platform running them.
kind: IdentityProvider
metadata:
  name: github-actions
spec:
  oidcIdentityToken:
    issuerURL: https://token.actions.githubusercontent.com
    audience: https://example.com
A workload User. A CI job reaching a database is a User with the same groups, Policies and audit trail.
kind: User
metadata:
  name: migrations
spec:
  type: WORKLOAD
  groups:
    - ci
An MCP gateway. AI agents reach tools through the same identity, Policies and audit trail as everyone else.
kind: Service
metadata:
  name: tools-mcp
spec:
  mode: MCP
  isPublic: true
  config:
    upstream:
      url: http://mcp.internal:8080
    mcp:
      endpoint: /mcp
      protocol:
        requireVersion: true
Visibility and auditing

Session recordings and query-level detail

OpenTelemetry-ready, application-layer aware, structured auditing and visibility emitted to your OpenTelemetry OTLP receivers, where they can be exported to your log management and SIEM tools.

Read about visibility and auditing
AccessLogOTLP
ALLOWlinus@acme.compg-prod.dbPOSTGRESquery: select id, email from users limit 50
ALLOWci-runnerprod-k8sKUBERNETESverb=list resource=pods namespace=production
DENYagent-07tools-mcpMCPtools/call name=transfer policy=mcp-tools
ALLOWjane@acme.combastionSSHsession recorded, upstream user=deploy
ALLOWagent-07openaiLLMCHAT_COMPLETIONS model=gpt-5-mini tokens=1284
octeliumctl
octeliumctl apply ./cluster
$ octeliumctl apply ./cluster
Secret: pg-password Updated
Secret: kubeconfig-prod Updated
IdentityProvider: okta Updated
Policy: no-root-ssh Created
Group: sre Created
Group: analysts Updated
Service: pg-prod.db Created
Service: mysql-prod.db Created
Service: prod-k8s Created
Namespace: db Created
Cluster Core resources successfully applied
 7 resources created
 3 resources updated

 ClusterConfig updated
Comparison

Octelium and StrongDM, capability by capability

Both products are described from the same structured capability dataset used across this site, with the same evidentiary standard applied to each. Emerging and experimental features are marked as partial regardless of vendor.

Capability comparison

Dataset reviewed August 2026

A curated view of the dataset, including the rows where Octelium is stronger, the rows where it is not, and the rows where the two are equivalent. The complete capability matrix, with search and filters, is one click away.

Architecture

Architecture

Octelium
Kubernetes-native identity-aware proxy/gateway architecture in which policy evaluation is separated from enforcement, with client-based WireGuard/QUIC access, clientless BeyondCorp access, declarative resources, and self-hosted control/data planes.
StrongDM
SaaS control plane with customer-deployed gateways/relays. Protocol-aware access broker for databases, servers, Kubernetes, and web apps.

Authentication

Workload Identity

Octelium
OIDC assertions / workload identity
StrongDM
Partial

SCIM Provisioning

Automated user/group lifecycle provisioning via SCIM, beyond just login-time IdP federation.

Octelium
SCIM 2.0 compliant
StrongDM
SCIM / IdP provisioning

Authorization & Policy

Policy Model

Octelium
Layer-7 aware ABAC with policy-as-code via CEL and OPA
StrongDM
RBAC/ABAC, JIT access, privileged access workflows, and runtime authorization concepts.

Policy-as-Code

Octelium
CEL + OPA
StrongDM
Terraform/API

Per-Request Authz

For L7 products, this means each HTTP/gRPC/API/K8s request can be evaluated. For overlays, session/connection policy is not counted as per-request. This modeling choice structurally favors L7 gateways over network overlays.

Octelium
Yes
StrongDM
Protocol/action dependent

L7-Aware Policies

Octelium
HTTP, gRPC, K8s, DB, SSH, mTLS-related context
StrongDM
DB/SSH/K8s access and logging patterns

Zero Standing Privilege / JIT

Indicates strong architectural support for minimizing standing privilege; not an absolute claim that privileged access cannot exist.

Octelium
StrongDesigned to minimize static privilege through identity/policy-scoped access.
StrongDM
JIT / Delinea ZSP positioning

Access Requests / Approvals

First-class request-and-approve / break-glass workflows (reviewers, time-bound grants), as opposed to static policy alone.

Octelium
Access requests + approvalsFirst-class access request and approval workflow, in addition to policy/identity-scoped access that can be time-bound.
StrongDM
JIT access requests / approvals

Device Posture

Octelium
TPM/FIDO2/device attributes
StrongDM
Yes

L7 Protocol Awareness & Secretless Access

SSH

Octelium
Secretless / embedded SSH patterns
StrongDM
Server access / recording

PostgreSQL

Octelium
Secretless + query-aware policy/logging
StrongDM
Query logging / DB access

MySQL

Octelium
Secretless + query-aware policy/logging
StrongDM
Query logging / DB access

Kubernetes

Octelium
Secretless + verb/resource/namespace policy
StrongDM
Yes

RDP

Octelium
with clientless secretless browser access
StrongDM
Yes

mTLS / cert injection

Octelium
Secretless mTLS / cert injection
StrongDM
No

Raw TCP / UDP

Octelium
TCP and UDP
StrongDM
TCP-oriented infra protocols

Transport & Networking

WireGuard Data Plane

Whether the product's own client/data plane is built on WireGuard, versus a proprietary or TLS-based transport.

Octelium
Kernel / userspaceWireGuard via kernel module, TUN, or unprivileged userspace (wireguard-go) implementations.
StrongDM
No

Embedded SSH

Platform provides its own SSH server/CA or SSH implementation, rather than only tunneling an external sshd.

Octelium
Secretless embedded SSH
StrongDM
Protocol-aware SSH proxy with recording rather than an embedded SSH CA

NAT Traversal

Octelium
Via GatewaysReaches resources behind NAT through Cluster Gateways; client-to-Gateway path rather than a direct P2P mesh.
StrongDM
PartialGateway/relay broker model, not P2P.

Visibility, Auditing & Observability

OpenTelemetry-Native

Octelium
Yes
StrongDM
No

L7-Aware Access Logs

Octelium
HTTP/gRPC/K8s/DB/SSH identity-aware logs
StrongDM
Yes

SSH Session Recording

Octelium
Yes
StrongDM
Yes

Access Methods

Client-Based VPN / Overlay

Octelium
WireGuard / QUIC
StrongDM
No

Clientless Browser Access

Octelium
Yes
StrongDM
Web UI/app access; client typically needed for many infra protocols

Private DNS

Octelium
Yes
StrongDM
No

Dynamic Configuration

Dynamic Upstream Routing

Octelium
Yes
StrongDM
No

Dynamic Credential Selection

Octelium
Yes
StrongDM
Partial

Secrets Backend Integration

Integration with external secret stores / KMS (e.g. Vault, cloud KMS) or native secretless credential handling.

Octelium
Secretless injectionNative secretless credential injection; credentials managed as Cluster resources.
StrongDM
Secret store / credential management integrations

GitOps / Declarative Config

Octelium
Kubernetes-like resources / YAML
StrongDM
Terraform/API

SaaS / Public Cloud API Access

Secretless SaaS API Access

Octelium
Yes
StrongDM
No

AI / MCP / Agent Compatibility

AI / LLM Gateway

Octelium
Native LLM Service modeProtocol-aware OpenAI/Anthropic gateway: validated operations, per-request authorization on model, tools and token limits, CEL-based model selection, and token usage in access logs.
StrongDM
No

MCP Gateway / MCP Access

Octelium
Native MCP Service modeProtocol-aware MCP gateway: JSON-RPC method and tool-level authorization, protocol version pinning, origin validation, and managed-container MCP upstreams.
StrongDM
No

Deploy Containers / PaaS

Octelium
Yes
StrongDM
No

Scalability & Cloud-Nativeness

Kubernetes-Native

Octelium
Built on Kubernetes
StrongDM
No

Auto Horizontal Scaling

Octelium
PEP/PDP can scale independently
StrongDM
SaaS + gateways

Openness & Self-Hosting

Fully Self-Hosted

Octelium
Yes
StrongDM
No

Server Code Open Source

Octelium
Yes
StrongDM
No

No Mandatory Proprietary Cloud

Octelium
Yes
StrongDM
No

Data Sovereignty

Octelium
Yes
StrongDM
No
Questions

Frequently asked

Is Octelium free and open source?
Yes. Octelium is free and open source and is designed for single-tenant self-hosting. There is no proprietary cloud-based control plane, and it is not a limited edition of a separate paid product. An enterprise package is available for organizations that need capabilities such as a web console, SCIM provisioning and secret encryption at rest, and it is free for personal, homelab and evaluation use.
Which infrastructure protocols are covered?
SSH, PostgreSQL, MySQL, Kubernetes, HTTP and gRPC, browser-based RDP, DNS, SOCKS5, and generic TCP and UDP for anything else. The application-layer modes give per-request authorization, secretless upstream credentials, dynamic configuration and protocol-aware auditing, while the generic modes authorize at connection time and audit the connection.
Do users ever hold the database password or private key?
No. Upstream credentials are stored in the Cluster as Secrets and injected into the upstream connection once a request has been authorized. That covers SSH passwords and private keys, PostgreSQL and MySQL passwords, kubeconfigs, HTTP API keys and mTLS client certificates. Which credential and which upstream account are used can itself be selected per request from identity and context.
Are sessions recorded?
Yes. SSH Services emit full session recordings alongside exec requests and port forwarding events, with stdin recording available where it is needed and recording disableable per Service. Database, Kubernetes, HTTP, MCP and LLM Services emit their own application-layer entries. Everything is streamed in real time over OpenTelemetry to your own log management and SIEM providers.
How does time-bound access work?
There is no notion of an admin or superuser User, so nothing carries standing privilege by default. Access requests with approvals cover elevation where it is needed, and Policies can be attached to a Service, a Namespace, a User, a Group or a Credential, which makes both the grant and its removal a reviewable configuration change.
Can it SSH into hosts that do not run an SSH server?
Yes. In addition to proxying an existing SSH server, the embedded SSH mode lets a connected client serve SSH from inside the octelium client itself, without a standalone SSH server on the host and without root privileges. That is aimed at fleets of containers, IoT devices and other confined environments where running an SSH server on every host is impractical.
Get started

Deploy Octelium on your own infrastructure in minutes

Free and open source. Self-hosted. No vendor lock-in.