

# Uso de SCRAM para el cifrado de contraseñas de PostgreSQL
<a name="PostgreSQL_Password_Encryption_configuration"></a>

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](https://www.postgresql.org/docs/14/auth-password.html) (Autenticación de contraseñas) en la documentación de PostgreSQL.

Le recomendamos que utilice SCRAM en lugar de MD5 como esquema de cifrado de contraseñas para su clúster de base de datos de Aurora PostgreSQL. SCRAM se admite en la versión 10 de Aurora PostgreSQL y en todas las versiones superiores, principales y secundarias. 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](https://jdbc.postgresql.org/changelogs/2018-01-17-42.2.0-release/) (Controlador JDBC de PostgreSQL) en la documentación del controlador JDBC de PostgreSQL. Para ver una lista de otros controladores de PostgreSQL y la compatibilidad con SCRAM, consulte [List of drivers](https://wiki.postgresql.org/wiki/List_of_drivers) (Lista de controladores) en la documentación de PostgreSQL.

Aurora PostgreSQL versión 14 y posteriores admite scram-sha-256 para el cifrado de contraseñas de forma predeterminada para los nuevos clústeres de base de datos. Para estas versiones, el grupo de parámetros del clúster de bases de datos predeterminado (`default.aurora-postgresql14`) tiene el valor de `password_encryption` establecido en scram-sha-256. No se admite en SCRAM para Aurora Serverless v1.

## Configuración del clúster de base de datos de Aurora PostgreSQL para que requiera SCRAM
<a name="PostgreSQL_Password_Encryption_configuration.preliminary"></a>

Para Aurora PostgreSQL 14.3 y versiones posteriores, puede requerir que el clúster de Aurora 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` y `MD5`.
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 del clúster de base de datos de RDS para PostgreSQL correspondiente a los parámetros que controlan el cifrado de las contraseñas.
+ Si el clúster de base de datos de Aurora PostgreSQL utiliza un grupo de parámetros predeterminado, deberá crear un grupo de parámetros de clúster de base de datos personalizado y aplicarlo al clúster de base de datos de Aurora PostgreSQL para poder modificar los parámetros cuando sea necesario. Si el clúster de base de datos de Aurora 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` por `scram-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` de `md5+scram` a `scram-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`. 

### Preparación para requerir SCRAM para su clúster de bases de datos de Aurora PostgreSQL
<a name="PostgreSQL_Password_Encryption_configuration.getting-ready"></a>

Antes de realizar cambios en el clúster de base de datos de Aurora 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`. Para ver qué versiones de PostgreSQL son compatibles con `rds_tools`, consulte [Versiones de extensión para Amazon RDS para PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-extensions.html).

**Para obtener una lista de usuarios de base de datos (roles) y métodos de cifrado de contraseñas**

1. Use `psql` para conectarse a la instancia principal del clúster de base de datos de Aurora PostgreSQL , tal como se muestra a continuación.

   ```
   psql --host=cluster-name-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. Instale la extensión de `rds_tools`.

   ```
   postgres=> CREATE EXTENSION rds_tools;
   CREATE EXTENSION
   ```

1. 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 del clúster de base de datos personalizado
<a name="PostgreSQL_Password_Encryption_configuration.custom-parameter-group"></a>

**nota**  
Si el clúster de base de datos de RDS para Aurora 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 Aurora, consulte [Creación de un grupo de parámetros de clúster de base de datos en Amazon Aurora](USER_WorkingWithParamGroups.CreatingCluster.md). 

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 el clúster de base de datos de Aurora 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 clúster de base de datos personalizado y aplicarlo al clúster . 

También puede utilizar la Consola de administración de AWS o la API de RDS para crear un grupo de parámetros de clúster de base de datos personalizado. Para obtener más información, consulte [Creación de un grupo de parámetros de clúster de base de datos en Amazon Aurora](USER_WorkingWithParamGroups.CreatingCluster.md). 

Ahora puede asociar el grupo de parámetros personalizado con su instancia de base de datos. 

**Para crear un grupo de parámetros del clúster de base de datosgrupo de parámetros de base de datos personalizado**

1. Utilice el comando `[create-db-cluster-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster-parameter-group.html)` de la CLI para crear el grupo de parámetros personalizado para el clúster. En el siguiente ejemplo se utiliza `aurora-postgresql13` como origen de este grupo de parámetros personalizado. 

   Para Linux, macOS o Unix:

   ```
   aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \
     --db-parameter-group-family aurora-postgresql13  --description 'Custom DB cluster parameter group for SCRAM'
   ```

   Para Windows:

   ```
   aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^
     --db-parameter-group-family aurora-postgresql13  --description "Custom DB cluster parameter group for SCRAM"
   ```

   Ahora puede asociar el grupo de parámetros personalizado con el clúster. 

1. Utilice el comando `[modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html)` de la CLI para aplicar este grupo de parámetros personalizado al clúster de base de datos de Aurora PostgreSQL.

   Para Linux, macOS o Unix:

   ```
   aws rds modify-db-cluster --db-cluster-identifier 'your-instance-name' \
           --db-cluster-parameter-group-name "docs-lab-scram-passwords
   ```

   Para Windows:

   ```
   aws rds modify-db-cluster --db-cluster-identifier "your-instance-name" ^
           --db-cluster-parameter-group-name "docs-lab-scram-passwords
   ```

   Para volver a sincronizar el clúster de base de datos de Aurora PostgreSQL con el grupo de parámetros del clúster de base de datos personalizado, reinicie la instancia principal y todas las demás instancias del clúster. 

### Configuración del cifrado de contraseñas para utilizar SCRAM
<a name="PostgreSQL_Password_Encryption_configuration.configure-password-encryption"></a>

El mecanismo de cifrado de contraseñas que utiliza un clúster de base de datos de Aurora PostgreSQL se establece en el grupo de parámetros de clúster 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 Aurora PostgreSQL: del modo que se indica a continuación:
+ Aurora PostgreSQL 14: el valor predeterminado es `scram-sha-256`
+ Aurora PostgreSQL 13: el valor predeterminado es `md5`

Con un grupo de parámetros de clúster de base de datos personalizado adjuntado al clúster de base de datos de Aurora PostgreSQL, puede modificar los valores del parámetro de cifrado de contraseñas.

![\[A continuación, la consola de RDS muestra los valores predeterminados de los parámetros password_encryption de Aurora PostgreSQL.\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/images/apg-pwd-encryption-md5-scram-1.png)


**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-cluster-parameter-group --db-cluster-parameter-group-name \
    'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'
  ```

  Para 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
<a name="PostgreSQL_Password_Encryption_configuration.migrating-users"></a>

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**

1. Inicie sesión como usuario administrador (nombre de usuario predeterminado, `postgres`) como se muestra a continuación.

   ```
   psql --host=cluster-name-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. Compruebe 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)
   ```

1. Cambie el valor de este parámetro a scram-sha-256. Para obtener más información, consulte [Configuración del cifrado de contraseñas para utilizar SCRAM](#PostgreSQL_Password_Encryption_configuration.configure-password-encryption). 

1.  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)
   ```

1. 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 privilegios `rds_superuser`). 

   ```
   labdb=> ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me';
   ALTER ROLE
   ```

1. Repita el proceso para todas las bases de datos del clúster de base de datos de Aurora PostgreSQL. 

### Cambio del parámetro para requerir SCRAM
<a name="PostgreSQL_Password_Encryption_configuration.require-scram"></a>

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 clúster de base de datos PostgreSQL de Aurora. 

Con `rds.accepted_password_auth_method` se especifica el método de cifrado que el clúster de base de datos de Aurora 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.

![\[Consola de RDS con los valores predeterminados y permitidos para los parámetros rds.accepted_password_auth_method.\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/images/pwd-encryption-md5-scram-2.png)


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**

1. Verifique que todas las contraseñas de los usuarios de base de datos del clúster de base de datos de Aurora PostgreSQL utilizan `scram-sha-256` para el cifrado de contraseña. Para ello, consulte `rds_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)
   ```

1. Repita la consulta en todas las instancias de base de datos del clúster de base de datos de Aurora PostgreSQL. 

   Si todas las contraseñas usan scram-sha-256, puede continuar. 

1. 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-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \
     --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'
   ```

   Para Windows:

   ```
   aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^
     --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"
   ```