Security overview
Zaris secures a cluster with three independent layers: encryption in transit, authentication, and authorization. You enable each layer on its own, so you can start with a plaintext development cluster and add security as your requirements grow.
Each layer answers a different question.
| Layer | Question it answers | Mechanism |
|---|---|---|
| Encryption | Can anyone on the network read or tamper with traffic? | Transport Layer Security (TLS) on the data plane and the control plane. |
| Authentication | Who is this caller? | Signed bearer tokens, issued by the security layer and verified offline by each node. |
| Authorization | Is this caller allowed to do this, here? | Role-based access control (RBAC), deny-by-default. |
The layers build on each other. Encryption protects the pipe, authentication establishes an identity over that pipe, and authorization decides what that identity may do. A development cluster can run with all three off. A production cluster typically runs with all three on.
Two planes, two kinds of key
Before the layers, one distinction makes everything else fall into place: Zaris has two planes, and they authenticate differently because they serve different callers.
| Plane | Who uses it | How they act | How they authenticate |
|---|---|---|---|
| Control plane | People and operators | The web console and the admin cmdlets (Clustron.Zaris.AdminShell) — creating stores, changing config, reading security status | Credentials — a username and password. You sign in once; the login is exchanged for a session token. |
| Data plane | Applications and services | Your app connecting to a store to read and write keys | A token — passwordless and self-contained, scoped to a store and role. Drop it into an environment variable or a Kubernetes secret. |
The rule of thumb: credentials are for people, tokens are for apps. An operator signs in with a password (Connect-ZrManager -Credential, or the console sign-in page); an application presents a token (Connect-ZrStore -Token, or a token in its connection string). A convenience login for apps also exists — Connect-ZrStore -Credential exchanges a username/password for a data-plane token at connect — but the mental model to keep is people→password, app→token.
Almost every action in this section can be done in the web console or with an equivalent AdminShell cmdlet — the console talks to the cluster through the same control-plane management API the CLI uses. Each step below shows both paths; pick whichever fits your workflow.
Encryption with TLS
TLS is the protocol that encrypts a network connection and lets one side prove its identity to the other with a certificate. Zaris applies TLS to two separate planes, which you enable and reason about independently.
The data plane carries store traffic — between clients and nodes, and between nodes themselves.
- Client to node uses server-authenticated TLS. The client validates each node's certificate against the cluster certificate authority (CA). A CA is the entity whose certificate signs — and so vouches for — the node certificates. The client itself is then identified by its token, not by a client certificate.
- Node to node uses mutual TLS (mTLS) when the store's TLS
ModeisMutualTls. In mutual TLS, each side presents a certificate and validates its peer's, so only enrolled members join the data plane.MutualTlsis the mode Zaris applies by default when you enable TLS on a store.
The control plane is the Management Service and Web Console HTTPS. It is separate from data-plane TLS and is enabled independently with Enable-ZrManagementHttps. You can secure the console without encrypting store traffic, or the reverse.
"Mutual TLS" in Zaris refers to node-to-node authentication. External clients do not present a client certificate. They authenticate with a token over a server-authenticated TLS channel. This is the standard, scalable pattern: you issue a token per client instead of provisioning a certificate per client.
The mechanics of enabling TLS, and how each node obtains its certificate, are covered in TLS encryption.
Trust: where certificates come from
The hard part of TLS is not encryption. It is trust — which CA signs the node certificates, and how clients come to trust that CA. A trust anchor is the certificate a client is configured to trust as the root of validation; every node certificate must chain back to it.
Zaris supports four trust models so you can align the cluster with your organization's existing public-key infrastructure (PKI) instead of working around it. All four produce the same end state — nodes present certificates that peers and clients validate against a trust anchor — but they differ in who holds the CA private key and whether Clustron signs the node certificates.
| Mode | Who holds the CA private key | Clustron signs node certificates | Trust anchor distributed to clients |
|---|---|---|---|
| Auto-generated (Mode 0) | The cluster generates a self-signed CA | Yes | The generated cluster CA (cluster-ca.crt) |
| Bring-your-own CA (Mode 1) | You, and you give the CA key to the cluster | Yes | Your CA root |
| Bring-your-own intermediate (Mode 2) | You; you give only an intermediate to the cluster | Yes | Your enterprise root |
| Pre-issued leaves (Mode 3) | You; the key is never given to the cluster | No | Your root, configured as a trust anchor |
Choosing between them, and the exact configuration for each, is the subject of CA and trust modes. If you want a secure cluster with the least effort, use the default, Auto-generated: the cluster mints its own CA, issues each node a certificate automatically, and you distribute one public file to clients.
Authentication with tokens
When authentication is enabled, every client connection presents a bearer token at the connection handshake (the "Hello"). A bearer token is a signed credential the holder presents to prove identity. The token is a signed JSON Web Token (JWT) issued by the security layer, the identity component embedded in the Management Service. Nodes verify the token offline against the issuer's public key. There is no per-request call to a central auth server on the hot path — verification happens once per connection.
An operator signs in to the control plane with a credential (Connect-ZrManager -Credential, or the console sign-in page). An application gets its data-plane token either by logging in with a credential at connect (Connect-ZrStore -Credential, which exchanges a username and password for a token) or — the usual pattern — by having an operator issue one ahead of time (New-ZrToken, New-ZrServiceAccount) and dropping it into a secret. See Authentication and tokens.
Authorization with RBAC
Authentication establishes who. Authorization decides what. Zaris delegates authorization to the security layer, which evaluates a role-based model that is deny-by-default — an operation is refused unless a role granted to the caller explicitly permits it at the relevant scope.
- Operations map to permissions such as
data.read,data.write, and control-plane permissions likestore.create. - Permissions are granted through roles (for example
DataReader,DataWriter,ClusterAdmin) bound to a principal at a scope — for example, one store versus the whole cluster. - Scopes are hierarchical strings (
zaris:cluster,zaris:store:orders). A grant at a higher scope covers the scopes beneath it.
See Authorization and RBAC for the permission catalog, the preset roles, and how to grant them.
How the layers map to deployment
Zaris runs in two deployment models, and each lends itself to different trust modes.
- Supervisor model — the Management Service creates and owns the nodes. Each node enrolls: it generates its keypair locally and sends a certificate-signing request (CSR) to the manager, gated by a one-time token. This is the natural home for the Auto-generated, BYO-CA, and BYO-intermediate modes, where Clustron does the signing.
- Attach model — an external orchestrator (for example Docker Compose or Kubernetes) runs the nodes, and the manager only observes. Certificates are mounted into each node. This is the natural home for the Pre-issued leaves mode.
You are not locked in — the modes are configuration — but these pairings are the paths of least resistance. Deployment specifics are in the Deployment section.
Enabling security: the short version
A fully secured supervisor-model cluster is a handful of steps. Note the shape: you secure the control plane once, then secure the data plane on each store.
# 1. CONTROL PLANE — bootstrap security and create the first admin login (username + password).
# Enforcement turns on across all managers; the console and admin cmdlets now require sign-in.
Initialize-ZrSecurity -AdminSubject admin -AdminPassword (Read-Host -AsSecureString)
# 2. DATA PLANE — require a token to connect to the store, and encrypt its traffic. Per store.
Enable-ZrStoreSecurity -Store orders -Restart # nodes now verify caller tokens
Enable-ZrStoreTls -Store orders -Restart # MutualTls node-to-node; clients use CA + token
# 3. Issue a token for an application (passwordless, scoped to the store and a data role).
New-ZrToken -Subject orders-app -Role DataWriter -Scope zaris:store:orders
# 4. Export the public cluster CA for clients (optional — clients can auto-fetch it at sign-in).
Get-ZrClusterCaCert -OutFile cluster-ca.crt
# 5. The application connects over TLS, presenting its token.
Connect-ZrStore -ConnectionString "zariss://10.0.0.10:7861/orders?token=env:ORDERS_TOKEN&ca=file:cluster-ca.crt"
Steps 1 secures only the control plane — the console and admin cmdlets. Until you run Enable-ZrStoreSecurity on a store (step 2), that store's data plane stays open: an application can still connect and read every key with no token. Likewise, enabling TLS alone gives you an encrypted but unauthenticated store — encryption is not authentication. Secure every store you care about: token first, then TLS.
Every step above has a web console equivalent too — the Security & TLS area enables cluster security, per-store token requirement, and per-store TLS, and mints tokens on the People/Applications tabs. For the full click-by-click and cmdlet walkthrough, see Secure a store end to end. Each concept is explained in depth in the pages that follow.
Next steps
- Secure a store end to end — the full happy path (console and cmdlets): turn on security, require a token, enable TLS, issue a token, connect an app.
- TLS encryption — enable TLS and mutual TLS, and see how nodes get certificates.
- CA and trust modes — the four trust models in detail, with configuration for each.
- Authentication and tokens — enable auth, sign in as an operator, and issue tokens.
- Authorization and RBAC — permissions, roles, and scopes.