PostgreSQL DB インスタンス用の Amazon Relational Database Service (Amazon RDS) への接続に失敗した回数を追跡したいと考えています。
解決策
PostgreSQL は 1 時間ごとに新しいログファイルを生成します。PostgreSQL を実行する DB インスタンスへのログインが失敗したことを追跡するには、log_connections パラメーターをオンにします。パラメーターは、DB インスタンスに関連付けられているカスタムパラメータグループにあります。ユーザーが間違った認証情報で DB インスタンスにログインしようとすると、失敗した試行が error.log にキャプチャされます。失敗した試行は次の例のようになります。「error/postgresql.log.2018-04-19-10」 詳細については、「DB パラメータグループを使用する」をご参照ください。
失敗したログイン試行の次の例を参照してください。
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 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 ログにパブリッシュしてください。
関連情報
Amazon RDS を使用して PostgreSQL のクエリロギングを有効にする方法を教えてください。
RDS for PostgreSQL データベースログファイル
Amazon S3 へのログデータのエクスポート
Aurora PostgreSQL 互換のログを CloudWatch ログに公開