Security
Security is a critical aspect of any application. In this section, we will discuss the security features of the BanyanDB.
Authentication
BanyanDB supports username and password-based authentication for both gRPC and HTTP endpoints. This guide explains how to configure and use this feature for both the BanyanDB server and the bydbctl
command-line tool.
Basic Authentication
To enable authentication on the BanyanDB server, you need to create a YAML configuration file that defines your users and their passwords.
Create the Configuration File
The configuration file should contain a list of users. For security, it’s highly recommended to use strong, unique passwords instead of the examples provided below.
users:
- username: admin
password: StrongPassword123
- username: dev_user
password: AnotherStrongPassword456
Set File Permissions
To protect your credentials, the configuration file must have read/write permissions only for the owner. Set the correct permissions using the following command:
chmod 600 /path/to/auth_config.yaml
This command ensures that only the file’s owner can read or modify the contents.
Start the BanyanDB Server
Finally, start the BanyanDB server with the --auth-config-file
flag, pointing to the file you just created:
banyand liaison --auth-config-file=/path/to/auth_config.yaml
Authenticating with bydbctl
When the BanyanDB server has authentication enabled, you must provide a username and password with your bydbctl
commands. There are two ways to do this.
Option 1: Use Command-Line Flags
You can provide the authentication details directly in your bydbctl
command using the -u
and -p
flags.
bydbctl group get -g group1 -a http://localhost:17913 -u admin -p StrongPassword123
Note: The
addr
,group
,username
, andpassword
parameters will be automatically saved to a file named.bydbctl.yaml
in your home directory if it doesn’t already exist. This file will also have the permissions0600
for security.
Option 2: Use a bydbctl
Configuration File
You can create a separate configuration file for bydbctl
to store your connection and authentication details.
Create the Configuration File
Create a YAML file containing your connection details. For example:
addr: http://localhost:17913
group: group1
username: admin
password: StrongPassword123
Set File Permissions
Just like with the server’s authentication file, the bydbctl
configuration file should have secure permissions:
chmod 600 /path/to/bydbctl_config.yaml
Run bydbctl
with the Configuration File
You can then run bydbctl
by specifying the path to your configuration file with the --config
flag.
bydbctl --config /path/to/bydbctl_config.yaml group list
External TLS (Client ↔ Server)
BanyanDB supports TLS for secure communication between servers. The following flags are used to configure TLS:
--tls
: gRPC Connection uses TLS if true, else plain TCP.--http-tls
: HTTP Connection uses TLS if true, else plain HTTP.--key-file string
: The TLS key file for gRPC.--cert-file string
: The TLS certificate file for gRPC.--http-grpc-cert-file string
: The gRPC TLS certificate file if the gRPC server enables TLS. It should be the same as thecert-file
. It is used for gRPC over HTTP.--http-key-file string
: The TLS key file of the HTTP server.--http-cert-file string
: The TLS certificate file of the HTTP server.
For example, to enable TLS for gRPC communication, you can use the following flags:
banyand liaison --tls=true --key-file=server.key --cert-file=server.crt --http-grpc-cert-file=server.crt --http-tls=true --http-key-file=server.key --http-cert-file=server.crt
If you only want to secure the gRPC connection, you can leave --http-tls=false
.
banyand liaison --tls=true --key-file=server.key --cert-file=server.crt --http-grpc-cert-file=server.crt
Also, you can enable TLS for HTTP connection only.
banyand liaison --http-tls=true --http-key-file=server.key --http-cert-file=server.crt
The key and certificate files can be reloaded automatically when they are updated. You can update the files or recreate the files, and the server will automatically reload them.
Internal TLS (Liaison ↔ Data Nodes)
BanyanDB supports enabling TLS for the internal gRPC queue between liaison and data nodes. This secures the communication channel used for data ingestion and internal operations.
The following flags are used to configure internal TLS:
--internal-tls
: Enable TLS on the internal queue client inside Liaison; if false, the queue uses plain TCP.--internal-ca-cert <path>
: PEM‑encoded CA (or bundle) that the queue client uses to verify Data‑Node server certificates.
Each Liaison/Data process still advertises its certificate with the public flags (--tls
, --cert-file
, --key-file
). The same certificate/key pair can be reused for both external traffic and the internal queue.
Example: Enable internal TLS between liaison and data nodes
banyand liaison --internal-tls=true --internal-ca-cert=ca.crt --tls=true --cert-file=server.crt --key-file=server.key
banyand data --tls=true --cert-file=server.crt --key-file=server.key
Note: The
--internal-ca-cert
should point to the CA certificate used to sign the data node’s server certificate.
Authorization
BanyanDB does not have built-in authorization mechanisms. However, you can use external tools like Envoy or Istio to manage access control and authorization.
Data Encryption
BanyanDB does not provide data encryption at rest. If you require data encryption, you can use disk-level encryption or other encryption mechanisms provided by the underlying storage system.