simple magicDATA

SMKV / Configure

TLS and authentication

Applies to: the development build. Public APT baseline 0.1.0-2 does not provide these transport profiles.

Choose protections independently

SMKV supports plaintext trusted-LAN operation. TLS and authentication are independent options for data, replication, and management; management settings also apply to authority RPC. Omitting a security configuration preserves the plaintext, unauthenticated protocol.

TLS protects the connection and validates the endpoint certificate. Authentication restricts which identities can perform operations. Authentication without TLS sends bearer credentials in cleartext; choose it only where the network policy permits that exposure. Database TLS does not secure Prometheus HTTP or the browser listener.

Configure a profile

All Rust tools accept --security-config /path/security.json or SMKV_SECURITY_CONFIG. The flag wins. Relative file paths resolve beside the JSON file. A selected missing or invalid file fails startup rather than falling back to LAN mode.

A TLS-only data listener can use:

{
  "data": {
    "tls": true,
    "certificate": "server.pem",
    "private_key": "server.key"
  }
}

Its client profile uses {"data":{"tls":true,"ca":"ca.pem"}}. Certificates must contain the endpoint DNS name or IP in their SANs. This example secures only the data listener. For a cluster, use the full node template and client template, configuring replication and management too.

Add identities

A profile's users points to a server-side JSON allowlist. Its credential points to an outgoing identity file. Omitted authentication fields disable authentication; an empty users array denies everyone.

Role Intended use
read_only Reads and cluster observations
read_write Application reads and mutations
admin Operator changes and backup
peer Internal replication and coordination

Generate separate random tokens for applications, operators, and each peer. Tokens must be at least 32 printable ASCII bytes. Store only their SHA-256 hashes in server allowlists. Example file structures, with placeholders that must be replaced:

[{"name":"application","token_sha256":"REPLACE_WITH_64_HEX_SHA256","role":"read_write"}]
{"name":"application","token":"REPLACE_WITH_A_CRYPTOGRAPHICALLY_RANDOM_TOKEN"}

Protect raw tokens and private keys with filesystem permissions. Add the necessary peer and admin identities before enabling cluster authentication; an application-only allowlist cannot run internal coordination.

Use credentials safely

smkv --security-config client.json --addr 10.0.0.11:7379 get greeting
smkv-ctl --security-config operator.json --seed 10.0.0.11:7381 info

For systemd dynamic users, root-only files in /etc are not directly readable by the service. Use service-manager credentials or a protected service-readable directory. Do not make secrets world-readable. Keep tokens out of arguments, logs, cluster maps, and browser JavaScript.

Rotate and migrate

Add a new identity, update clients, then remove the old identity. Credential files reload every second; admitted work can finish before revocation takes effect. Server certificates load at startup and require a controlled restart. Static systemd credential copies also require restarting the service to refresh them.

All participants on a connection must agree on TLS and authentication. There is no automatic downgrade or mixed-protocol detection. Changing an existing plaintext cluster to secured transport requires a coordinated maintenance window.