Security

Answer your customers' security questions with facts you can check.

Who can see our data? Where do the AI requests go? What can you restore? This page answers each one for version 2.17.0, limits included.

Contents
  1. A customer sends you their security questions
  2. Who can see and do what
  3. Apps start private
  4. Inside your server
  5. Secrets and stored passwords
  6. Scripts, AI tools and the assistant
  7. Where AI requests go
  8. What else leaves your server
  9. Backups and recovery
  10. Updates
  11. What your own setup decides
  12. Questions security teams ask

§ 01

A customer sends you their security questions

A new customer's IT lead sends you a list before they sign. You want to answer every line honestly, without guessing what the software does.

Here is how AI Admin Panel handles access, secrets, AI requests, backups and updates. Where your own setup decides, we say so.

§ 02

Who can see and do what

Your customers want to know that nobody else can open their apps. Your team wants to know who changed what.

Everyone who uses the panel in a browser signs in through Keycloak. Each person can turn on two-factor sign-in with an authenticator app.

Customers sign in to their own portal and see only their own apps. They get the portal actions their plan and role allow. Optional features start switched off, such as their own AI key, API keys and MCP. You switch them on for all customers or for one. In the Web Host edition, plans and roles set what each customer may do.

On every request, the panel checks the person's role and what they own before anything opens or changes. Server-level tools stay with your team.

Sign-in via Keycloak or a scoped API key, then a role and owner check. Only allowed requests reach the customer's services in the panel.Open full size

Simplified diagram · version 2.17.0Open full size

Fig. 2.1Sign-in shows who someone is. A second check of role and ownership decides what they may open or change. This map shows how access is checked. The panel and the server remain trusted parts of the system, and the audit log records supported events. It describes product controls and makes no legal or compliance promise.
Table 2.1 · Who can see and do what
Support without passwordsWhen a customer calls, staff you allow can view the portal as that customer. Nobody has to ask for the customer's password.
Two-factor resetsIf a customer loses their authenticator, your team can reset it. The reason goes into the audit log.
Suspending a customerSuspend a customer, and their sign-ins, API keys and MCP access are blocked until you reactivate them. Their key for your metered AI keeps working during a suspension.
Roles and resellersFine-grained roles, organisations and resellers come with the Web Host edition. Nobody can give a role more rights than they hold themselves.
The audit logFilter supported events by person, action, resource and date, and export the view as a CSV file.

§ 03

Apps start private

Some apps start with a default password, or make the first visitor their administrator. You want nobody outside to find them first.

Since version 2.15, new apps start private. Only people signed in to your panel can open them. For some apps, such as WordPress and Gitea, the panel also says what to set up before you publish.

You publish an app when it is ready, and publishing can't be undone yet. Some templates declare their own exceptions. Hermes Agent, IronClaw, OpenHands and the four coding workspaces always stay behind the panel's sign-in, and RustFS starts public. Apps from before version 2.15 keep the access they had.

A Hermes Agent service page, with its address hidden and a box listing its security defaults.Open full size
Fig. 3.1A Hermes Agent service: its dashboard opens only for people signed in to the panel.

Note

Private apps use the panel's sign-in. Some apps also ask for their own login, and inside each app, its own settings apply.

§ 04

Inside your server

Each customer's apps share a network of their own, separate from other customers. Apps from before version 2.14 need a redeploy to move onto it. The panel lists the apps that haven't moved yet. A few shared services, such as local models, have their own rules.

The panel starts app containers with reduced privileges, and it refuses settings that would give an app control of the server. Older containers get them when they are recreated, and one template, BookStack, has a documented exception. Building an image from a repository still runs with Docker's default settings.

It also blocks customer apps from known cloud metadata addresses and limits their traffic to the server itself. New installs since version 2.15 get these guards. Older servers get them once the installer's updater is refreshed. They cover IPv4, and part of them needs Docker 28 or later.

§ 05

Secrets and stored passwords

Nobody wants a customer's database password sitting in a note on a laptop.

OpenBao keeps app passwords, AI keys and customer tokens encrypted, in separate compartments for the platform and for each customer. Other secrets, such as environment variables and Git deploy keys, are encrypted in the panel's database. The panel and the server itself remain trusted parts of the system.

When someone reveals a stored app password in the panel, the audit log records it. You can rotate supported secrets from the panel. The panel recreates the app with the new value, and other apps that use it may need a redeploy.

Passwords for connected services, such as your mail server, are write-only. You can replace or remove them, and the panel doesn't display them.

§ 06

Scripts, AI tools and the assistant

You want scripts and AI tools to help, within the limits you set.

Table 6.1 · Scripts, AI tools and the assistant
API keysEach key works with its own role, for its organisation and the ones below it. Give it an expiry date, and revoke it at any time. The full key is shown when you create it. A customer's key can be shown again later, and each reveal goes into the audit log.
MCP for your teamAdmin access is off until you switch it on in the settings. Each request then needs an admin API key.
MCP for customersIt covers a smaller set of tools, for customers you allow, and it starts switched off. Admin keys and customer tokens can't stand in for each other.
The assistant in the panelIt shows what it is about to change and waits for a person to approve it.

Note

Only the assistant in the panel asks a person to approve a change. API and MCP calls go straight to the permission check.

See how automation works

§ 07

Where AI requests go

Customers want to know where their prompts and documents go when they use an AI app.

For apps that support it, you choose the AI route when you deploy. It can be the customer's own key, your metered key with a monthly budget, or a local model. Other apps take an AI key in the deploy form or set their AI provider inside the app, so check each one.

With an outside provider, the app's AI requests go to that provider. A local model keeps them on your server.

The assistant and AI Deploy need an AI provider set up in the panel. If that provider is outside your server, what they read goes to it.

One app, three AI routes chosen at deploy: the customer's own provider key, a budgeted metered key, or a local Ollama model.Open full size

Simplified diagram · version 2.17.0Open full size

Fig. 7.1Which AI requests leave your server depends on each app's route, chosen at deploy or inside the app. CautionCalls to an outside provider can leave your server. Local AI needs a model that is installed and working. The panel does not switch to a local model on its own. It also doesn't pass your own AI keys to customer apps.

§ 08

What else leaves your server

The apps and their data run on your server. These things contact services outside it.

Your server The apps and their data Licences our licensing service Updates Code and models GitHub or GitLab the model's registry Profile pictures Gravatar Usage statistics Certificates and DNS Let's Encrypt Cloudflare DNS our domain service AI, email, backups and notifications the provider you set up Chat apps Each app's own connections Your server The apps and their data Licences our licensing service Updates Code and models GitHub or GitLab the model's registry Profile pictures Gravatar Usage statistics Certificates and DNS Let's Encrypt Cloudflare DNS our domain service AI, email, backups and notifications the provider you set up Chat apps Each app's own connections
Fig. 8.1What else leaves your server
  • Licences. Checking and activating a paid licence contacts our licensing service.
  • Updates. The panel checks for a new version every day. Updates and app images are downloaded from outside your server.
  • Code and models. Deploying from Git fetches the code from its host, such as GitHub or GitLab. Downloading a local model fetches it from the model's registry.
  • Profile pictures. The panel shows each user's profile picture from Gravatar. To get it, the browser sends Gravatar a code made from the user's email address. Users without a Gravatar picture see their initials.
  • Usage statistics. The licence agreement lets the panel send us data such as its version, its licence key and counts of customers and services.
  • Certificates and DNS. Let's Encrypt issues the certificates. If you connect Cloudflare DNS, the panel asks it to create records. Without a domain of your own, our domain service gives you a temporary address and points it at your server. To keep it beyond the first seven days, you confirm an email address with that service.
  • AI, email, backups and notifications. Each one goes to the provider you set up.
  • Chat apps. Any chat app you connect to an agent carries its messages.
  • Each app's own connections. An app can connect to outside services through its own settings.

Our documentation describes the panel's main connections.

§ 09

Backups and recovery

You want to know what a backup covers before a customer needs it.

Table 9.1 · Backups and recovery
What backups captureThe panel backs up PostgreSQL databases, and the stored files of apps that have no database. Other database engines are refused. Backing up an app's files stops the app until the backup is done.
Where they goRun a backup by hand or on a schedule, to an S3-compatible bucket you choose. Backups to S3 need Power User or Web Host.
What the panel restores in version 2.17.0Full restore covers one setup: a small Directus app on PostgreSQL 16 that is not assigned to a customer. Its data can be up to 256 MiB. The panel refuses apps that belong to a customer. Database and file backups are kept as stored copies, with no restore in the panel. Our documentation shows your team how to put a database backup back by hand.
Before a restoreEach backup shows whether the panel can restore it, and if not, the reason. When it can, the panel checks the backup and saves the current data as a safety snapshot first. The app is offline while it restores.
Rollback keeps today's dataRolling back an app changes its version and leaves its data as it is.
The panel's own dataThe installer sets up a nightly copy of the panel's databases and secret store, in a folder on the same server. It covers the panel itself, and your customers' apps are not in it. The copies stay on the server, and the database copies are not encrypted. Copy them to a safe place yourself, and keep the panel's key files in a separate place. Servers installed before version 2.15 get the nightly copy once the installer's updater is refreshed.

Full restore, for the one supported setup

  1. Check the setup.

    The panel looks at the app's owner, its storage and its database.

  2. Take a full snapshot.

    You take it by hand, and it captures the database and the files together.

  3. Check that it can restore.

    A platform administrator starts the restore, and the panel checks the backup first.

  4. Save a safety snapshot.

    The current data is saved before anything changes.

  5. Restore and check.

    The panel restores the snapshot, then checks the result before it reports success.

Database and file backups

  1. Back up the database or the files.

    You run it by hand or on a schedule you set.

  2. Keep the stored copy.

    It stays in your bucket, with no restore in the panel.

Fig. 9.1The panel checks a backup before restoring it, takes a safety snapshot first and refuses setups it cannot restore. CautionFull restore works for one setup in version 2.17.0, and the panel refuses the rest. Test recovery for each customer's app before you promise it.

Note

Backups hold your customers' data, so protect the bucket the way you protect the server.

§ 10

Updates

You want to install an update and know the panel comes back.

Updates come as signed release images. Before an update, the panel backs up its own database. If the update fails its health check, the panel tries to roll it back.

Automatic updates are off until you switch them on and choose a daily time.

Note

On a first install, the installer and the files it downloads come over HTTPS without a signature check. We don't publish a signature for the installer yet.

§ 11

What your own setup decides

The panel gives you controls. How safe your customers are also depends on the server, your team and each app.

Table 11.1 · What your own setup decides
The serverThe panel and the server itself are trusted parts of the system. Protect the server as you would any host with customer data.
Each appInside each app, that app's own sign-in and settings apply.
The audit logIt records supported events. Check that it covers what your customers ask for.
One panel per installationEach installation is its own panel, with its own customers and apps.
The lawWhether your service meets a law or a standard depends on your whole setup. We make no legal or compliance promise.

§ 12

Questions security teams ask

Can one customer see another customer's apps?

In the panel, each customer sees only their own apps. Each customer's apps also share a network of their own. Apps from before version 2.14 need a redeploy to move onto it.

Can customers administer everything?

No. In the panel, each customer gets the actions their plan and role allow, for their own apps. Server-level tools, backups and restore stay with your team. Inside each app, that app's own settings apply.

Does it help with data protection rules, such as the GDPR?

It gives you controls to use in your own assessment. You decide where apps run, who has access and, for apps that support it, which AI route they use. Customers can download their account and service details from their portal, as a JSON file. Data inside each app needs that app's own export. Whether your service meets the law depends on your whole setup, so we make no legal promise.

Bring your security questions

Install the free edition, or try either paid edition for 14 days, on a server of your own. If your customers send you a security questionnaire, bring it to a call and we'll go through it together.