Salta al contenuto

Come posso evitare che Amazon RDS per PostgreSQL registri le mie password in chiaro nei file di log?

4 minuti di lettura
0

Desidero utilizzare Amazon Relational Database Service (Amazon RDS) per PostgreSQL per eseguire un'istruzione CREATE USER o ALTER USER. Quando lo faccio, PostgreSQL registra la mia password in chiaro nei file di log.

Breve descrizione

Puoi impostare il parametro log_statement su ddl o all, quindi eseguire uno di questi comandi:

  • CREATE ROLE/USER ... WITH PASSWORD ... ;
  • ALTER ROLE/USER ... WITH PASSWORD ... ;,

Quando lo fai, PostgreSQL crea una voce nei log di PostgreSQL. PostgreSQL registra la password in chiaro e può causare un potenziale rischio per la sicurezza.

PostgreSQL non identifica le informazioni sensibili. Questo è il comportamento normale ed è conforme al design del motore PostgreSQL.

Questo esempio esegue un'istruzione CREATE ROLE con password, quindi visualizza la password in chiaro nei log:

USER@postgresdb:pg> CREATE ROLE test_role WITH PASSWORD 'test123';
CREATE ROLE
Time: 0.003s

Output nei log:

2020-04-15 14:57:29 UTC:x.x.x.x(42918):USER@pg:[13790]:LOG: statement: CREATE ROLE test_role WITH PASSWORD 'test123'

Questo esempio esegue un'istruzione ALTER ROLE con password, quindi visualizza la password in chiaro nei log:

USER@postgresdb:pg> ALTER ROLE test_role WITH PASSWORD 'test';
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
ALTER ROLE
Time: 0.004s

Output nei log:

2020-04-15 14:59:45 UTC:x.x.x.x(42918):USER@pg:[13790]:STATEMENT: ALTER ROLE test_role SET PASSWORD 'test'

Risoluzione

Utilizza il plugin pgaudit

Utilizza l'estensione pgaudit per oscurare la password nei log di PostgreSQL.

  1. Attiva pgaudit nell'istanza Amazon RDS per PostgreSQL.
  2. Nel gruppo di parametri personalizzato, imposta il parametro pgaudit.log per specificare la classe di istruzioni da registrare. Il parametro accetta più valori, come DDL, role, write e read.

Nota: la differenza principale tra pgaudit.log='DDL' and log_statement='DDL' sta nel fatto che pgaudit, DDL non registra alcuna query CREATE/ALTER ROLE nei log di postgres.

Aggiungi ROLE a pgaudit.log per registrare CREATE/ALTER ROLE. Questo oscurerà la password.

Output nei log:

2020-07-09 13:33:50 UTC:x.x.x.x(58670):grysa@pg:[26513]:LOG:  AUDIT: SESSION,3,1,ROLE,CREATE ROLE,,,CREATE ROLE test_role WITH LOGIN
PASSWORD <REDACTED>,<not logged>

Imposta log_statement su "none" a livello di sessione all'interno di un blocco di transazioni

Per evitare che PostgreSQL registri l'intera operazione, imposta il parametro log_statement su none a livello di sessione all'interno di un blocco di transazione.

Nota: quando sia pgaudit.log che log_statement sono impostati su DDL, log_statement deve essere impostato su none a livello di sessione.

Esempio:

BEGIN;SET LOCAL log_statement = 'none';
ALTER ROLE ... WITH PASSWORD ...;
COMMIT;

Crea l'hash della password localmente

Crea l'hash della password localmente, quindi utilizzalo quando crei o modifichi il ruolo o la password utente.

Nota: l'hash creato e utilizzato per eseguire l'istruzione è sempre visibile nei log. Puoi decrittografarlo, ma non è registrato in chiaro.

Esempio:

[ec2-user@ip-x.x.x.x ~]$ username='test_1'; dbpass='test123'; echo -n "${dbpass}${username}" | md5sum | awk '{print "md5" $1}'md574e183386ccb9039d0537aeb03c03db9

USER@postgresdb:pg> CREATE ROLE test_1 WITH PASSWORD 'md574e183386ccb9039d0537aeb03c03db9';
CREATE ROLE
Time: 0.003s

Output nei log:

2020-04-15 15:12:08 UTC:x.x.x.x(42918):grysa@pg:[13790]:LOG: statement: CREATE ROLE test_1 WITH PASSWORD 'md574e183386ccb9039d0537aeb03c03db9'

Utilizza il comando \password

Con PostgreSQL puoi utilizzare la funzione**\password** integrata nel client PostgreSQL. Ti viene chiesta una nuova password quando crei o modifichi la password di un ruolo esistente. PostgreSQL registra solo l'hash per la password.

Nota: questa soluzione mostra anche l'hash della password nei log di postgres, ma non lo registra in chiaro.

Per utilizzare la funzione**\password**, esegui questo comando:

pg=> CREATE ROLE test_role NOLOGIN;CREATE ROLE
pg=> \password test_role
Enter new password:
Enter it again:
pg=> ALTER ROLE test_role LOGIN;
ALTER ROLE
pg=>

Output nei log:

2020-04-09 12:29:29 UTC:x.x.x.x(39876):grysa@pg:[1879]:LOG: statement: CREATE ROLE test_role NOLOGIN;
2020-04-09 12:30:02 UTC:x.x.x.x(39876):grysa@pg:[1879]:LOG: statement: show password_encryption
2020-04-09 12:30:02 UTC:x.x.x.x(39876):grysa@pg:[1879]:LOG: statement: ALTER USER test_role PASSWORD 'md5175cad7c36a640b1fcfa0144056923f5'
2020-04-09 12:30:30 UTC:x.x.x.x(39876):grysa@pg:[1879]:LOG: statement: ALTER ROLE test_role LOGIN;

Informazioni correlate

File di log del database RDS per PostgreSQL

Working with RDS and Aurora PostgreSQL logs: Part 1 (Utilizzo dei log di RDS e Amazon PostgreSQL: parte 1)

Come posso utilizzare l'estensione pgaudit per eseguire l'audit della mia istanza database Amazon RDS per PostgreSQL?

AWS UFFICIALEAggiornata 3 anni fa