Passer au contenu

Comment chiffrer une instance de base de données Amazon RDS non chiffrée for MySQL ou MariaDB avec une durée d’indisponibilité minimale ?

Lecture de 7 minute(s)
0

J’ai essayé de créer un réplica en lecture chiffré de mon instance Amazon Relational Database Service (Amazon RDS) non chiffrée for 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 un réplica de lecture chiffrée à partir d’une instance non chiffrée.

Comme il n’est pas possible de chiffrer une instance RDS existante, vous devez créer une nouvelle instance chiffrée. Si vous créez un réplica de lecture chiffré 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’un réplica en lecture non chiffré 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. Utilisez 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

Chiffrer un instantané non chiffré

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

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

  2. Connectez-vous à TEMP-RR. Exécutez ensuite la commande suivante pour surveiller le retard du réplica jusqu'à ce que Seconds_Behind_Master soit stable à la valeur 0.

    mysql> SHOW SLAVE STATUS \G
    Seconds_Behind_Master: 0

    Remarque : une valeur stable indique que TEMP-RR est synchronisé avec SOURCE-EU.

  3. Exécutez la commande suivante pour arrêter le processus de réplication sur TEMP-RR :

    MySQL > call mysql.rds_stop_replication;
    +---------------------------+
    | Message                   |
    +---------------------------+
    | Slave is down or disabled |
    +---------------------------+
    
  4. Notez les valeurs pour Relay_Master_Log_File et Exec_Master_Log_Pos à partir de TEMP-RR, comme indiqué dans l'exemple suivant :

    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éfini sur 24 heures :

    mysql> call mysql.rds_set_configuration('binlog retention hours', 24);
  6. Créez un instantané de TEMP-RR. Vous pouvez éventuellement supprimer TEMP-RR après avoir créé l’instantané.

  7. Copiez l’instantané de TEMP-RR, puis réglez ** Activer le chiffrement** sur Oui.

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

Restaurez une nouvelle instance de base de données à partir de l'instantané copié et activez le chiffrement. Dans cet exemple, la nouvelle instance de base de données chiffrée est NEW-RR-EN.

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.

Synchroniser 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. Exécutez la commande suivante pour configurer un utilisateur de réplication et lui accorder 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. Exécutez la commande suivante pour vous connecter à NEW-RR-EN et établir 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, exécutez la commande suivante pour démarrer la réplication :
    mysql > CALL mysql.rds_start_replication;

Vérifier que l’instance chiffrée est synchronisée avec 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. Depuis NEW-RR-EN, exécutez la commande suivante pour vérifier que la réplication a réussi et qu'elle est synchronisée entre SOURCE-EU et NEW-RR-EN :

    mysql> SHOW SLAVE STATUS \G

    Si votre connexion entre l’instance de base de données source et le 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’application qui se connectent à SOURCE-EU pour vous assurer 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.

Échanger des connexions et rediriger le 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 exécutez la commande suivante pour arrêter la réplication :

    MySQL > call mysql.rds_stop_replication;

    Remarque : 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, exécutez la commande suivante pour arrêter 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 connexes

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

Comment prendre un instantané chiffré d'une instance de base de données Amazon RDS non chiffrée ?

Résolution de problèmes liés à la réplication sur le site Web MySQL

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

AWS OFFICIELA mis à jour il y a 8 mois