Uso de SCRAM para el cifrado de contraseñas de PostgreSQL
El mecanismo de autenticación mediante desafío-respuesta discontinuo (SCRAM) es una alternativa al algoritmo de resumen de mensajes (MD5) predeterminado de PostgreSQL para cifrar contraseñas. El mecanismo de autenticación SCRAM se considera más seguro que MD5. Para obtener más información sobre estos dos enfoques diferentes para proteger las contraseñas, consulte Password Authentication
Le recomendamos que utilice SCRAM en lugar de MD5 como esquema de cifrado de contraseñas para su . Instancia de base de datos RDS para PostgreSQL. Es un mecanismo criptográfico de desafío-respuesta que utiliza el algoritmo scram-sha-256 algorithm para la autenticación y el cifrado de contraseñas.
Es posible que deba actualizar las bibliotecas de las aplicaciones cliente para que sean compatibles con SCRAM. Por ejemplo, las versiones de JDBC anteriores a la 42.2.0 no admiten SCRAM. Para obtener más información, consulte PostgreSQL JDBC Driver
nota
RDS para PostgreSQL versión 13.1 y posteriores admite scram-sha-256. Estas versiones también le permiten configurar la instancia de la base de datos para que requiera SCRAM, como se explica en los siguientes procedimientos.
Configuración de la instancia de base de datos de Aurora para que requiera SCRAM
puede requerir que la instancia de RDS para PostgreSQL DB acepte únicamente contraseñas que utilicen el algoritmo scram-sha-256.
importante
En el caso de los proxies RDS existentes con bases de datos de PostgreSQL, si modifica la autenticación de la base de datos para utilizar únicamente SCRAM
, el proxy dejará de estar disponible durante un máximo de 60 segundos. Para evitar este problema, lleve a cabo alguna de las siguientes operaciones:
Asegúrese de que la base de datos permita la autenticación
SCRAM
yMD5
.Para utilizar únicamente la autenticación
SCRAM
, cree un nuevo proxy, migre el tráfico de la aplicación al nuevo proxy y, a continuación, elimine el proxy previamente asociado a la base de datos.
Antes de realizar cambios en el sistema, asegúrese de entender el proceso completo, como se indica a continuación:
Obtenga información sobre todos los roles y el cifrado de las contraseñas de todos los usuarios de la base de datos.
Compruebe de nuevo la configuración de los parámetros de la instancia de base de datos de Aurora correspondiente a los parámetros que controlan el cifrado de las contraseñas.
Si la instancia de base de datos de RDS para PostgreSQL utiliza un grupo de parámetros predeterminado, deberá crear un grupo de parámetros de base de datos personalizado y aplicarlo a la instancia de base de datos de RDS para PostgreSQL para poder modificar los parámetros cuando sea necesario. Si la instancia de base de datos de RDS para PostgreSQL utiliza un grupo de parámetros personalizado, puede modificar los parámetros necesarios más adelante en el proceso, según sea necesario.
-
Cambie el parámetro
password_encryption
porscram-sha-256
. -
Notifique a todos los usuarios de la base de datos que deben actualizar las contraseñas. Haga lo mismo con su cuenta de
postgres
. Las nuevas contraseñas se cifran y almacenan mediante el algoritmo scram-sha-256. Verifique que todas las contraseñas están cifradas con el tipo de cifrado.
-
Si todas las contraseñas utilizan scram-sha-256, puede cambiar el parámetro
rds.accepted_password_auth_method
demd5+scram
ascram-sha-256
.
aviso
Después de cambiar rds.accepted_password_auth_method
a scram-sha-256 únicamente, no podrá conectarse ningún usuario (rol) con una contraseña cifrada con md5
.
Preparativos para requerir SCRAM en la instancia de base de datos de RDS para PostgreSQL
Antes de realizar cambios en la instancia de RDS para PostgreSQL, compruebe todas las cuentas de usuario de base de datos existentes. Compruebe también el tipo de cifrado utilizado para las contraseñas. Puede hacer estas tareas con la extensión rds_tools
. Esta extensión se admite en RDS para PostgreSQL 13.1 y versiones posteriores.
Para obtener una lista de usuarios de base de datos (roles) y métodos de cifrado de contraseñas
Use
psql
para conectarse a la instancia de base de datos de RDS para PostgreSQL, tal como se muestra a continuación.psql --host=
db-name.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordInstale la extensión de
rds_tools
.postgres=>
CREATE EXTENSION rds_tools;
CREATE EXTENSION
Obtenga una lista de los roles y el cifrado.
postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();Se muestra una salida similar a la siguiente.
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)
Creación de un grupo de parámetros de base de datos personalizado
nota
Si la instancia de base de datos de RDS para PostgreSQL ya utiliza un grupo de parámetros personalizado, no necesita crear uno nuevo.
Para obtener información general sobre los grupos de parámetros para Amazon RDS, consulte Uso de parámetros en su instancia de base de datos de RDS for PostgreSQL.
El tipo de cifrado de contraseñas que se usa para las contraseñas se establece a un parámetro, password_encryption
. El cifrado que permite la instancia de base de datos de RDS para PostgreSQL se establece a otro parámetro, rds.accepted_password_auth_method
. Para cambiar cualquiera de los valores predeterminados, es necesario crear un grupo de parámetros de base de datos personalizado y aplicarlo a la instancia.
También puede utilizar la AWS Management Console o la API de RDS para crear un grupo de parámetros de base de datos personalizado. Para obtener más información, consulte
Ahora puede asociar el grupo de parámetros personalizado con su instancia de base de datos.
Para crear un grupo de parámetros de base de datos personalizado
Utilice el comando
create-db-parameter-group
de la CLI para crear el grupo de parámetros de base de datos personalizado. En este ejemplo se utilizapostgres13
como origen de este grupo de parámetros personalizado.Para Linux, macOS o:Unix
aws rds create-db-parameter-group --db-parameter-group-name '
docs-lab-scram-passwords
' \ --db-parameter-group-family postgres13 --description 'Custom parameter group for SCRAM
'En:Windows
aws rds create-db-parameter-group --db-parameter-group-name "
docs-lab-scram-passwords
" ^ --db-parameter-group-family postgres13 --description "Custom DB parameter group for SCRAM
"Utilice el comando
modify-db-instance
de la CLI para aplicar este grupo de parámetros personalizado al clúster de base de datos de RDS para PostgreSQL.Para Linux, macOS o:Unix
aws rds modify-db-instance --db-instance-identifier '
your-instance-name
' \ --db-parameter-group-name "docs-lab-scram-passwords
En:Windows
aws rds modify-db-instance --db-instance-identifier "
your-instance-name
" ^ --db-parameter-group-name "docs-lab-scram-passwords
Para volver a sincronizar la instancia de base de datos de RDS para PostgreSQL con el grupo de parámetros de base de datos personalizado, debe reiniciar la instancia principal y todas las demás instancias del clúster. Para minimizar el impacto en sus usuarios, programe esto para que se produzca durante su periodo de mantenimiento regular.
Configuración del cifrado de contraseñas para utilizar SCRAM
El mecanismo de cifrado de contraseñas que utiliza una instancia de base de datos de RDS para PostgreSQL se establece al grupo de parámetros de base de datos en el parámetro password_encryption
. Los valores permitidos son: no establecido, md5
o scram-sha-256
. El valor predeterminado depende de la versión de RDS para PostgreSQL del modo que se indica a continuación:
RDS para PostgreSQL 14 y versiones posteriores: el valor predeterminado es
scram-sha-256
RDS para PostgreSQL 13: el valor predeterminado es
md5
Con un grupo de parámetros de base de datos personalizado adjuntado a la instancia de base de datos de RDS para PostgreSQL, puede modificar los valores del parámetro de cifrado de contraseñas.
Para cambiar la configuración de cifrado de contraseñas a scram-sha-256
Cambie el valor del cifrado de contraseñas a scram-sha-256, como se muestra a continuación. El cambio se puede aplicar inmediatamente porque el parámetro es dinámico, por lo que no se requiere un reinicio para que el cambio surta efecto.
Para Linux, macOS o:Unix
aws rds modify-db-parameter-group --db-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'
En:Windows
aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"
Migración de las contraseñas de los roles de usuario a SCRAM
Puede migrar las contraseñas de los roles de usuario a SCRAM, tal y como se describe a continuación.
Para migrar las contraseñas de usuario (rol) de base de datos de MD5 a SCRAM
Inicie sesión como usuario administrador (nombre de usuario predeterminado,
postgres
) como se muestra a continuación.psql --host=
db-name.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordCompruebe la configuración del parámetro
password_encryption
en la instancia de base de datos de RDS para PostgreSQL con el siguiente comando.postgres=>
SHOW password_encryption;
password_encryption --------------------- md5 (1 row)
Cambie el valor de este parámetro a scram-sha-256. Se trata de un parámetro dinámico, por lo que no es necesario reiniciar la instancia después de realizar este cambio. Compruebe de nuevo el valor para asegurarse de que ahora está establecido en
scram-sha-256
, como se indica a continuación.postgres=>
SHOW password_encryption;
password_encryption --------------------- scram-sha-256 (1 row)
Notifique a todos los usuarios de base de datos que deben cambiar la contraseña. Asegúrese de cambiar también su propia contraseña para la cuenta
postgres
(el usuario de base de datos con privilegiosrds_superuser
).labdb=>
ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me';ALTER ROLE
Repita el proceso para todas las bases de datos del Instancia de base de datos RDS para PostgreSQL.
Cambio del parámetro para requerir SCRAM
Este es el último paso del proceso. Después de realizar el cambio en el siguiente procedimiento, ninguna cuenta de usuario (rol) que aún utilice el cifrado md5
para las contraseñas podrá iniciar sesión en el . Instancia de base de datos RDS para PostgreSQL.
Con rds.accepted_password_auth_method
se especifica el método de cifrado que la instancia de base de datos de RDS para PostgreSQL acepta una contraseña de usuario durante el proceso de inicio de sesión. El valor predeterminado es md5+scram
, lo que significa que se acepta cualquiera de los dos métodos. En la siguiente imagen, puede encontrar la configuración predeterminada de este parámetro.
Los valores permitidos para este parámetro son:md5+scram
o scram
solo. El cambio de este valor de parámetro a scram
lo convierte en un requisito.
Para cambiar el valor de parámetro para requerir la autenticación SCRAM para las contraseñas
Verifique que todas las contraseñas de los usuarios de base de datos de la instancia de base de datos de RDS para PostgreSQL utilizan
scram-sha-256
para el cifrado de contraseña. Para ello, consulterds_tools
para el rol (usuario) y el tipo de cifrado, de la siguiente manera.postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
Repita la consulta en todas las instancias de base de datos del Instancia de base de datos RDS para PostgreSQL.
Si todas las contraseñas usan scram-sha-256, puede continuar.
Cambie el valor de la autenticación de contraseña aceptada a scram-sha-256, como se indica a continuación.
Para Linux, macOS o:Unix
aws rds modify-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'
En:Windows
aws rds modify-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"