49 lines
2.4 KiB
YAML
49 lines
2.4 KiB
YAML
|
|
---
|
||
|
|
# Role utilitaire (pas un groupe deployable) : traduit LA declaration unique dans les
|
||
|
|
# deux dialectes. Voir defaults/main.yml.
|
||
|
|
#
|
||
|
|
# Sorties (facts) :
|
||
|
|
# resoudre_politique_mdp_ldap — attributs pwd* de l'entree pwdPolicy
|
||
|
|
# resoudre_politique_mdp_keycloak — chaine `passwordPolicy` du realm
|
||
|
|
# resoudre_politique_mdp_brute — protection anti-force-brute du realm
|
||
|
|
|
||
|
|
- name: Exiger une politique coherente
|
||
|
|
ansible.builtin.assert:
|
||
|
|
that:
|
||
|
|
- resoudre_politique_mdp_longueur_min | int >= 8
|
||
|
|
- resoudre_politique_mdp_historique | int >= 0
|
||
|
|
fail_msg: >-
|
||
|
|
Politique de mot de passe incoherente : une longueur minimale sous 8 caracteres
|
||
|
|
ne protege rien, et un historique negatif n'a pas de sens.
|
||
|
|
|
||
|
|
- name: Dériver la politique dans les deux dialectes
|
||
|
|
ansible.builtin.set_fact:
|
||
|
|
resoudre_politique_mdp_ldap: >-
|
||
|
|
{{ {
|
||
|
|
'pwdAttribute': 'userPassword',
|
||
|
|
'pwdCheckQuality': '1',
|
||
|
|
'pwdMinLength': resoudre_politique_mdp_longueur_min | string,
|
||
|
|
'pwdInHistory': resoudre_politique_mdp_historique | string,
|
||
|
|
'pwdMustChange': 'TRUE' if resoudre_politique_mdp_changement_impose | bool else 'FALSE',
|
||
|
|
'pwdAllowUserChange': 'TRUE',
|
||
|
|
'pwdLockout': 'TRUE' if resoudre_politique_mdp_verrouillage_actif | bool else 'FALSE',
|
||
|
|
'pwdMaxFailure': resoudre_politique_mdp_verrouillage_echecs | string,
|
||
|
|
'pwdLockoutDuration': resoudre_politique_mdp_verrouillage_duree | string,
|
||
|
|
'pwdFailureCountInterval': resoudre_politique_mdp_verrouillage_fenetre | string,
|
||
|
|
} }}
|
||
|
|
resoudre_politique_mdp_keycloak: >-
|
||
|
|
{{ (
|
||
|
|
['length(' ~ resoudre_politique_mdp_longueur_min | int ~ ')']
|
||
|
|
+ (['passwordHistory(' ~ resoudre_politique_mdp_historique | int ~ ')']
|
||
|
|
if resoudre_politique_mdp_historique | int > 0 else [])
|
||
|
|
+ (['notUsername', 'notEmail'] if resoudre_politique_mdp_interdire_identifiant | bool else [])
|
||
|
|
) | join(' and ') }}
|
||
|
|
resoudre_politique_mdp_brute: >-
|
||
|
|
{{ {
|
||
|
|
'bruteForceProtected': resoudre_politique_mdp_verrouillage_actif | bool,
|
||
|
|
'failureFactor': resoudre_politique_mdp_verrouillage_echecs | int,
|
||
|
|
'waitIncrementSeconds': resoudre_politique_mdp_verrouillage_duree | int,
|
||
|
|
'maxFailureWaitSeconds': resoudre_politique_mdp_verrouillage_duree | int,
|
||
|
|
'maxDeltaTimeSeconds': resoudre_politique_mdp_verrouillage_fenetre | int,
|
||
|
|
} }}
|