Come posso evitare che Amazon RDS per PostgreSQL registri le mie password in chiaro nei file di log?
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.
- Attiva pgaudit nell'istanza Amazon RDS per PostgreSQL.
- 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)
- Argomenti
- Database
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 4 anni fa