Como posso rastrear tentativas malsucedidas de fazer login na minha instância de banco de dados Amazon RDS para PostgreSQL?

3 minuto de leitura
0

Quero rastrear o número de conexões malsucedidas na minha instância de banco de dados Amazon Relational Database Service (Amazon RDS) para PostgreSQL.

Resolução

O PostgreSQL gera novos arquivos de log a cada hora. Para rastrear tentativas fracassadas de fazer login em uma instância de banco de dados que executa o PostgreSQL, ative o parâmetro log_connections. O parâmetro é encontrado no grupo de parâmetros personalizados associado à instância de banco de dados. Então, se um usuário tentar fazer login na sua instância de banco de dados com as credenciais erradas, as tentativas malsucedidas serão registradas no log. As tentativas malsucedidas são semelhantes ao exemplo a seguir: "error/postgresql.log.2018-04-19-10." Para obter mais informações, consulte Trabalhar com grupos de parâmetros.

Veja o exemplo a seguir de uma tentativa malsucedida de login:

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"

Você também pode usar o parâmetro log_connections do PostgreSQL para registrar tentativas de login bem-sucedidas em uma instância de banco de dados que esteja executando o PostgreSQL.

Veja o exemplo a seguir de uma tentativa bem-sucedida de login:

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)

Use os parâmetros log\ _connections e log\ _disconnections para registrar a duração da sessão de um usuário.

Veja o exemplo a seguir para saber a duração de uma sessão:

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

Observação: o endereço IP da máquina cliente é 123.45.67.8 e 6789 é o PID (ID do processo) fornecido ao processo do banco de dados PostgreSQL.

Analisando o arquivo de log

Use a AWS Command Line Interface (AWS CLI) ou o console Amazon RDS para baixar o log. Em seguida, use o utilitário grep para pesquisar as conexões malsucedidas:

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da 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"

Observação: o parâmetro - B 1 diz ao grep que também mostre a linha que precede as linhas que correspondem ao padrão que você está procurando. Neste exemplo, o padrão é falha na autenticação.

Você também pode usar a extensão log\ _fdw do PostgreSQL para acessar esses logs como tabelas externas. Se você quiser manter os arquivos de log do PostgreSQL por mais tempo do que o período de retenção, publique os logs do Amazon RDS para PostgreSQL nos logs do Amazon CloudWatch.

Informações relacionadas

Como uso o Amazon RDS para ativar o log de consultas para o PostgreSQL?

Arquivos de log do banco de dados do PostgreSQL

Exportação de dados do log para o Amazon S3

Publicação de registros compatíveis com o Aurora PostgreSQL no CloudWatch Logs