Documentation menu

Docs Security and deployment

Protect your systems

Verbiqo only reads, and every read is bounded. If your systems need more protection than that, you can set limits on how hard Verbiqo works them. Nothing changes until you do.

What Verbiqo always does

SystemOn every read
PostgreSQLRead-only transactions, closed at once. 15-second statement timeout, 2-second lock timeout. Each statement is planned first and refused if it would be costly or read many rows. Superuser accounts are refused.
MySQLRead-only session. 15-second execution limit, 2-second lock wait. Each statement is planned first and refused if it would read too many rows. Accounts that can write are refused.
SQL ServerSessions named verbiqo, with a 2-second lock timeout, low deadlock priority and a 15-second request timeout. Each statement’s estimated plan is read first and the statement refused if it would be costly or read many rows. Logins in an administrative server role, or holding any permission beyond reading, are refused.
Redis and ValkeyOnly commands on a read-only list (INFO, SLOWLOG GET, LATENCY, MEMORY STATS, CLIENT LIST, CONFIG GET and the like); never a key. 10-second command timeout. The slow log is read 128 entries at most. Users that can administer are refused.
Elasticsearch and OpenSearchMonitoring and metadata requests only, never documents. 15-second timeout. Accounts that can write or manage are refused.
KubernetesLists only, 500 objects a page, at most 5,000 of a kind (3,000 events and replica sets), three requests at a time, 20-second request timeout. Never Secrets or ConfigMaps, nothing watched. Accounts that can change the cluster are refused.
Prometheus and Thanos10-second query timeout (Thanos 30). At most 1,000 series a query and 7 days a range. It stops when the server says it is overloaded.
SplunkEvery search has a time window of at most 7 days, a 120-second limit and at most 10,000 events. Write commands and subsearches are refused.

Within one question, the model asks for a handful of reads (six for the databases, Redis and Elasticsearch; eight for Kubernetes) besides the checks Verbiqo runs itself, and reads one at a time; Prometheus reads up to three at once, Kubernetes up to three pages at once.

Limits you can add

Each applies to every system ("all") or to one: "pg", "mysql", "mssql", "redis", "es", "k8s", "prom", "splunk".

LimitCapsRange
queriesPerQuestionQueries or requests to a system for one question, Verbiqo’s own checks included1 to 1000
questionSecondsTime spent reading a system for one question10 to 3600
queryTimeoutSecondsHow long any one query may run1 to 600
parallelQueriesQueries to a system at the same time1 to 16
questionsPerHourQuestions to a system per hour, on each computer1 to 10000
  • Only ever tighter. A limit never raises Verbiqo’s own: a query timeout of 60 still leaves PostgreSQL at 15 seconds.
  • Off unless you set it. A limit you leave out is not applied.
  • The lower wins. Set in both the privacy policy and managed settings, the lower applies.

Where to set them

In the privacy policy, signed, so nobody at the computer can change them. Needs "schemaVersion": 5:

"limits": {
  "all": { "queriesPerQuestion": 40, "questionsPerHour": 60 },
  "pg": { "queryTimeoutSeconds": 10 }
}

Or in managed settings, with no signing: extensionLimits in the Mac profile, ExtensionLimits (JSON text) in the Windows registry. verbiqo policy settings writes both from the same object (Make the files). A running Verbiqo picks either up within half a minute.

What people see

  • A question that reaches a limit keeps what it read. Each read it could not make shows as refused, with your organization’s limit as the reason, and the answer is written from what was read.
  • A question over the hourly limit is not started, and says when the next can be.

The hourly count is kept on each computer. It spreads load; it is not a security control.

Try it on one computer

Without deploying anything, set the limits for one command in a terminal:

VERBIQO_EXTENSION_LIMITS='{"prom":{"queriesPerQuestion":5}}' verbiqo prom ask prod "why did cpu spike today"

The first five reads run; the rest show as refused with the limit as the reason. Without the variable, the same question runs as before.

Cap the total load at each system

Limits in Verbiqo apply to each computer. Most organizations give Verbiqo one read-only account per system, so capping that account caps everyone at once:

SystemCap
PostgreSQLALTER ROLE verbiqo CONNECTION LIMIT 5; Verbiqo sets its own statement timeout on each session, so cap time with queryTimeoutSeconds above.
MySQLALTER USER 'verbiqo'@'%' WITH MAX_USER_CONNECTIONS 5 MAX_QUERIES_PER_HOUR 2000;
SQL ServerResource Governor: a workload group for the login (its sessions carry the application name verbiqo), with REQUEST_MAX_CPU_TIME_SEC and MAX_DOP. Verbiqo sets its own 15-second request timeout, so cap time with queryTimeoutSeconds above.
Redis and ValkeyNo limit per user: use the limits above.
KubernetesAPI Priority and Fairness: a FlowSchema matching Verbiqo’s service account, bound to a low PriorityLevelConfiguration.
Elasticsearch and OpenSearchNo limit per account: use the limits above.
PrometheusServer-wide: --query.max-concurrency and --query.timeout. Thanos Query: --query.max-concurrent and --query.timeout.
SplunkOn the role Verbiqo’s account has, in authorize.conf: srchJobsQuota (searches at once per user), cumulativeSrchJobsQuota (for everyone with the role), srchMaxTime, srchDiskQuota.

Different limits for different teams: give each its own policy or managed settings (Different rules for different groups).

Something missing or unclear? Email hello@verbiqo.app.