Comment chiffrer une instance de base de données Amazon RDS non chiffrée pour MySQL ou MariaDB avec un temps d’arrêt minimal ?

Lecture de 7 minute(s)
0

J’ai essayé de créer une réplica en lecture chiffrée de mon instance Amazon Relational Database Service (Amazon RDS) non chiffrée pour MySQL ou MariaDB. J’ai reçu un message d’erreur.

Brève description

Voici les limites d’Amazon RDS relatives aux instances de bases de données chiffrées :

  • Il n’est pas possible de modifier une instance Amazon RDS de base de données non chiffrée existante pour la chiffrer.
  • Il n’est pas possible de créer une réplica de lecture chiffrée à partir d’une instance non chiffrée.

Comme il n’est pas possible de chiffrer une instance Amazon RDS existante, vous devez créer une nouvelle instance chiffrée. Si vous créez une réplica de lecture chiffrée d’une instance Amazon RDS for MySQL non chiffrée, le message d’erreur suivant s’affiche :
« You cannot create an encrypted Read Replica from an unencrypted DB instance. (Service : AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID:) »

Voici comment chiffrer une instance de base de données non chiffrée en réduisant autant que possible le temps d’arrêt :

  1. Chiffrez un instantané non chiffré issu d’une réplica en lecture non chiffrée de l’instance de base de données.
  2. Restaurez une nouvelle instance de base de données à partir de l’instantané chiffré pour déployer une nouvelle instance de base de données chiffrée.
  3. Utilisation de la réplication MySQL pour synchroniser les modifications de la source avec la nouvelle instance de base de données chiffrée.
  4. Vérifiez que la nouvelle instance de base de données chiffrée est synchronisée avec l’instance de base de données source.
  5. Échangez les connexions, puis redirigez votre trafic vers la nouvelle instance de base de données.

Résolution

Chiffrement d’un instantané non chiffré

Voici comment chiffrer un instantané non chiffré issu d’une réplica en lecture non chiffrée :

  1. Créez une réplica en lecture temporaire pour l’instance de base de données Amazon RDS non chiffrée source. Dans cet exemple, l’instance de base de données source non chiffrée est appelée SOURCE-EU et la réplica en lecture temporaire est appelée TEMP-RR.

  2. Connectez-vous à TEMP-RR et surveillez le décalage de la réplica jusqu’à ce que Seconds_Behind_Master soit stabilisé à la valeur 0. La valeur stable indique que TEMP-RR est synchronisé avec SOURCE-EU.

    mysql> SHOW SLAVE STATUS \G
    Seconds_Behind_Master: 0
  3. Arrêtez le processus de réplication sur TEMP-RR :

    MySQL > call mysql.rds_stop_replication;
    +---------------------------+
    | Message                   |
    +---------------------------+
    | Slave is down or disabled |
    +---------------------------+
  4. Notez les valeurs de Relay_Master_Log_File et de Exec_Master_Log_Pos issues de TEMP-RR :

    mysql> SHOW SLAVE STATUS \G
    Relay_Master_Log_File: mysql-bin-changelog.000012
    Exec_Master_Log_Pos: 123
  5. Dans SOURCE-EU, définissez le paramètre des temps de conservation des journaux binaires afin de conserver les journaux binaires pendant la durée nécessaire pour terminer l’opération. Dans l’exemple suivant, le **temps de conservation des journaux binaires ** est définie sur 24 heures :

    mysql> call mysql.rds_set_configuration('binlog retention hours', 24);
  6. Faites une capture d’écran de TEMP-RR. Vous pouvez éventuellement supprimer TEMP-RR après avoir effectué la capture d’écran.

  7. Copiez la capture d’écran de TEMP-RR, puis réglez ** Activer le chiffrement** sur Oui.

Restauration d’une nouvelle instance de base de données à partir de l’instantané chiffré

Voici comment restaurer une nouvelle instance de base de données à partir de l’instantané chiffré :

  1. Restaurez une nouvelle instance de base de données à partir de l’instantané copié dont le chiffrement est activé. Dans cet exemple, la nouvelle instance de base de données chiffrée est appelée NEW-RR-EN.
  2. Modifiez les règles entrantes dans le groupe de sécurité SOURCE-EU pour autoriser le trafic en provenance de NEW-RR-EN. Si vous utilisez le même groupe de sécurité sur les deux instances de base de données, vous pouvez utiliser la même référence d’ID de groupe de sécurité que SOURCE-EU.
    **Remarque :**Autorisez le trafic sortant vers SOURCE-EU depuis NEW-RR-EN.

Synchronisation des modifications de l’instance source avec la nouvelle instance chiffrée

Pour utiliser la réplication MySQL afin de synchroniser les modifications de la source vers la nouvelle instance de base de données chiffrée, effectuez les opérations suivantes :

  1. Connectez-vous à SOURCE-EU.
  2. Configurez un utilisateur de réplication, puis accordez-lui les autorisations nécessaires :
    mysql> create user 'repl_user'@'%' identified by 'password123';
    mysql> grant replication slave, replication client on *.* to 'repl_user'@'%';
    mysql> show grants for 'repl_user'@'%';
    **Remarque :**Remplacez repl_user par votre nom d’utilisateur de réplication et password123 par votre mot de passe.
  3. Connectez-vous à NEW-RR-EN et établissez une connexion de réplication avec SOURCE-EU :
    mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 );
    **Remarque :**Remplacez rds-endpoint par le point de terminaison de l’instance de base de données pour SOURCE-EU. Remplacez repl_user et password123 par le nom d’utilisateur et le mot de passe que vous avez créés. Utilisez les valeurs Relay_Master_Log_File et Exec_Master_Log_Pos pour configurer la réplication selon la procédure mysql.rds_set_external_master. Si SOURCE-EU est accessible au public et que NEW-RR-EN est défini sur « privé », utilisez l’adresse IP privée de SOURCE-EU à la place de rds-endpoint.
  4. Depuis NEW-RR-EN, lancez la réplication :
    mysql > CALL mysql.rds_start_replication;

Vérification de la synchronisation entre l’instance chiffrée et l’instance source

Voici comment vérifier que la nouvelle instance de base de données chiffrée est synchronisée avec l’instance de base de données source :

  1. À partir de NEW-RR-EN, confirmez que la réplication est réussie et qu’elle est synchronisée avec SOURCE-EU et NEW-RR-EN :

    mysql> SHOW SLAVE STATUS \G

    Si votre connexion entre l’instance de base de données source et la réplica de lecture est réussie, voici à quoi doit ressembler le résultat :

    Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0
  2. Une fois que Seconds_Behind_Master est stabilisé à la valeur 0, arrêtez le trafic et fermez les connexions sur SOURCE-EU.
    **Remarque :**Arrêtez tous les serveurs et les clients d’applications qui se connectent à SOURCE-EU pour garantir qu’aucune nouvelle modification n’est apportée à SOURCE-EU. Vous pouvez éventuellement verrouiller temporairement le groupe de sécurité utilisé par SOURCE-EU. Vous devez empêcher le trafic entrant en provenance de n’importe quelle application ou client, à l’exception de NEW-RR-EN et de l’hôte à partir duquel l’utilisateur effectue ces actions.

Échange des connexions et redirection du trafic vers la nouvelle instance de base de données

Voici comment échanger les connexions et rediriger votre trafic vers la nouvelle instance de base de données :

  1. En tant qu’utilisateur responsable de la base de données, connectez-vous à NEW-RR-EN, puis arrêtez la réplication :

    MySQL > call mysql.rds_stop_replication;

    **Important :**Une fois cette commande exécutée, NEW-RR-EN ne réplique plus les données de SOURCE-EU.

  2. Pour faire de NEW-RR-EN un serveur autonome, arrêtez la relation de réplication entre SOURCE-EU et NEW-RR-EN :

    MySQL > call mysql.rds_reset_external_master;
  3. Pour diriger toutes les applications, tous les clients et toutes les connexions aux bases de données vers NEW-RR-EN, indiquez le point de terminaison DNS NEW-RR-EN dans toutes les chaînes de connexion. Alternativement, Vous pouvez renommer SOURCE-EU, puis modifier NEW-RR-EN afin d’utiliser le même nom que celui utilisé par SOURCE-EU.

  4. Vérifiez que les règles du groupe de sécurité sur NEW-RR-EN autorisent le trafic entrant en provenance des applications et des clients appropriés.

  5. Supprimez SOURCE-EU.
    **Remarque :**Avant d’effectuer cette opération dans un environnement de production, il est recommandé de tester cette opération sur une instance de test

Informations complémentaires

Utilisation des réplicas en lecture d’instances de base de données

Comment chiffrer des instantanés Amazon RDS à l’aide d’une clé KMS ?

Troubleshooting replication sur le site Web MySQL

Configuration de la réplication de la position du fichier journal binaire avec une instance source externe

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois