Come posso crittografare un'istanza DB Amazon RDS non crittografata per MySQL o MariaDB con tempi di inattività minimi?

6 minuti di lettura
0

Ho provato a creare una replica di lettura crittografata della mia istanza non crittografata di Amazon Relational Database Service (Amazon RDS) per MySQL o MariaDB. Tuttavia, ho ricevuto un errore. Come posso risolvere questo problema?

Breve descrizione

Amazon RDS ha le seguenti limitazioni per le istanze database crittografate:

  • Non è possibile modificare un'istanza database Amazon RDS esistente non crittografata in un'istanza crittografata.
  • Non è possibile creare una replica di lettura crittografata da un'istanza non crittografata.

Poiché non puoi crittografare un'istanza Amazon RDS esistente, devi creare una nuova istanza crittografata. Altrimenti, quando crei una replica di lettura crittografata di un'istanza Amazon RDS per MySQL non crittografata, riceverai il seguente errore:

"You cannot create an encrypted Read Replica from an unencrypted DB
            instance. (Service: AmazonRDS; Status Code: 400; Error Code:
            InvalidParameterCombination; Request ID:)"

Per crittografare un'istanza database non crittografata con tempi di inattività minimi, segui questi passaggi:

1.    Crittografa uno snapshot non crittografato ottenuto da una replica di lettura non crittografata dell'istanza database.

2.    Ripristina una nuova istanza database dallo snapshot crittografato per implementare una nuova istanza database crittografata.

3.    Usa la replica MySQL per sincronizzare le modifiche dall'origine alla nuova istanza database crittografata.

4.    Verifica che la nuova istanza database crittografata sia sincronizzata con l'istanza database di origine.

5.    Cambia le connessioni e reindirizza il traffico verso la nuova istanza database.

Risoluzione

Configurazione della replica con tempi di inattività minimi

1.    Crea una replica di lettura temporanea per l'istanza database Amazon RDS di origine non crittografata. In questo esempio, l'istanza database di origine non crittografata è denominata SOURCE-EU e la replica di lettura temporanea è denominata TEMP-RR.

2.    Connettiti a TEMP-RR e monitora il ritardo della replica finché Seconds_Behind_Master non sarà stabile al valore 0. Ciò indica che TEMP-RR è sincronizzato con SOURCE-EU:

mysql> SHOW SLAVE STATUS \G
Seconds_Behind_Master: 0

3.    Arresta il processo di replica su TEMP-RR.

MySQL > call mysql.rds_stop_replication;
+---------------------------+
| Message                   |
+---------------------------+
| Slave is down or disabled |
+---------------------------+

4.    Prendi nota dei valori di Relay_Master_Log_File e Exec_Master_Log_Pos da TEMP-RR:

mysql> SHOW SLAVE STATUS \G
Relay_Master_Log_File: mysql-bin-changelog.000012
Exec_Master_Log_Pos: 123

5.    In SOURCE-EU, imposta il parametro ore di conservazione binlog per conservare i log binari per il tempo necessario per completare l'operazione. Nell'esempio seguente, ore di conservazione binlog è impostato su 24 ore:

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

6.    Esegui uno snapshot di TEMP-RR. Facoltativamente, elimina TEMP-RR dopo aver eseguito lo snapshot.

7.    Copia lo snapshot di TEMP-RR e imposta Abilita crittografia su .

8.    Ripristina una nuova istanza database dall'istantanea copiata con crittografia abilitata. In questo esempio, la nuova istanza database crittografata è denominata NEW-RR-EN.

9.    Modifica le regole in entrata nel gruppo di sicurezza SOURCE-EU per consentire il traffico proveniente da NEW-RR-EN. Se utilizzi lo stesso gruppo di sicurezza su entrambe le istanze database, puoi utilizzare lo stesso riferimento ID del gruppo di sicurezza di SOURCE-EU.

Nota: Assicurati di consentire il traffico in uscita verso SOURCE-EU da NEW-RR-EN.

10.    Accedi a SOURCE-EU, configura un utente di replica e quindi concedi all'utente le autorizzazioni necessarie:

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: Sostituisci repl_user con il tuo nome utente di replica e password123 con la tua password.

11.    Connettiti a NEW-RR-EN e stabilisci una connessione di replica con SOURCE-EU:

mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 );

L'rds-endpoint è l'endpoint dell'istanza database per SOURCE-EU.

Il nome utente (repl_user) e la password (password123) sono il nome utente e la password che hai creato nel passaggio 10. Usa i valori di Relay_Master_Log_File e Exec_Master_Log_Pos acquisiti nel passaggio 4 per configurare la replica con la procedura mysql.rds_set_external_master.

Nota: Se SOURCE-EU è accessibile al pubblico e NEW-RR-EN (la nuova istanza database crittografata) è impostata su "privata", utilizza l'indirizzo IP privato (di SOURCE-EU) anziché quello di rds-endpoint.

12.    Da NEW-RR-EN, avvia la replica:

mysql > CALL mysql.rds_start_replication;

13.    Da NEW-RR-EN, verifica che la replica sia andata a buon fine e sia sincronizzata tra SOURCE-EU e NEW-RR-EN.

mysql> SHOW SLAVE STATUS \G

Se la connessione tra l'istanza database di origine e la replica di lettura ha esito positivo, l'output è il seguente:

Slave_IO_State: Waiting for master to send event
Seconds Behind master: 0

14.    Una volta che Seconds_Behind_Master è stabile al valore 0, interrompi il traffico e chiudi le connessioni su SOURCE-EU. Quindi inizierà il periodo di inattività.

Nota: Arresta tutti i server e i client dell'applicazione che si connettono a SOURCE-EU per assicurarti che non vengano apportate nuove modifiche a SOURCE-EU. Facoltativamente, puoi bloccare temporaneamente il gruppo di sicurezza utilizzato da SOURCE-EU. Ciò impedisce il traffico in entrata da qualsiasi applicazione o client, ad eccezione di NEW-RR-EN e dell'host da cui l'utente esegue queste azioni.

15.    Come utente master del database, connettiti a NEW-RR-EN e quindi interrompi la replica:

MySQL > call mysql.rds_stop_replication;

Importante: Dopo aver eseguito questo comando, NEW-RR-EN non replica più i dati di SOURCE-EU.

16.    Promuovi NEW-RR-EN a server autonomo interrompendo la relazione di replica tra SOURCE-EU e NEW-RR-EN:

MySQL > call mysql.rds_reset_external_master;

17.    Indirizza tutte le applicazioni, i client e le connessioni al database su NEW-RR-EN specificando l'endpoint DNS NEW-RR-EN in tutte le stringhe di connessione. In alternativa, rinomina SOURCE-EU e quindi rinomina NEW-RR-EN con lo stesso nome utilizzato da SOURCE-EU.

18.    Verifica che le regole del gruppo di sicurezza su NEW-RR-EN consentano il traffico in entrata dalle applicazioni e dai client appropriati.

19.    Dopo aver indirizzato le applicazioni e i client su NEW-RR-EN e aver testato l'ambiente, elimina SOURCE-EU.

Suggerimento: È consigliabile testare questa operazione su un'istanza di test prima di applicarla in un ambiente di produzione.


Informazioni correlate

Uso delle repliche di lettura

Come crittografo gli snapshot Amazon RDS?

Risoluzione dei problemi di replica nella documentazione di MySQL

Configurazione della replica della posizione del file di log binario con un'istanza di origine esterna