/projetVaultPKI

Projet d'installation d'autorités de certification sous Vault 🔏

Primary LanguageHCL

Projet d'intégration d'une PKI Vault 🔐

vault-img

1 - Mise en place d'une autorité de certification SSH

Dans un système d’information l’utilisation de SSH est omniprésente pour administrer les nombreux serveurs présents dans une le système. Lorsque le nombre de serveurs et d’utilisateurs commence à augmenter, il devient extrêmement difficile de pouvoir connaître les rôles, besoins, et autorisation de chaque utilisateur sur chacun des systèmes. Originalement chaque serveur possède une liste des clés utilisateurs autorisés à accéder au terminal. Réaliser un audit global de l’ensemble du système d'information est fastidieux.

De plus, les administrateurs systèmes peuvent être confrontés à de nombreux problèmes. Les utilisateurs perdent leur clé SSH, il faut les modifier sur l’ensemble des serveurs. Le roulement des clés SSH est lent. Chaque utilisateur ne doit pouvoir accéder qu'à certains groupes de serveur spécifiquement.

Une solution est de mettre en place une autorité de certification donnant les autorisations aux utilisateurs qui en ont le droit.

Pour cela, nous allons utiliser Vault. Vault est un outil qui permet de stocker en toute sécurité des secrets. Les secrets correspondant à des données sensibles nécessitent un contrôle fin sur leur accès en lecture, comme les clés d’API, les mots de passe, les certificats, etc.

Vault n’est pas qu’un simple stockage, il gère l’ensemble du cycle de vie de vos secrets. Il peut générer des secrets à la demande pour certains systèmes, tels que les bases de données. Par exemple, Vault peut générer et révoquer également automatiquement vos certificats. De manière générale, dans vault tous les secrets de Vault sont associés à un bail. À la fin du bail, Vault révoquera automatiquement ces secrets.

Le moteur de secrets SSH de Vault fournit une authentification et une autorisation sécurisées pour l'accès aux machines via le protocole SSH. Le moteur de secrets SSH de Vault permet de gérer l'accès à l'infrastructure des machines, en fournissant plusieurs moyens d'émettre des informations d'identification SSH.

Le but final du projet est de pouvoir avoir une vision globale de l’ensemble des autorisations de chaque utilisateur et pouvoir auditer l’ensemble des accès SSH de manière centralisée.

➔ Schéma de fonctionnement du SSH Engine Vault ⛓️

Le principe d’une infrastructure à clé publique repose sur l’utilisation de la cryptographie asymétrique. Une infrastructure de gestion de clés permet de lier des clés publiques à des identités (comme des utilisateurs). Une infrastructure de gestion de clés fournit des garanties permettant de faire a priori confiance à une clé publique obtenue par son biais.

Vault possède une autorité de Certification (CA) qui est un tiers de confiance permettant d'authentifier l'identité des correspondants. Une autorité de certification délivre des certificats décrivant des identités numériques et met à disposition les moyens de vérifier la validité des certificats qu'elle a fournis par cryptographie. Chaque serveur SSH possède le certificat Vault CA. Ainsi chaque serveur reconnaît Vault comme un tier de confiance.

SSH_engine_vault

➔ Installation ⚙️

Cluster

Le cluster est composé de deux serveurs vault avec des backends raft en mode haute disponibilité. Les serveurs communiquent avec du TLS. Pour éviter du downtime en production nous avons configuré un serveur vault(trusted-vault) auquel on a confiance pour dévérouiller les serveurs du cluster de manière automatique en utilisant une clé transit. Schema indicatif

1. Configuation

Les commandes Ansible nécéssitent la configuration des fichiers (group_vars/host) et (inventory.yml).

Les commandes Terraform nécéssitent d'avoir correctement configuré la variable d'environnement VAULT_TOKEN.

2. Installation du Trusted Vault

ansible-playbook -i inventory.yml 1-trusted-vault.yml --ask-pass

Finalisation de l'installation, avec la récupération d'un token d'authorisation pour le

  • export VAULT_SKIP_VERIFY=1
  • vault operator init > initial puis déverrouiller le Trusted Vault. (vault operator unseal "unseal-key")

Configuration du Trusted Vault:

cd terraform/trusted-vault
terraform init && terraform apply
  • vault token create -policy="autounseal-policy"

Put the token in a file ansible/.secret.yml with token key.

3. Installation du cluster Vault

ansible-playbook -i inventory.yml 2-cluster-vault.yml --ask-pass

VAULT_ADDR="http://127.0.0.1:8200" vault operator init > initial

Configuration du cluster Vault:

cd terraform/cluster-vault
terraform init && terraform apply

4. Déploiement du CA PKI SSH et enregistrement de l'hôte

La dernière partie du déploiement Ansible comprend la définition et l'installation des hôtes SSH. Sur ces hôtes il est nécessaire de configurer la clé publique SSH Vault (CA Vault) puis d'enregistrer l'hôte sur le cluster Vault. De cette manière, les clients qui se connecteront sur l'hôte enregistré auront déjà le fingerprint validé par la CA Vault.

ansible-playbook -i inventory.yml 3-deploy-CA.yml --ask-pass

Ressource 📚

Liste des ressources utilisées pour mener à bien le projet: