Essai gratuit · 14 jours · Sans engagement

Sécurité de l'agent

Comment Pierrr parle à votre serveur, et comment garder le dernier mot sur ce qu'il a le droit d'y faire.

Sécurité de la connexion

L'agent ouvre lui-même la connexion vers Pierrr, en HTTPS sortant : aucun port d'administration n'est à ouvrir sur votre serveur. La connexion est chiffrée avec la version la plus récente du protocole, et l'agent refuse toute version plus ancienne.

Depuis la version 0.0.49-beta de Pierrr, un nouveau serveur se connecte à une adresse qui lui est dédiée, agents.pierrr.com. La connexion va alors directement de votre serveur à Pierrr, sans intermédiaire, et elle est chiffrée de bout en bout. Un serveur connecté avant cette version continue de passer par api.pierrr.com. Pour le faire passer sur la nouvelle adresse, utilisez « Passer à la nouvelle adresse » sur la page du serveur dans la console : l'agent vérifie d'abord la nouvelle adresse, et revient de lui-même à l'ancienne s'il ne parvient pas à s'y reconnecter. Pierrr ne le fait jamais sans vous.

Pierrr n'envoie à l'agent que des commandes prévues à l'avance : déployer une app, lire des journaux, lancer une sauvegarde, par exemple. Ce canal ne permet pas d'exécuter une commande quelconque sur la machine.

Commandes signées

Depuis la version 0.62.0-beta, chaque commande que Pierrr envoie à l'agent est signée. L'agent garde la clé de Pierrr dès son installation, ou à sa première connexion après la mise à jour. Il refuse ensuite :

  • une commande non signée, ou signée par une autre clé ;
  • une commande déjà reçue, envoyée une seconde fois ;
  • une commande dont l'heure s'écarte de plus de dix minutes de celle de votre serveur.

Quelqu'un qui parviendrait à se placer entre Pierrr et votre serveur ne pourrait donc ni y lancer une commande, ni rejouer une commande déjà passée. Si Pierrr change un jour de clé, l'agent n'accepte la nouvelle que si l'ancienne l'a signée : vous n'avez rien à faire.

L'heure du serveur compte

Si l'horloge de votre serveur dérive de plus de dix minutes, les commandes sont refusées avec un message qui le dit, visible dans l'onglet Journal de la page du serveur. Vérifiez que la synchronisation de l'heure est active :

bash
timedatectl status

La sortie doit indiquer que l'horloge est synchronisée. Une fois l'heure corrigée, les commandes suivantes passent normalement.

Mises à jour vérifiées

L'agent ne se met jamais à jour seul, et il n'installe une nouvelle version que si elle est signée par l'une des clés qu'il connaît. Ces clés servent uniquement à signer les versions de l'agent et sont renouvelées régulièrement : l'agent connaît la clé en service et celle qui lui succédera, si bien qu'un renouvellement ne vous demande rien. Il refuse aussi toute version plus ancienne que celle en place.

Depuis la version 0.73.0-beta, cette commande affiche les empreintes des clés que votre agent accepte :

bash
pierrr-agent version

Le script d'installation vérifie la même signature avant d'installer l'agent, avec les mêmes empreintes inscrites dans le script lui-même.

Limiter ce que Pierrr peut faire sur votre serveur

Vous pouvez fixer vous-même ce que Pierrr a le droit de faire sur votre serveur, dans un fichier policy.yaml placé à côté de la configuration de l'agent : /etc/pierrr-agent/policy.yaml. Ce fichier vous appartient : Pierrr ne l'écrit jamais.

L'agent relit le fichier à chaque commande : une modification s'applique tout de suite, sans redémarrer l'agent. Sans fichier, rien n'est restreint.

Les réglages

  • mode : full (par défaut) laisse Pierrr tout faire, read-only ne lui laisse que la lecture.
  • allow (facultatif) : si la liste est présente, seules les commandes qu'elle cite sont permises.
  • deny (facultatif) : ces commandes sont toujours interdites, même si allow les cite.
  • isolateBuilds (facultatif, false par défaut) : true isole les constructions de vos applications, voir plus bas.
  • scanSummaryOnly (facultatif, false par défaut) : true réduit toutes les analyses de sécurité de ce serveur à un résumé, voir plus bas.

En lecture seule, allow ne peut que réduire la liste des lectures : il n'ajoute jamais une commande qui modifie le serveur.

Exemples

Pierrr peut seulement consulter le serveur :

yaml
mode: read-only

Pierrr peut tout faire, sauf supprimer un projet ou désinstaller l'agent depuis la console :

yaml
mode: full
deny:
  - destroy-project
  - self-destruct

Une liste allow bloque tout ce qu'elle ne cite pas, y compris les opérations que Pierrr enchaîne pour vous : un déploiement, par exemple, passe par plusieurs commandes. Après l'avoir posée, lancez l'opération concernée et vérifiez le journal des commandes.

Isoler les constructions

Une construction exécute les étapes écrites dans le dépôt de votre application. Avec isolateBuilds: true, l'outil qui construit vos applications ne peut plus joindre le serveur lui-même ni les réseaux privés auxquels il est relié : réseau local, adresses internes de votre hébergeur, service d'information d'instance d'un fournisseur cloud, applications déjà en ligne sur le serveur. Il garde Internet pour télécharger les dépendances, la résolution des noms, et les ports publics 80 et 443 du serveur, pour qu'une construction qui lit votre propre site continue de fonctionner. C'est le réglage des serveurs de Pierrr.

yaml
mode: full
isolateBuilds: true

L'agent applique ces règles avant chaque construction et les retire dès que le réglage repasse à false. Il doit tourner en administrateur du serveur, ce qui est le cas de l'installation standard. S'il ne peut pas les appliquer, la construction est refusée plutôt que lancée sans elles, avec la raison dans le journal des commandes.

Une construction qui a besoin d'une machine de votre réseau privé (un registre de paquets interne, par exemple) échouera avec ce réglage : laissez-le à false dans ce cas.

Analyses en résumé seul

Par défaut, une analyse de sécurité fait remonter pour chaque constat son identifiant, sa gravité, le fichier ou le paquet concerné et un court message, sans jamais un extrait de votre code. En résumé seul, seuls l'identifiant et la gravité de chaque constat quittent le serveur : ni chemin de fichier, ni paquet, ni ligne, ni message. La console compte les constats par gravité et liste leurs identifiants ; le détail reste sur votre serveur.

yaml
mode: full
scanSummaryOnly: true

Le réglage se change depuis l'onglet Réglages de la page du serveur dans la console, ou s'impose depuis ce fichier avec scanSummaryOnly: true : il vaut alors quelle que soit la demande de la console. Un agent trop ancien pour produire le résumé ne lance plus aucune analyse tant qu'il n'est pas mis à jour.

Ce que permet la lecture seule

En mode read-only, Pierrr peut encore lire l'état du serveur et de ses conteneurs, leurs journaux, l'espace occupé par les volumes, et télécharger une sauvegarde existante. Tout le reste est refusé, y compris ce que Pierrr lance de lui-même : aucun déploiement, aucune nouvelle sauvegarde, même programmée, et aucune mise à jour de l'agent depuis Pierrr. Pour mettre l'agent à jour, repassez en full le temps de l'opération.

Un fichier illisible ou mal écrit (un mode inconnu, par exemple) vaut lecture seule : une erreur dans le fichier ne donne jamais plus de droits à Pierrr.

Voir une commande refusée

Une commande refusée par votre politique apparaît dans le journal des commandes, dans l'onglet Journal de la page du serveur : elle est marquée en échec, avec la raison du refus sous son libellé.

Noms des commandes

Le journal des commandes affiche chaque commande sous un libellé. Dans le fichier, écrivez son nom, tel qu'il figure dans les tableaux ci-dessous.

Commandes de lecture, permises en lecture seule

Nom dans le fichierLibellé dans le journal
fetch-logsLecture des logs
health-snapshotRelevé de santé
list-managed-resourcesInventaire des ressources
push-backupTéléchargement d'une sauvegarde
volume-usageMesure d'un volume
stream-agent-logsOuverture des logs de l'agent
stop-agent-logsFermeture des logs de l'agent

Commandes qui modifient le serveur

Nom dans le fichierLibellé dans le journal
deploy-appDéploiement d'une app
build-imageConstruction d'une image
restart-appRedémarrage d'une app
stop-appArrêt d'une app
scale-appMise à l'échelle d'une app
delete-appSuppression d'une app
destroy-projectSuppression d'un projet
install-wordpressInstallation de WordPress
import-remote-dbImport d'une base de données
run-backupSauvegarde
restore-backupRestauration d'une sauvegarde
purge-backupsNettoyage des sauvegardes
run-scanAnalyse de sécurité
set-limitsRéglage des limites
updateMise à jour de l'agent
restart-agentRedémarrage de l'agent
self-destructDésinstallation de l'agent

Les autres commandes servent à l'entretien du serveur par Pierrr : routage, domaines, réseaux. Les interdire peut empêcher vos applications d'être joignables, mieux vaut les laisser permises.