¿Cómo puedo cifrar una instancia de base de datos sin cifrar de Amazon RDS para MySQL o MariaDB con un tiempo de inactividad mínimo?

7 minutos de lectura
0

He intentado crear una réplica de lectura cifrada de mi instancia sin cifrar de Amazon Relational Database Service (Amazon RDS) para MySQL o MariaDB. Sin embargo, he recibido un error.

Descripción breve

Amazon RDS tiene las siguientes limitaciones para instancias de base de datos cifradas:

  • No puede modificar una instancia de base de datos sin cifrar de Amazon RDS existente para cifrarla.
  • No puede crear una réplica de lectura cifrada a partir de una instancia sin cifrar.

Como no puede cifrar una instancia de Amazon RDS existente, debe crear una nueva instancia cifrada. De lo contrario, al crear una réplica de lectura cifrada de una instancia sin cifrar de Amazon RDS para MySQL, recibirá el siguiente error:
«You cannot create an encrypted Read Replica from an unencrypted DB instance. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID:)»

Para cifrar una instancia de base de datos sin cifrar con un tiempo de inactividad mínimo, complete los siguientes pasos:

  1. Cifre una instantánea sin cifrar que haya tomado de una réplica de lectura sin cifrar de la instancia de base de datos.
  2. Restaure una nueva instancia de base de datos a partir de la instantánea cifrada para desplegar una nueva instancia de base de datos cifrada.
  3. Utilice la replicación de MySQL para sincronizar los cambios del origen con la nueva instancia de base de datos cifrada.
  4. Compruebe que la nueva instancia de base de datos cifrada esté sincronizada con la instancia de base de datos de origen.
  5. Cambie sus conexiones y, posteriormente, redirija el tráfico a la nueva instancia de base de datos.

Resolución

Cifrar una instantánea sin cifrar

Para cifrar una instantánea sin cifrar que haya tomado de una réplica de lectura sin cifrar, complete los siguientes pasos:

  1. Cree una réplica de lectura temporal para la instancia de base de datos de origen sin cifrar de Amazon RDS. En este ejemplo, la instancia de base de datos sin cifrar de origen se denomina SOURCE-EU y la réplica de lectura temporal se denomina TEMP-RR.

  2. Conéctese a TEMP-RR y supervise el retraso de la réplica hasta que Seconds_Behind_Master esté estable en el valor 0. Este valor estable indica que TEMP-RR está sincronizado con SOURCE-EU.

    mysql> SHOW SLAVE STATUS \G
    Seconds_Behind_Master: 0
  3. Detenga el proceso de replicación en TEMP-RR:

    MySQL > call mysql.rds_stop_replication;
    +---------------------------+
    | Message                   |
    +---------------------------+
    | Slave is down or disabled |
    +---------------------------+
  4. Tenga en cuenta los valores de Relay_Master_Log_File y Exec_Master_Log_Pos de TEMP-RR:

    mysql> SHOW SLAVE STATUS \G
    Relay_Master_Log_File: mysql-bin-changelog.000012
    Exec_Master_Log_Pos: 123
  5. En SOURCE-EU, defina el parámetro de horas de retención de binlog para conservar los registros binarios durante el tiempo necesario para completar la operación. En el siguiente ejemplo, las horas de retención de binlog están establecidas en 24 horas:

    mysql> call mysql.rds_set_configuration('binlog retention hours', 24);
  6. Tome una instantánea de TEMP-RR. Si lo desea, puede eliminar TEMP-RR después de tomar la instantánea.

  7. Copie la instantánea de TEMP-RR y, posteriormente, establezca Habilitar cifrado en .

Restaurar una nueva instancia de base de datos a partir de la instantánea cifrada

Para restaurar una nueva instancia de base de datos a partir de la instantánea cifrada, complete los siguientes pasos:

  1. Restaure una nueva instancia de base de datos a partir de la instantánea copiada que tenga activado el cifrado. En este ejemplo, la nueva instancia de base de datos cifrada se denomina NEW-RR-EN.
  2. Modifique las reglas de entrada en el grupo de seguridad SOURCE-EU para permitir el tráfico desde NEW-RR-EN. Si usa el mismo grupo de seguridad en ambas instancias de base de datos, puede usar la misma referencia de ID de grupo de seguridad que SOURCE-EU.
    Nota: Permita el tráfico saliente a SOURCE-EU desde NEW-RR-EN.

Sincronizar los cambios del origen con la instancia de origen con la nueva base de datos cifrada

Para utilizar la replicación de MySQL para sincronizar los cambios del origen con la nueva instancia de base de datos cifrada, complete los siguientes pasos:

  1. Inicie sesión en SOURCE-EU.
  2. Configure un usuario de replicación y, a continuación, otorgue los permisos necesarios al usuario:
    mysql> create user 'repl_user'@'%' identified by 'password123';
    mysql> grant replication slave, replication client on *.* to 'repl_user'@'%';
    mysql> show grants for 'repl_user'@'%';
    Nota: Sustituya repl_user por su nombre de usuario de replicación y password123 por su contraseña.
  3. Conéctese a NEW-RR-EN y establezca una conexión de replicación con SOURCE-EU:
    mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 );
    Nota: Sustituya rds-endpoint con el punto de enlace de instancia de la base de datos para SOURCE-EU. Sustituya repl_user y password123 con el nombre de usuario y contraseña que creó.. Utilice los valores Relay_Master_Log_File y Exec_Master_Log_Pos para configurar la replicación con el procedimiento mysql.rds_set_external_master. Si SOURCE-EU es de acceso público y NEW-RR-EN está configurada como «privada», utilice la dirección IP privada (de SOURCE-EU) en lugar de rds-endpoint.
  4. Desde NEW-RR-EN, inicie la replicación:
    mysql > CALL mysql.rds_start_replication;

Comprobar que la instancia cifrada esté sincronizada con la instancia de origen

Para comprobar que la nueva instancia de base de datos cifrada esté sincronizada con la instancia de base de datos de origen, complete los siguientes pasos:

  1. Desde NEW-RR-EN, confirme que la replicación se llevó a cabo correctamente y que está sincronizada entre SOURCE-EU y NEW-RR-EN:

    mysql> SHOW SLAVE STATUS \G

    Si la conexión entre la instancia de base de datos de origen y la réplica de lectura es correcta, el resultado será parecido a lo siguiente:

    Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0
  2. En cuanto Seconds_Behind_Master esté estable en el valor 0, detenga el tráfico y cierre las conexiones en SOURCE-EU.
    Nota: Detenga todos los servidores de aplicaciones y los clientes que se conectan a SOURCE-EU para asegurarse de que no se hagan nuevos cambios en SOURCE-EU. Si lo desea, puede bloquear temporalmente el grupo de seguridad que utiliza SOURCE-EU. Debe evitar que el tráfico entrante desde cualquier aplicación o cliente, excepto desde NEW-RR-EN y el host desde el que el usuario lleva a cabo estas acciones.

Cambiar sus conexiones y redirigir el tráfico a la nueva instancia de base de datos

Para cambiar sus conexiones y redirigir el tráfico a la nueva instancia de base de datos, complete los siguientes pasos:

  1. Como usuario principal de la base de datos, conéctese a NEW-RR-EN y, luego, detenga la replicación:

    MySQL > call mysql.rds_stop_replication;

    Importante: Tras ejecutar este comando, NEW-RR-EN ya no replica los datos de SOURCE-EU.

  2. Para promocionar NEW-RR-EN a un servidor independiente, detenga la relación de replicación entre SOURCE-EU y NEW-RR-EN:

    MySQL > call mysql.rds_reset_external_master;
  3. Para dirigir todas las conexiones de aplicaciones, clientes y bases de datos a NEW-RR-EN, especifique el punto de enlace de DNS NEW-RR-EN en todas las cadenas de conexión. O bien, cambie el nombre de SOURCE-EU y, a continuación, modifique NEW-RR-EN para usar el mismo nombre que usa SOURCE-EU.

  4. Confirme que las reglas del grupo de seguridad de NEW-RR-EN permiten el tráfico entrante desde las aplicaciones y los clientes adecuados.

  5. Elimine SOURCE-EU.
    Nota: Se recomienda probar esta operación en una instancia de prueba antes de aplicarla en un entorno de producción

Información relacionada

Trabajo con réplicas de lectura de instancias de base de datos

¿Cómo puedo cifrar las instantáneas de Amazon RDS con una clave de KMS?

Solución de problemas de replicación en el sitio web de MySQL

Configuración de la replicación de posición de archivo de registro binario con una instancia de origen externo

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año