clearml-docs/docs/deploying_clearml/enterprise_deploy/sso_keycloak.md

226 lines
7.8 KiB
Markdown
Raw Normal View History

---
title: KeyCloak IdP Configuration
---
This procedure is a step-by-step guide of the configuration process for the ClearML Enterprise Server with the KeyCloak IdP.
In the following sections, the term "publicly accessible" does not have to mean open to the entire world or publicly
accessible from the Internet, it simply means accessible to your users from their workstations (typically when using a
browser).
In the following sections, you will be instructed to set up different environment variables for the ClearML Server. If
using a `docker-compose` deployment, these should be defined in your `docker-compose.override.yaml` file, under the
`apiserver` service environment variables, as follows:
```
services:
...
apiserver:
...
environment:
<name>=<value>
...
```
If using a Kubernetes deployment, these should be set in the ClearML Enterprise server chart values override file, under
the `.Values.apiserver.extraEnvs` array section, as follows:
```
...
apiserver:
extraEnvs:
- name: <name>
value: "<value>"
- ...
```
All examples below are provided in the Kubernetes format.
## Prerequisites
* An existing ClearML Enterprise server / control-plane installation (using `docker-compose` or Kubernetes), which is
set up with a publicly accessible endpoint fo the ClearML WebApp
* A KeyCloak IdP installed with a publicly accessible endpoint, with you as admin having access to the KeyCloak administration UI.
## Configuration
### Basic Setup
#### KeyCloak Configuration
In the KeyCloak administration UI:
1. Register a new ClearML app with the callback url: `<ClearML_webapp_address>/callback_keycloak`
2. Make sure that the claims representing `user_id`, `email` and `user name` are returned
3. Make a note of the `client_id`, `client_secret`, `Auth url` and `Access token url` for configuration in the ClearML Server.
#### ClearML Server Configuration
In the ClearML Server deployment, set the environment variables specified below.
##### KeyCloak Base URL
Use the start of the token or authorization endpoint, usually the part just before `protocol/openid-connect/...`
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__base_url
value: "<base url>"
```
##### KeyCloak Authorization Endpoint
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__authorize_url
value: "<authorization endpoint>"
```
##### KeyCloak Access Token Endpoint
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__access_token_url
value: "<token endpoint>"
```
##### KeyCloak Client ID
The client ID is obtained when creating the KeyCloak ClearML App.
```
- name: CLEARML__secure__login__sso__oauth_client__keycloak__client_id
value: "<clinet_id>"
```
##### KeyCloak Client Secret
The client secret is obtained when creating the KeyCloak ClearML App.
```
- name: CLEARML__secure__login__sso__oauth_client__keycloak__client_secret
value: "<client_secret>"
```
##### Automatic User Creation Support
Usually, when using IdPs in ClearML, the ClearML Server will map users signing in to the server into tenants (companies)
using predefined whitelists and specific invitations (users explicitly added by admins).
To support automatic user creation in a trusted environment, where all users signing in using this IdP are automatically
added to the same tenant (company), the following environment variable should be set:
```
- name: CLEARML__secure__login__sso__oauth_client__keycloak__default_company
value: "<company_id>"
```
### User Groups Integration
This option allows automatically synchronizing group membership from KeyCloak into existing ClearML User Groups when
logging in users (this is done on every user login, not just on user sign-in).
Make sure a ClearML User Group exists for each potential KeyCloak group that should be synchronized to
prevent an uncontrolled proliferation of user groups. The ClearML server will not automatically create user groups in
this mode.
#### Keycloak Configuration
* When configuring the Open ID client for ClearML:
* Navigate to the `Client Scopes` tab
* Click on the first row `<clearml client>-dedicated`
* Click `Add Mapper → By configuration` and then select the `Group membership` option
* In the opened dialog enter the name `groups` and Token claim name `groups`
* Uncheck the `Full group path` option and save the mapper
* To validate yourself:
* Return to the `Client Details → Client` scope tab
* Go to the `Evaluate` sub-tab and select a user that has any group memberships
* On the right side navigate to `Generated ID` token and then to `Generated User Info`
* Inspect that in both cases you can see the groups claim in the displayed user data
#### ClearML Server Configuration
Set the following environment variables for the `apiserver` service:
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__enabled
value: "true"
- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__claim
value: "groups"
- name: CLEARML__services__login__sso__oauth_client__keycloak__claims__name
value: "preferred_username"
```
##### Setting Administrators by Group Association
In case you would like the members of the particular KeyCloak group to be set as administrators in ClearML, set the
following environment variable. Note that in this case, the KeyCloak group(s) do not have to be present in the ClearML Server.
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__admins
value: "[\"<the name of admin group from Keycloak>\"]"
```
##### Restrict User Signup
To prevent sign in for users who do not have a matching group(s) found using the above-mentioned configuration, set the
following environment variable.
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__prohibit_user_signup_if_not_in_group
value: "true"
```
### Administrator User Role Association
For integration of an admin user role from KeyCloak into the ClearML service, do the following.
#### KeyCloak Configuration
1. For each administrator user, assign the admin role to that user in KeyCloak
2. In the `Client Scopes` tab, make sure that the `roles` claim is returned in the access token or userinfo token
(this depends on the configuration in step 1)
#### ClearML Server Configuration
By default, the ClearML Server will use the admin claim to identify administrator users. To use a different group name
for designating the admin role, set the following environment variable:
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__admin_role
value: "<admin claim name>"
```
#### Disabling Admin Role Association
To disable the automatic administrator claim and manage administrators solely from inside the ClearML WebApp, make sure
that user roles are not returned by KeyCloak in the auth token or the `userinfo` endpoint, and/or set the following
ClearML Server environment variable:
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__admin_role
value: ""
```
### Additional ClearML Server Configurations
#### KeyCloak Session Logout
To automatically log out the user from the KeyCloak provider when the user logs out of the ClearMK service, set the
following environment variable. This will make sure that the KeyCloak session is not maintained in the browser so that
when the user tries to log into the ClearML service, the KeyCloak login page will be used again and not skipped.
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__idp_logout
value: "true"
```
#### User Info Source
By default, the user info is taken from the KeyCloak access token. If you prefer to use the user info available through
the OAuths protocol `userinfo` endpoint, set the following environment variable:
```
- name: CLEARML__services__login__sso__oauth_client__keycloak__get_info_from_access_token
value: "false"
```