Gestion des profils de sécurité
###############################

La solution logicielle :term:`VITAM` permet de gérer des profils de sécurité.

Le profil se base sur un contexte, lui-même basé sur une/des certificat(s).

Le processus d'installation met en place le profil de sécurité d'administration, qu'il est fortement recommandé de laisser "tel quel", car ce dernier est utilisé pour des actes d'exploitation.

Il n'existe actuellement pas de point d'API permettant de mettre à jour des profils de sécurité directement dans leur globalité, il sera donc nécessaire de les supprimer puis de l'ajouter à nouveau selon la procédure ci-dessous.

Hiérarchie : profils de sécurité, contextes et certificats
==========================================================

Afin d'avoir une vue ensembliste sur la relation entre les profils de sécurité, les contextes et les certificats déjà importés dans :term:`VITAM`, il est
possible d'avoir une liste complète des données de ces collections, en tenant compte de leur interdépendance.

Cette action est faite en lançant le playbook comme suit :

    ansible-playbook ansible-vitam-exploitation/listing_securityProfiles_contexts_certificates_hierarchy.yml -i environments/hosts.<environnement> --ask-vault-pass

.. note:: Les certificats personnels ne sont pas pris en compte dans ce listage, vu qu'ils dépendent plutôt du client connecté et non pas du contexte.

Ajout/Suppression de profils de sécurité
========================================

.. warning:: Cette version est encore en cours de mise en place et est susceptible d'évoluer.

Configuration
-------------

Un playbook d'exploitation permet de rajouter des profils de sécurité.

Sur la machine de déploiement, il est nécessaire de configurer le fichier ``deployment/environments/group_vars/all/main/postinstall_param.yml``, dans la section ``vitam_additional_securityprofiles``.

Exemple :

  .. literalinclude:: ../../../../deployment/environments/group_vars/all/main/postinstall_param.yml
    :language: yaml
    :linenos:

.. note:: les certificats devraient être de type ``external/${fichier crt}``.

Ajout des fichiers crt
----------------------

Placer les certificats précédemment renseignés (fichiers crt) dans {{inventory_dir}}/certs/client-external/clients/external/.

Lancement du playbook
---------------------

* L'ajout de tous les profils de sécurité renseignés dans postinstall_param.yml se fait en lançant le playbook comme suit :

    ansible-playbook ansible-vitam-exploitation/add_contexts.yml -i environments/hosts.<environnement> --ask-vault-pass

.. caution:: Ce playbook ne sait gérer que le cas d'ajout de profils/contextes/... . Il convient de s'assurer au préalable que les champs `name` et `identifier` à ajouter n'existent pas déjà dans la solution logicielle :term:`VITAM`.

* L'ajout d'un seul profil de sécurité issu du fichier postinstall_param.yml se fait en lançant le playbook comme suit :

    ansible-playbook ansible-vitam-exploitation/add_contexts.yml -i environments/hosts.<environnement> -e security_profile_id="<security_profile_id>" --ask-vault-pass 

* La suppression de tous les profils de sécurité se fait en lançant le playbook comme suit :

    ansible-playbook ansible-vitam-exploitation/remove_contexts.yml -i environments/hosts.<environnement> --ask-vault-pass

.. caution:: Ce playbook supprime l'ensemble des profils/contextes définis dans le fichier ``environments/group_vars/all/main/postinstall_param.yml``.

* La suppression d'un seul profil de sécurité se fait en lançant le playbook comme suit :

     ansible-playbook ansible-vitam-exploitation/remove_contexts.yml -i environments/hosts.<environnement> -e security_profile_id="<security_profile_id>" --ask-vault-pass

.. caution:: Les opérations sur le contexte de sécurité admin-context sont interdites car réservé à Vitam.

* L'ajout d'un certificat pour un profil de sécurité existant se fait de la manière suivante :

    ansible-playbook ansible-vitam-exploitation/update_context.yml -i environments/hosts.<environnement> -e security_profile_id="<security_profile_id>" --ask-vault-pass

.. caution:: Le profil de sécurité doit exister et il ne faut pas que plusieurs certificats identiques soient insérés !

Reconfiguration de VITAM
------------------------

À l'issue de la bonne exécution du playbook, il faut relancer un déploiement partiel de :term:`VITAM` pour les groupes ansible ``[hosts_ingest_external]`` et ``[hosts_access_external]``

Si utilisation de la PKI de tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

La procédure décrite ci-dessous est à appliquer dans le cas où la :term:`PKI` de tests a été employée.

Ajouter les informations relatives au(x) certificat(s) supplémentaire(s) via la commande ::

  ansible-vault edit environments/certs/vault-certs.yml --ask-vault-pass

Ajouter un couple clef/valeur pour chaque certificat supplémentaire selon le modèle suivant ::

  client_client-external_<nom complet du fichier crt avec extension>_key: <la valeur du mot de passe>

Exemple:

  client_client-external_appliexterne.crt_key: Motd3P@sse!

.. note:: appliexterne ne doit pas contenir de caractère "-"

.. warning:: Si le certificat à ajouter a été généré avec une :term:`CA` non-connue de VITAM, il faut ajouter au bon endroit la clé publique (se référer au :term:`DIN` pour plus d'informations).

.. caution:: Un fichier ``crt`` ne doit contenir qu'une clef publique

Ensuite, regénérer les *stores* Java avec les certificats supplémentaires (script ``generate_stores.sh`` ; se référer au :term:`DIN` pour plus d'informations)

Cas d'une autre PKI
~~~~~~~~~~~~~~~~~~~

Mettre à jour les *stores* java avec les certificats supplémentaires à *truster*.

Application des *stores* mis à jour
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Rejeu du déploiement en limitant aux groupes ansible ``[hosts_ingest_external]`` et ``[hosts_access_external]`` et avec le tag ansible ``update_vitam_certificates``.

Exemple:

    ansible-playbook ansible-vitam/vitam.yml -i environments/hosts.<environnement> --ask-vault-pass --limit hosts_ingest_external,hosts_access_external --tags update_vitam_certificates
