Control Plane security#
Note
The previous name of the Starburst Control Plane was Starburst Portal.
Starburst Control Plane provides authentication, TLS, and authorization options for securing access to your clusters.
TLS#
Starburst Control Plane requires TLS for all authentication methods. Configure TLS using one of the following methods:
Direct TLS termination: Starburst Control Plane terminates TLS connections directly
Load balancer termination: A load balancer terminates TLS and forwards traffic to Starburst Control Plane
Direct TLS termination#
To configure Starburst Control Plane to handle TLS termination directly, add a keystore that contains the server certificate and private key to your configuration.
To use a JKS keystore, set the following properties in your config.properties
file:
http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=/etc/starburst/keystore.jks
http-server.https.keystore.key=keystore-password
To use a PEM-encoded certificate file, set the following properties in your
config.properties file:
http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=/etc/starburst/server.pem
http-server.https.keystore.key=
Load balancer termination#
To configure Starburst Control Plane to accept forwarded traffic from a load
balancer, set the following properties in your config.properties file:
http-server.http.port=8080
http-server.process-forwarded=true
When you enable http-server.process-forwarded, Starburst Control Plane uses
X-Forwarded-* headers from the load balancer to construct correct redirect
URLs and identify the original client.
Important
Only enable
http-server.process-forwardedwhen Starburst Control Plane is behind a trusted load balancer.Ensure the load balancer sets the appropriate
X-Forwarded-*headers.Secure the network between the load balancer and Starburst Control Plane.
TLS configuration properties#
Property |
Description |
Default |
|---|---|---|
|
Enables HTTPS. |
|
|
The HTTPS port. |
|
|
The path to the keystore file (JKS) or PEM certificate file. |
None |
|
The password for the keystore. Use an empty string for PEM files without a password. |
None |
|
The HTTP port. |
|
|
Enables trust of |
|
Certificates#
Configure Starburst Control Plane to trust self-signed certificates or certificates signed by an internal certificate authority (CA) using one of the following methods:
System truststore: Add certificates to the Java system trust store
JVM options: Configure a custom truststore in
jvm.configApplication configuration: Configure truststores for specific Starburst Control Plane components
Note
Starburst Control Plane supports configuring only one truststore. Include certificates for all clusters in this truststore. :::
System truststore
Add your cluster certificates or your CA certificate to the Java system truststore:
keytool -importcert -alias cluster-ca \
-file /path/to/ca-certificate.pem \
-keystore $JAVA_HOME/lib/security/cacerts \
-storepass changeit
JVM options
Configure a custom truststore in jvm.config:
-Djavax.net.ssl.trustStore=/path/to/truststore.jks
-Djavax.net.ssl.trustStorePassword=truststore-password
Application configuration
You can also configure truststores for specific Starburst Control Plane components at the application level.
To configure the proxy HTTP client for proxying requests to backend clusters,
set the following properties in your config.properties file:
proxy.http-client.trust-store-path=/path/to/truststore.jks
proxy.http-client.trust-store-password=truststore-password
To configure internal communication with clusters for health checks and
monitoring, set the following properties in your config.properties file:
clusters.internal-communication.https.truststore.path=/path/to/truststore.jks
clusters.internal-communication.https.truststore.key=truststore-password
Authentication
Important
Configure authentication identically on Starburst Control Plane and on every connected cluster. This includes the authentication type, user mapping rules, and the secret used to sign authentication:
For password or insecure authentication, set
web-ui.shared-secretto the same value on Control Plane and all clusters.For OAuth2 authentication, set
http-server.authentication.oauth2.state-keyto the same value on Control Plane and all clusters.
If the configurations differ, you can log in to Control Plane but authentication fails when queries route to a cluster. See Shared secrets.
Starburst Control Plane supports the following authentication methods:
Password authentication: Username and password validated against a password file
OAuth2/OIDC authentication: Single sign-on through external identity providers
Insecure authentication: No authentication (development only)
Password authentication#
Password authentication uses a password file to validate usernames and passwords.
Set the following properties in your config.properties file:
web-ui.authentication.type=form
http-server.authentication.type=password
web-ui.shared-secret=<SHARED_SECRET>
password-authenticator.config-files=/path/to/password-authenticator.properties
Create a password-authenticator.properties file at the path you specify in
password-authenticator.config-files. Set the following properties:
password-authenticator.name=file
file.password-file=/path/to/passwords.db
Password authenticator properties#
Property |
Description |
Default |
|---|---|---|
|
The path to the password file. |
None (required) |
|
The refresh period for the password file. |
|
|
The maximum number of cached authenticated passwords. |
|
Password authentication uses web-ui.shared-secret, which must be identical
across Starburst Control Plane and all connected clusters. See
Shared secrets.
OAuth2 authentication#
Use OAuth2 authentication to enable single sign-on (SSO) through an external identity provider such as Okta, Azure AD, or Keycloak.
Set the following properties in your config.properties file:
web-ui.authentication.type=oauth2
http-server.authentication.type=oauth2
http-server.authentication.oauth2.issuer=https://your-idp.com/
http-server.authentication.oauth2.client-id=your_client_id
http-server.authentication.oauth2.client-secret=your_client_secret
http-server.authentication.oauth2.state-key=<SHARED_SECRET>
OAuth2 authentication uses http-server.authentication.oauth2.state-key, which
must be identical across Starburst Control Plane and all connected clusters. See
Shared secrets.
OAuth2 configuration properties#
Property |
Description |
Default |
|---|---|---|
|
The issuer URL of the OAuth2/OIDC provider. Used for token validation and OIDC. |
|
|
The OAuth2 client ID registered with the identity provider. |
|
|
The OAuth2 client secret for the registered client. |
|
|
Secret key used to HMAC-sign the OAuth2 state parameter. Must be identical across Control Plane and all connected clusters. |
|
|
Comma-separated list of OAuth2 scopes to request. Typically includes
|
|
|
The authorization endpoint URL. Required when OIDC discovery is disabled. |
|
|
The token endpoint URL. Required when OIDC discovery is disabled. |
|
|
The JSON Web Key Set (JWKS) endpoint URL used to verify token signatures. Required when OIDC discovery is disabled. |
|
|
The UserInfo endpoint URL. Optional: use to obtain user claims or to validate opaque tokens that cannot be validated locally. |
|
|
The end session (logout) endpoint URL. Optional: configure to enable single logout. |
|
|
The expected issuer claim value for access tokens. Use this when access
token issuer differs from the main |
|
|
A comma-separated list of additional valid audience values for token validation. |
|
|
The token claim to use as the principal (username). Common alternatives:
|
|
|
Enable OIDC discovery to fetch provider endpoints from the issuer. Set to
|
|
|
Use the UserInfo endpoint obtained via OIDC discovery. Set to |
|
Insecure authentication#
Warning
Do not use insecure authentication in production environments.
Insecure authentication accepts any username without validation. Use this authentication type only for development and testing.
To enable insecure authentication, set the following properties in your
config.properties file:
http-server.authentication.type=insecure
web-ui.shared-secret=<SHARED_SECRET>
Like password authentication, insecure authentication uses
web-ui.shared-secret, which must be identical across Starburst Control Plane and
all connected clusters. See Shared secrets.
User mapping#
Use user mapping to transform usernames from your authentication provider into Starburst Control Plane usernames. Choose one of the following methods:
Pattern mapping: A single regular expression.
File mapping: A JSON file containing multiple rules.
Pattern mapping#
Use pattern mapping to transform all usernames with a single regular expression.
For example, if your authentication provider uses usernames in the form
alice@example.com, use a regex that captures the name before the @ sign:
http-server.authentication.oauth2.user-mapping.pattern=(.*)(@.*)
Starburst Control Plane uses the first capture group as the mapped username. If the regex does not match the username, Starburst Control Plane denies authentication.
Pattern mapping properties#
Authentication type |
Property |
|---|---|
Password |
|
OAuth2 |
|
Insecure |
|
File mapping#
Use file mapping to define multiple transformation rules or to exclude specific users.
Create a JSON file with your mapping rules:
{
"rules": [
{
"pattern": "test@example\\.com",
"allow": false
},
{
"pattern": "(.+)@example\\.com"
},
{
"pattern": "(?<user>.+)@(?<region>.+)\\.example\\.com",
"user": "${user}_${region}"
}
]
}
Starburst Control Plane processes rules from top to bottom and uses the first matching rule. If no rules match, Control Plane denies authentication.
Each rule supports the following fields:
pattern(required): Regex to match against the usernameuser(optional): Replacement string. Default:$1allow(optional): Whether to allow authentication for this matchcase(optional):keep(default),lower, orupper
Add the mapping file path to your config.properties file:
http-server.authentication.oauth2.user-mapping.file=etc/user-mapping.json
File mapping properties#
Authentication type |
Property |
|---|---|
Password |
|
OAuth2 |
|
Insecure |
|
Best practices#
Always enable TLS for production deployments.
Generate secrets with at least 256 bits of entropy.
Ensure the authentication signing secret is identical across Starburst Control Plane and all clusters:
web-ui.shared-secretfor password or insecure authentication, orhttp-server.authentication.oauth2.state-keyfor OAuth2.Use environment variables or a secret management system to store secrets.
When using load balancer TLS termination, secure the network between the load balancer and Starburst Control Plane.