Aller au contenu principal

Configurer la Navin Platform pour la première fois

Cette page mène une nouvelle installation jusqu'à une plateforme utilisable : premier administrateur, tenants, administrateurs de chaque tenant et authentification unique avec Keycloak (avec LDAP ou Active Directory derrière). Elle est réalisée par l'administrateur de la plateforme (rôle platform_admin).

Avant de commencer​

  • L'installation est vérifiée : GET /readyz répond ready (Vérifier).
  • Le mot de passe d'installation du premier administrateur :
    • paquets OS : sudo grep '^EAI_BOOTSTRAP_ADMIN_PASSWORD=' /etc/navin-platform/platform.env ;
    • Docker Compose et make : EAI_BOOTSTRAP_ADMIN_PASSWORD de deploy/compose/.env ou de local.env ;
    • Kubernetes : placez EAI_BOOTSTRAP_ADMIN_USERNAME et EAI_BOOTSTRAP_ADMIN_PASSWORD dans le secret du Control Plane le temps de la première connexion seulement.

Étapes​

  1. Se connecter avec le compte d'installation. L'API crée le compte au démarrage s'il n'existe pas, avec les rôles platform_admin et tenant_admin sur le tenant EAI_BOOTSTRAP_TENANT (default). Ouvrez le portail, onglet Identifiant, et connectez-vous.

    Résultat attendu : le portail demande un nouveau mot de passe (12 caractères minimum par défaut, EAI_LOCAL_PASSWORD_MIN_LENGTH). Le mot de passe d'installation cesse de fonctionner.

    En cas d'échec : account_locked après 5 mots de passe erronés (EAI_LOCAL_AUTH_MAX_FAILURES), attendez 15 minutes (EAI_LOCAL_AUTH_LOCKOUT_SECONDS).

    attention

    En production, l'API refuse un mot de passe d'installation faible (navin, l'identifiant, moins de 12 caractères, sans lettres et chiffres). Retirez EAI_BOOTSTRAP_ADMIN_PASSWORD des réglages une fois que le premier administrateur a choisi son mot de passe : un démarrage ultérieur ne réinitialise jamais le compte.

  2. Créer les tenants. Un tenant (organisation) isole les données, les politiques, les budgets et la piste d'audit (sécurité au niveau des lignes dans PostgreSQL). Créez-en un par entité de la banque, dans le portail ou avec l'API :

    TOKEN=$(curl -fsS <control-plane-url>/v1/auth/login -H 'Content-Type: application/json' \
    -d '{"username": "navin", "password": "<mot-de-passe>"}' | jq -r .token)
    curl -fsS <control-plane-url>/v1/tenants -H "Authorization: Bearer $TOKEN" \
    -H 'Content-Type: application/json' \
    -d '{"slug": "retail", "name": "Banque de détail", "data_residency": "eu", "admins": []}'

    slug : lettres minuscules, chiffres et -, de 2 à 63 caractères. admins : sujets (OIDC sub) qui reçoivent tenant_admin.

    Résultat attendu : 201 avec le tenant ; GET /v1/tenants le liste.

    En cas d'échec : 409 quand le slug existe ; 403 sans platform_admin.

  3. Raccorder Keycloak. L'API valide les jetons du realm ; le portail y redirige (code d'autorisation avec PKCE, client public portal, URI de redirection <URL du portail>/auth/callback). Le realm deploy/keycloak/realm-enterprise-ai.json déclare les clients portal, control-plane et cli, les rôles du realm et les groupes navin-platform-admins et navin-admins-default.

    Réglages de l'API (paquets : platform.env ; Kubernetes : controlPlane.config) :

    EAI_OIDC_ISSUER='https://<keycloak-host>/realms/enterprise-ai'
    EAI_OIDC_AUDIENCE='<audience>'
    EAI_OIDC_JWKS_URL='https://<keycloak-host>/realms/enterprise-ai/protocol/openid-connect/certs'

    Réglages du portail : NEXT_PUBLIC_EAI_OIDC_ISSUER (ou NEXT_PUBLIC_OIDC_ISSUER) et NEXT_PUBLIC_EAI_OIDC_CLIENT_ID (ou NEXT_PUBLIC_OIDC_CLIENT_ID, par défaut portal).

    <audience> : l'audience que portent les jetons de votre realm ; les valeurs Helm utilisent control-plane, le client de l'API dans le realm.

    Résultat attendu : la page de connexion affiche Connexion SSO et un utilisateur Keycloak arrive sur le portail.

    En cas d'échec : un 401 avec une session Keycloak valide signifie une audience ou un émetteur erroné ; comparez avec les claims iss et aud du jeton.

  4. Fédérer l'annuaire. Keycloak lit LDAP ou Active Directory en lecture seule et importe ses groupes ; l'API les reçoit dans les claims groups et entra_groups et applique les correspondances à chaque connexion (EAI_OIDC_GROUP_SYNC). Les administrateurs viennent des groupes :

    GroupeRôle donné
    navin-platform-admins (EAI_OIDC_PLATFORM_ADMIN_GROUPS)platform_admin
    navin-admins-<slug du tenant> (EAI_OIDC_TENANT_ADMIN_GROUP_PREFIX)tenant_admin de ce tenant

    Les noms sont comparés sans tenir compte de la casse. Pour garder les noms de votre annuaire, changez les deux réglages.

    Résultat attendu : un membre de navin-admins-retail se connecte en tenant_admin de retail.

  5. Désactiver la connexion locale. Une fois le SSO opérationnel pour au moins deux administrateurs :

    EAI_LOCAL_AUTH_ENABLED='false'

    Résultat attendu : POST /v1/auth/login répond 403 local_auth_disabled.

  6. Activer la licence. Écran Licences du portail, ou POST /v1/license/activations ; les clés publiques de l'éditeur sont EAI_LICENSE_PUBLIC_KEYS. Voir Licences.

Vérifier​

curl -fsS <control-plane-url>/v1/identity/whoami -H "Authorization: Bearer <jeton>"

<jeton> : jeton d'accès d'un utilisateur Keycloak. Sortie attendue : le sujet, son tenant et ses rôles.

Étapes suivantes​

Dépannage​

SymptômeCauseCorrection
tenant_suspended à la connexionLe status du tenant est suspendedPATCH /v1/tenants/{tenant_id} avec {"status": "active"}
Un administrateur de l'annuaire n'a aucun rôleLe nom du groupe diffèreRenommez le groupe ou changez EAI_OIDC_*_ADMIN_*
Un administrateur de plusieurs tenants n'arrive sur aucunJeton sans claim de tenantFixez l'attribut Keycloak tenant de l'utilisateur