Je souhaite suivre le nombre d’échecs de tentatives de connexion à mon instance de base de données Amazon Relational Database Service (Amazon RDS) for PostgreSQL.
Résolution
PostgreSQL génère de nouveaux fichiers journaux toutes les heures. Pour suivre les échecs de tentatives de connexion à une instance de base de données qui exécute PostgreSQL, activez le paramètre log_connections. Ce paramètre se trouve dans le groupe de paramètres personnalisés associé à l'instance de base de données. Lorsqu’un utilisateur tentera de se connecter à votre instance de base de données avec des informations d’identification incorrectes, les tentatives infructueuses seront enregistrées dans le journal. Elles ressembleront à l'exemple suivant : « error/postgresql.log.2018-04-19-10. » Pour en savoir plus, veuillez consulter la section Utilisation de groupes de paramètres.
Voici un exemple d’échec de tentative de connexion :
2018-04-19 10:12:31 UTC:123.45.67.8(6789):[unknown]@[unknown]:[12507]:LOG: connection received: host=123.45.67.8port=12345
2018-04-19 10:12:31 UTC:123.45.67.8(6789):test_user@Test_DB:[12507]:FATAL: password authentication failed for user "test_user"
Vous pouvez également utiliser le paramètre PostgreSQL log_connections pour enregistrer les tentatives de connexion réussies à une instance de base de données exécutant PostgreSQL.
Voici un exemple de tentative de connexion réussie :
2018-04-19 10:19:20 UTC:123.45.67.8(6789):[unknown]@[unknown]:[17196]:LOG: connection received: host=123.45.67.8 port=12345
2018-04-19 10:19:20 UTC:123.45.67.8(6789):test_user@Test_DB:[17196]:LOG: connection authorized: user=test_user database=Test_DB SSL enabled (protocol=xxxx, cipher=xxxx, compression=off)
Utilisez les paramètres log_connections et log_disconnections pour enregistrer la durée de la session d'un utilisateur.
Voici un exemple de durée de session :
2018-04-19 10:19:43 UTC:123.45.67.8(6789):test_user@Test_DB:[17196]:LOG: disconnection: session time: 0:00:23.753 user=test_user database=Test_DB host=123.45.67.8 port=12345
Remarque : l'adresse IP de la machine cliente est 123.45.67.8, tandis que 6789 est le PID (Process ID) attribué au processus de base de données PostgreSQL.
Analyse du fichier journal
Téléchargez le journal à l’aide de l'interface de la ligne de commande AWS (AWS CLI) ou de la console Amazon RDS. Utilisez ensuite l'utilitaire greppour rechercher les échecs de connexions :
Remarque : si des erreurs surviennent lors de l'exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente de l'interface.
$ grep -B 1 "authentication failed" postgresql.log.2018-04-19-10
2018-04-19 10:12:31 UTC:123.45.67.8(6789):[unknown]@[unknown]:[12507]:LOG: connection received: host=123.45.67.8port=12345
2018-04-19 10:12:31 UTC:123.45.67.8(6789):test_user@Test_DB:[12507]:FATAL: password authentication failed for user "test_user"
Remarque : le paramètre - B 1 indique à grep d'afficher également la ligne qui précède les lignes correspondant au modèle recherché. Dans cet exemple, le modèle est authentication failed.
Vous pouvez également utiliser l'extension PostgreSQL log_fdw pour accéder à ces journaux sous forme de tables étrangères. Si vous souhaitez conserver les fichiers journaux PostgreSQL au-delà de la période de conservation habituelle, publiez les journaux Amazon RDS for PostgreSQL dans Amazon CloudWatch Logs.
Informations connexes
Comment utiliser Amazon RDS pour activer la journalisation des requêtes pour PostgreSQL ?
Fichiers journaux de base de données RDS for PostgreSQL
Exportation de données de journal vers Amazon S3
Publication de journaux compatibles avec Aurora PostgreSQL dans CloudWatch Logs