Authentication¶
Note
This feature is only available in Ververica Platform Stream Edition and above.
Authentication is the process of verifying who an entity (such as a user) is. In order to enable authentication for Ververica Platform you have to integrate with an external identity provider. Ververica Platform does not actively manage user records (such as names or passwords).
The following identity providers are supported:
If your organization uses a different authorization system, such as Lightweight Directory Access Protocol (LDAP) or Active Directory you may use an OIDC bridge such as Dex to connect the systems.
OpenID Connect (OIDC)¶
Ververica Platform supports integration with OpenID Connect (OIDC) identity providers for authentication. OIDC is an authentication protocol that is based on the OAuth 2.0 family of specifications.
Configuration¶
In order to enable the OIDC integration, you have to configure it in the main configuration file under the vvp.auth.oidc
key by providing a registration
and provider
specification.
The groupsClaim
key indicates the OIDC ID token claim that contains a list of the user’s groups. These groups can be
referenced in Role Bindings by using the group:
prefix. For example, if the ID token for an authenticated
user contains the claim groups: ["vvp-editors"]
, and you configure vvp.auth.oidc.groupsClaim=groups
, a
role binding assigning the role editor
to group:vvp-editors
will match this user.
Note that currently this claim must be present in the ID token returned by the OIDC provider. Claims in the access token are not supported because access tokens have no standardized structure and parsing them is implementation-specific.
Example: OIDC configuration template
vvp:
auth:
enabled: true
admins:
- user:foo@bar.com
oidc:
groupsClaim: roles # The OIDC ID token claim containing a list of the user's groups
registrationId: my-oidc-provider
registration:
clientId: vvp
clientSecret: secret
redirectUri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
clientAuthenticationMethod: basic
authorizationGrantType: authorization_code
scope:
- openid
provider:
authorizationUri: http://my-oidc-provider.internal/openid-connect/auth
tokenUri: http://my-oidc-provider.internal/openid-connect/token
userInfoUri: http://my-oidc-provider.internal/openid-connect/userinfo
jwkSetUri: http://my-oidc-provider.internal/openid-connect/certs
userNameAttribute: email # Required to correctly identify users
endSessionEndpoint: http://my-oidc-provider.internal/openid-connect/logout
registration
and provider
expose Spring Security objects; more information about configuring these objects can be found in the Spring Boot documentation.
Please consult the Configuration section for more specific examples.
Secure clientSecret
with Kubernetes Secrets¶
In a production environment, you may want to secure clientSecret
with Kubernetes Secrets. To do so, you first remove it from the configuration above, then create a yaml file containing:
# file: env_secret.yaml
env:
# OIDC authentication:
- name: vvp.auth.oidc.registration.clientSecret
valueFrom:
secretKeyRef:
name: mysecrets # the name of the Kubernetes Secret
key: oidc # the key
Then you can install Ververica Platform with this additional values file:
$ helm install ... --values env_secret.yaml
Use helm upgrade
if you are upgrading/modifying an existing installation.
Security Assertion Markup Language (SAML)¶
Ververica Platform supports integration with Security Assertion Markup Language (SAML) identity providers for authentication. SAML is an XML-based markup language for security assertions.
Configuration¶
To enable SAML, first register your VVP application at your identity provider, setting the following values:
- Single sign on URL:
your-vvp-installation/login/saml2/sso/<registrationId>
- Service provider entity id:
your-vvp-installation/saml2/service-provider-metadata/<registrationId>
Here, registrationId
can be chosen arbitrarily and identifies the pair of service provider and identity provider. It
has to match the one set in the Ververica Platform configuration (see below), which will default to vvp-saml unless
overridden.
Next, update the main configuration file by adding the following lines:
vvp:
auth:
enabled: true
saml:
groupsAttribute: groups # The SAML assertion attribute containing a list of the user's groups
registrationId: vvp-saml # Your chosen identifier for the <service provider> - <identity provider> pair
entityId: http://www.my-saml-provider.com/abcdefg123 # entity id of the identity provider
ssoServiceLocation: https://my-saml-provider.com/some-application/abcdefg123/sso/saml # service location of the identity provider
certificateLocation: /vvp/secrets/saml-creds/cert.crt # absolute path to the certificate in the gateway container
The groupsAttribute
key indicates the name of the attribute in the SAML assertion that contains a list of the user’s
groups, and will default to groups. These groups can be referenced in Role Bindings by using the group:
prefix. The list of groups can be provided as comma-separated string or array of strings.
For example, assume that the assertion for an authenticated user contains the attribute groups: "vvp-editors,vvp-viewers"
.
If a role binding assigning the role editor
to group:vvp-editors
was created in Ververica Platform, then the user would receive the editor
role.
registrationId
has to coincide with the one set at the identity provider. It will
default to vvp-saml if it is not specified. Both entityId
and ssoServiceLocation
have to be retrieved from
the identity provider; the latter is specific to the application registered there. certificateLocation
is the
absolute path inside the gateway container to the certificate, which can also be retrieved from the identity provider.
It only needs to be specified if the certificate is injected into the gateway container at a location which is
different from the default /vvp/secrets/saml-creds/cert.crt
(see below).
Credentials¶
The necessary certificate file can be provided in several ways.
Injecting the certificate into the container¶
In case you have existing infrastructure to inject credentials files into containers, the certificate can be injected into the gateway container of your Ververica Platform deployment, and the path can be referenced as shown in the configuration example above.
Providing the certificate directly in the configuration file¶
The certificate can also be provided directly in the main configuration file. To do so, add the following lines to your
values.yaml
:
samlCredentials:
certificate: |-
-----BEGIN CERTIFICATE-----
<...>
-----END CERTIFICATE-----
Using an existing Kubernetes secret¶
In order to avoid putting the certificate into the configuration file in plaintext, an
existing Kubernetes secret containing it can also be used. To do so, reference the secret by name by setting
samlCredentials.existingSecret: secret-name
. The secret should contain the keys certificate.crt
, with the certificate
as the value (if the key is named differently, certificateLocation
has to be adapted accordingly). This secret will
automatically be mounted in the gateway container at /vvp/secrets/saml-creds/
.
If you don’t have a secret already, you can create one by preparing a file like:
# file: samlCredentials.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret-name
labels:
chart: "ververica-platform-x.y.z"
component: ververica-platform
heritage: "Helm"
release: "ververica-platform"
system: ververica-platform
type: Opaque
data:
certificate.crt: <base64 encoded certificate>
The secret can then be created by running kubectl apply -f samlCredentials.yaml
. Note that values in secrets have to be
base64 encoded by default! You can base64 encode an existing file or
string by running base64 -w 0 <file>
for a file and echo -n <string> | base64 -w 0
for a string
(note that line wrapping is disabled to avoid line break issues in the yaml).