Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

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.

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, completa i seguenti 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 quindi reindirizza il traffico verso la nuova istanza database.

Soluzione

Crittografa uno snapshot non crittografato

Per crittografare uno snapshot non crittografato ottenuto da una replica di lettura non crittografata, completa i seguenti passaggi:

  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. Il valore stabile 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 quindi imposta Abilita crittografia su .

Ripristina una nuova istanza database dallo snapshot crittografato

Per ripristinare una nuova istanza database dallo snapshot crittografato, completa i seguenti passaggi:

  1. Ripristina una nuova istanza database dallo snapshot copiato con crittografia attivata. In questo esempio, la nuova istanza database crittografata è denominata NEW-RR-EN.
  2. 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.

Sincronizza le modifiche dall'istanza di origine alla nuova istanza crittografata

Per utilizzare la replica MySQL per sincronizzare le modifiche dall'origine alla nuova istanza database crittografata, completa i seguenti passaggi:

  1. Accedi a SOURCE-EU.
  2. Configura un’utente di replica, quindi concedi a tale 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.
  3. 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 );
    Nota: sostituisci rds-endpoint con l'endpoint dell'istanza database per SOURCE-EU. Sostituisci repl_user e password123 con il nome utente e la password che hai creato. Usa i valori Relay_Master_Log_File e Exec_Master_Log_Pos per configurare la replica con la procedura mysql.rds_set_external_master. Se SOURCE-EU è accessibile al pubblico e NEW-RR-EN è impostato su "privata", utilizza l'indirizzo IP privato di SOURCE-EU anziché quello di rds-endpoint.
  4. Da NEW-RR-EN, avvia la replica:
    mysql > CALL mysql.rds_start_replication;

Verifica che l'istanza crittografata sia sincronizzata con l'istanza di origine

Per verificare che la nuova istanza database crittografata sia sincronizzata con l'istanza database di origine, completa i seguenti passaggi:

  1. 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 è simile al seguente:

    Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0
  2. Una volta che Seconds_Behind_Master è stabile al valore 0, interrompi il traffico e chiudi le connessioni su SOURCE-EU.
    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. È necessario impedire 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.

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

Per cambiare le connessioni e reindirizzare il traffico verso la nuova istanza database, completa i seguenti passaggi:

  1. Come utente leader 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.

  2. Per promuovere NEW-RR-EN a server autonomo, interrompi la relazione di replica tra SOURCE-EU e NEW-RR-EN:

    MySQL > call mysql.rds_reset_external_master;
  3. Per indirizzare tutte le applicazioni, i client e le connessioni al database su NEW-RR-EN, specifica 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.

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

  5. Elimina SOURCE-EU.
    Nota: prima di utilizzare questa operazione in un ambiente di produzione, è consigliabile testarla su un'istanza di prova

Informazioni correlate

Working with DB instance read replicas

Come posso crittografare gli snapshot Amazon RDS utilizzando una chiave KMS?

Troubleshooting replication sul sito Web MySQL

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

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa