Aller au contenu

🔐 Mise en place du SSO

🛠️ Configuration du SSO

Si vous ne souhaitez pas configuré le SSO, passez au chapitre suivant.

📋 Prérequis

Dans cet exemple, j'utilise les briques suivantes :

  • VM debian 12 dédiée à Komodo (optionnel)
  • Traefik ou un autre reverse-proxy
  • Authelia ou un autre IAM

Si vous avez désactivé l'inscription de nouveaux utilisateurs, vous devez réactiver l'option.

Extrait /srv/docker/komodo/compose.env
(...)
## Disable new user signups.
KOMODO_DISABLE_USER_REGISTRATION=false
(...)

🛠️ Configuration de Komodo

On modifie le compose.yml pour renseigner le client id et le client secret

Extrait /srv/docker/komodo/compose.yml
---
secrets:
  komodo_passkey:
    file: "./secrets/KOMODO_PASSKEY"
  komodo_webkook_secret:
    file: "./secrets/KOMODO_WEBHOOK_SECRET"
  komodo_jwt_secret:
    file: "./secrets/KOMODO_JWT_SECRET"
  komodo_oidc_client_id:
    file: "./secrets/KOMODO_OIDC_CLIENT_ID"
  komodo_oidc_client_secret:
    file: "./secrets/KOMODO_OIDC_CLIENT_SECRET"

(...)

  core:
    image: ghcr.io/moghtech/komodo-core:${COMPOSE_KOMODO_IMAGE_TAG:-latest}
    labels:
      komodo.skip: # Prevent Komodo from stopping with StopAllContainers
    restart: unless-stopped
    depends_on:
      - ferretdb
    secrets:
      - "komodo_passkey"
      - "komodo_webkook_secret"
      - "komodo_jwt_secret"
      - "komodo_oidc_client_id"
      - "komodo_oidc_client_secret"
    logging:
      driver: ${COMPOSE_LOGGING_DRIVER:-local}
    ports:
      - 9120:9120
    env_file: ./compose.env
    environment:
      KOMODO_DATABASE_ADDRESS: ferretdb
      KOMODO_PASSKEY_FILE: /run/secrets/komodo_passkey
      KOMODO_WEBHOOK_SECRET_FILE: /run/secrets/komodo_webkook_secret
      KOMODO_JWT_SECRET_FILE: /run/secrets/komodo_jwt_secret
      KOMODO_OIDC_CLIENT_ID_FILE: /run/secrets/komodo_oidc_client_id
      KOMODO_OIDC_CLIENT_SECRET_FILE: /run/secrets/komodo_oidc_client_secret
(...)

On passe maintenant à la configuration des variables d'environnement.

Extrait /srv/docker/komodo/compose.env
(...)
## OIDC Login
KOMODO_OIDC_ENABLED=true
## Must reachable from Komodo Core container
# KOMODO_OIDC_PROVIDER=https://oidc.provider.internal/application/o/komodo
KOMODO_OIDC_PROVIDER=https://iam.domaine.fr
## Change the host to one reachable be reachable by users (optional if it is the same as above).
## DO NOT include the `path` part of the URL.
KOMODO_OIDC_REDIRECT_HOST=https://iam.domaine.fr
## Make usernames the full email.
## Note. This does not work for all OIDC providers.
# KOMODO_OIDC_USE_FULL_EMAIL=true
## Add additional trusted audiences for token claims verification.
## Supports comma separated list, and passing with _FILE (for compose secrets).
# KOMODO_OIDC_ADDITIONAL_AUDIENCES=abc,123 # Alt: KOMODO_OIDC_ADDITIONAL_AUDIENCES_FILE
(...)

Avant de démarrer la stack, il faut paramétrer Authelia.

🛠️ Configuration d'Authelia

Création du client ID et du client secret
# Client ID
docker run authelia/authelia:latest authelia crypto rand --length 64 --charset alphanumeric
Random Value: yOcSAiy0x9YRVCNCABn5b2bNs0D3E8f4ap1LrWJYgNo7XGwfTlymk4SrzUfKyNcT

# Client Secret
docker run authelia/authelia:latest authelia crypto hash generate pbkdf2 --variant sha512 --random --random.length 72 --random.charset rfc3986
Random Password: _y5RqpMYCgl8.ytVJvOcBpx6aeHhdiJ-YG7NGF0Jd4makeeGgpEs3ICMoFkYhlpJ876s09rS # Mot de passe en clair
Digest: $pbkdf2-sha512$310000$JpOwFzbGZl3Fd9S0ZJb04g$p4nj7yhFKn3NzRzyzr0TvbVlFuzWhiaJjTz0HfPeq8/swDNwMXXBv/NRMsgg3agtt80if2YwIUg.0Xa98hRDAQ

Dans la configuration d'Authelia, renseignez le client Komodo :

Extrait du fichier de configuration d'Authelia
identity_providers:
  oidc:
    (...)
    clients:
      - client_id: 'yOcSAiy0x9YRVCNCABn5b2bNs0D3E8f4ap1LrWJYgNo7XGwfTlymk4SrzUfKyNcT'
        client_name: 'Komodo'
        client_secret: '$pbkdf2-sha512$310000$JpOwFzbGZl3Fd9S0ZJb04g$p4nj7yhFKn3NzRzyzr0TvbVlFuzWhiaJjTz0HfPeq8/swDNwMXXBv/NRMsgg3agtt80if2YwIUg.0Xa98hRDAQ'
        public: false
        authorization_policy: 'two_factor'
        redirect_uris:
          - 'https://komodo.domaine.fr/auth/oidc/callback'
        scopes:
          - 'openid'
          - 'email'
    (...)

Concernant Komodo, copiez le client ID et collez-le dans le fichier /srv/docker/komodo/secrets/KOMODO_OIDC_CLIENT_ID

De même, pour le mot de passe en clair du client secret, copiez-le et collez-le dans le fichier /srv/docker/komodo/secrets/KOMODO_OIDC_CLIENT_SECRET

Vous pouvez maintenant relancer la stack Komodo.

🚀 Connexion à Komodo avec OpenIDConnect

Vous remarquerez alors l'apparition du bouton OIDC sur la mire de connexion.

oidc

Cliquez dessus et connectez-vous avec votre utilisateur. Une fois authentifié, vous obtiendrez par défaut ce message :

oidc2

Cela est normal car l'option d'auto-activation des utilisateurs est désactivée dans le compose.env.

Extrait /srv/docker/komodo/compose.env
(...)
## All new logins are auto enabled
KOMODO_ENABLE_NEW_USERS=false
(...)

Par défaut, je laisse cette option désactivée. Afin d'activer ce nouveau compte, vous devez vous connecter avec le compte admin local créé précédemment puis de vous rendre dans settings > Users.

oidc3

Dans cet exemple, le nouvel utilisateur se trouve au milieu. Bizarrement, il ne récupère pas le nom d'utilisateur mais son ID. On pourra le modifier plus tard.

On constate également que cet utilisateur est Disabled. Cliquez sur cet user.

oidc4

À partir de cet interface, vous pouvez alors activier cet utilisateur avec la possibilité d'en faire un admin. Une fois activé, vous pouvez également lui affecter des permissions de manière fine.

permissions

Me concernant, j'ai passé mon utilisateur SSO en tant qu'admin. Connectez-vous maintenant avec votre utilisateur. Si comme moi Komodo a récupéré l'ID et non le nom d'utilisateur, rendez-vous alors dans Settings > Profiles et remplacez l'ID par le nom d'utilisateur.

Maintenant que l'authentification centralisée est configurée, passons à l'ajout de serveurs faisant tourner Docker et qui nous permettront de déployer des stacks.