Amazon Relational Database Service (Amazon RDS) for PostgreSQL DB インスタンスへの接続に失敗した回数を追跡したいと考えています。
解決策
PostgreSQL は 1 時間ごとに新しいログファイルを生成します。PostgreSQL を実行する DB インスタンスへのログイン試行が失敗したことを追跡するには、log_connections パラメータをオンにします。このパラメータは、DB インスタンスに関連付けられているカスタムパラメータグループにあります。ユーザーが間違った認証情報で DB インスタンスにログインしようとすると、失敗した試行がログに記録されます。失敗した試行は次の例のようになります。"error/postgresql.log.2018-04-19-10" 詳細については、「Amazon RDS のパラメータグループ」をご参照ください。
失敗したログイン試行の次の例を参照してください。
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"
PostgreSQL log_connections パラメータを使用して、PostgreSQL を実行している DB インスタンスへの成功したログイン試行を記録することもできます。
次のログイン試行の成功例を参照してください。
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)
log_connections パラメータと log_disconnections パラメータを使用して、ユーザーのセッション時間を記録します。
セッションの所要時間については、次の例を参照してください。
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
注: クライアントマシンの IP アドレスは 123.45.67.8 で、6789 は PostgreSQL データベースプロセスに指定される PID (プロセス ID) です。
ログファイルの解析
AWS コマンドラインインターフェイス (AWS CLI) または Amazon Aurora と RDS コンソールを使用してログをダウンロードします。次に、grep ユーティリティを使用して失敗した接続を検索します。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
$ 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"
注: - B 1 パラメータは、検索しているパターンに一致する行の前にある行も表示するように grep に指示します。この例では、パターンは認証失敗です。
PostgreSQL log_fdw 拡張機能を使用して、これらのログに外部テーブルとしてアクセスすることもできます。PostgreSQL のログファイルを保持期間よりも長く保持したい場合は、Amazon RDS for PostgreSQL のログを Amazon CloudWatch Logs に発行してください。
関連情報
Amazon RDS for PostgreSQL DB インスタンスでクエリログを有効にする方法を教えてください。
RDS for PostgreSQL データベースログファイル
Exporting log data to Amazon S3 (Amazon S3 へのログデータのエクスポート)
Amazon CloudWatch Logs への Aurora PostgreSQL ログの発行