PostgreSQL を実行している自分の Amazon RDS DB インスタンスで失敗したログイン試行回数を追跡するにはどうすればよいですか?

最終更新日: 2019 年 12 月 11 日

PostgreSQL を実行している Amazon Relational Database Service (Amazon RDS) DB インスタンスへの接続失敗回数を追跡する必要があります。その方法を教えてください。

解決方法

PostgreSQL は 1 時間ごとに新しいログファイルを生成します。PostgreSQL を実行している DB インスタンスへの失敗したログイン施行回数を追跡するには、その DB インスタンスに関連付けられているカスタムパラメータグループの log_connections パラメータを有効化します。詳細については、DB パラメータグループのパラメータの変更をご参照ください。log_connections パラメータの有効化後、ユーザーが誤った認証情報でお客様の DB インスタンスにログインしようとすると、失敗したログイン試行回数が、error/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"

また、PostgreSQL を実行している DB インスタンスへのログインのうち、ログインに成功した回数を記録する PostgreSQL log_connections パラメータを使用することもできます。

成功したログイン試行については、次の例をご参照ください。

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_connectionslog_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 で、PostgreSQL データベースプロセスに付与されたプロセス ID (PID) は 6789 です。

ログファイルを解析する

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 に指示するためのものです。この例のパターンは authentication failed です。

また、外部テーブルとしてこれらのログにアクセスするよう PostgreSQL log_fdw 拡張子を使用することもできます。PostgreSQL ログファイルを保持期間より長く保持する場合は、PostgreSQL バージョン 9.6.6 以降および 10.4 以降を使用すると、 Amazon RDS PostgreSQL ログを CloudWatch Logs にエクスポートできます。