Базовое вращение
В качестве обходного пути вы можете запустить вращение через глобальную переменную.MariaDB и / или плагин, кажется, не предпринимают никаких действий в зависимости от значения конфигурации, как вы описали.Плюсом этого является то, что вам не нужно перезапускать базу данных.
- Не забудьте удалить
aws_key_management_rotate_key
из конфигурации, потому что она вам не понадобится. - Запустите вращение, установив глобальное значение с консоли.Обратите внимание, что вам не нужно сбрасывать его 0 вручную после поворота.Плагин будет сообщать о создании нового набора (версий) ключей данных.
MariaDB [(none)]> SET @@GLOBAL.aws_key_management_rotate_key=-1;
Query OK, 0 rows affected, 4 warnings (0.875 sec)
MariaDB [(none)]> SELECT @@GLOBAL.aws_key_management_rotate_key;
+----------------------------------------+
| @@GLOBAL.aws_key_management_rotate_key |
+----------------------------------------+
| 0 |
+----------------------------------------+
1 row in set (0.000 sec)
MariaDB [(none)]> SHOW WARNINGS;
+-------+------+---------------------------------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------------------------------+
| Note | 1105 | AWS KMS plugin: generated encrypted datakey for key id=1, version=2 |
| Note | 1105 | AWS KMS plugin: loaded key 1, version 2, key length 256 bit |
| Note | 1105 | AWS KMS plugin: generated encrypted datakey for key id=2, version=2 |
| Note | 1105 | AWS KMS plugin: loaded key 2, version 2, key length 256 bit |
+-------+------+---------------------------------------------------------------------+
4 rows in set (0.000 sec)
Ссылка: https://mariadb.com/kb/en/library/aws-key-management-encryption-plugin/#rotating-keys
Получено # 1: разрешено устаревание версии
К сожалению, это еще не конец.Версия 2 теперь будет использоваться для шифрования новых страниц по умолчанию, однако страницы, зашифрованные с помощью предыдущей версии, не будут повторно зашифрованы в фоновом режиме, как и следовало ожидать.Это связано с настройкой innodb_encryption_rotate_key_age=0
, отключающей фоновое шифрование, в отличие от принудительного 0
срока действия версии ключа.Таким образом, минимальный возрастной интервал, который мы можем установить, составляет 1
, что позволяет использовать предыдущую версию (в моем случае версию 1) для шифрования БД.
Проверьте шифрование табличного пространства innodb.MIN_KEY_VERSION означает:
Минимальная версия ключа, используемая для шифрования страницы в табличном пространстве.Разные страницы могут быть зашифрованы с разными версиями ключей.
MariaDB [test]> SELECT NAME, MIN_KEY_VERSION, CURRENT_KEY_VERSION, ROTATING_OR_FLUSHING FROM information_schema.INNODB_TABLESPACES_ENCRYPTION;
+----------------------------+-----------------+---------------------+----------------------+
| NAME | MIN_KEY_VERSION | CURRENT_KEY_VERSION | ROTATING_OR_FLUSHING |
+----------------------------+-----------------+---------------------+----------------------+
| innodb_system | 1 | 2 | 0 |
| mysql/gtid_slave_pos | 1 | 2 | 0 |
| mysql/innodb_index_stats | 1 | 2 | 0 |
| mysql/innodb_table_stats | 1 | 2 | 0 |
| mysql/transaction_registry | 1 | 2 | 0 |
| test/tbl | 1 | 2 | 0 |
+----------------------------+-----------------+---------------------+----------------------+
6 rows in set (0.000 sec)
Повторите вращение, начиная с шага 2, еще раз, чтобы MIN_KEY_VERSION было не менее
2
.Это также будет означать, что вам нужно будет хранить ключи версий 2 и 3.
Ссылка: https://mariadb.com/kb/en/library/information-schema-innodb_tablespaces_encryption-table/
Прием № 2: redo log
Журнал повторного выполнения по-прежнему зашифрован с использованием предыдущей версии ключа, и MariaDB не запустится, если старый ключ отсутствует.
0 [ERROR] mysqld: can't open file aws-kms-key.1.1
0 [Warning] mysqld: AWS KMS plugin: key 1, version 1 could not be decrypted
0 [ERROR] InnoDB: Obtaining redo log encryption key version 1 failed (2385237688). Maybe the key or the required encryption key management plugin was not found.
...
0 [ERROR] InnoDB: No valid checkpoint found (corrupted redo log). You can try --innodb-force-recovery=6 as a last resort.
...
0 [ERROR] Unknown/unsupported storage engine: InnoDB
0 [ERROR] Aborting
Поворот ключа для журнала повторного выполнения InnoDB возможен толькоподдерживается в MariaDB 10.4.0 и выше.Об этом см. MDEV-12041.
Ссылка: https://mariadb.com/kb/en/library/encrypting-data-for-innodb-xtradb/#key-rotation