programing

AWS KMS 플러그인을 통한 정지 상태의 MariaDB Encryption - Key Rotation이 작동하지 않습니까?

megabox 2023. 10. 1. 19:23
반응형

AWS KMS 플러그인을 통한 정지 상태의 MariaDB Encryption - Key Rotation이 작동하지 않습니까?

저는 AWS KMS(Key Management Service) Plugin을 통해 정지된 암호화를 위해 MariaDB를 설정했습니다.

키 사이클링 빼고는 다 되는 것 같습니다.

첨부된 구성 파일에 따라 아래 옵션을 구성하였습니다.

/etc/my.cnf

[mysqld]
# InnoDB/XtraDB Encryption
innodb_encrypt_tables = On
innodb_encrypt_log = On
innodb_encryption_threads = 8
innodb_encryption_rotate_key_age = 1
innodb_encryption_rotation_iops = 100

/etc/my.cnf.d/aws_key_management.cnf

[mariadb]

# Load the AWs plugin and enable it for use
plugin-load-add=aws_key_management.so

# Link to the AWS KMS 'Customer Master Key' used to decrypt MariaDB 
encryption keys on disk
# during MariaDB start up and save the decrypted keys into memory
aws_key_management_master_key_id = alias/MariaDB-Encryption-Key

# Specify the AWS region our KMS key is stored in
aws_key_management_region = eu-west-2

# Specify the key specification
aws_key_management_key_spec = AES_256

# Rotate all keys
aws_key_management_rotate_key = -1

# Change the plugins log level
# Options: "Off" (default), "Fatal", "Error", "Warn", "Info", 
"Debug", and "Trace".
aws_key_management_log_level = Warn

!include /etc/my.cnf.d/enable_encryption.preset

보시다시피, 저는 모든 키를 사용하여 회전하도록 설정했습니다.aws_key_management_rotate_key = -1키 나이를 1살로 정합니다.innodb_encryption_rotate_key_age = 1, 열쇠를 보면 알 수 있어요/var/lib/mysql/다음과 같은 설정이 며칠 동안 유지되었음에도 불구하고 버전 1의 키는 여전히 사용되고 있습니다.

/var/lib/mysql/aws-kms-key.1.1
/var/lib/mysql/aws-kms-key.2.1

(참고: 파일 이름의 마지막 .n 접미사는 키 버전을 나타냅니다.)

내가 생각할 수 있는 유일한 것은, 내가 이해하는 것입니다.innodb_encryption_rotate_key_age일 단위로 측정되는 것이 잘못된 것입니까?이 옵션에 대한 설명서는 아래에서 볼 수 있으며, 이 숫자 값으로 사용되는 측정 단위는 전혀 참조되지 않습니까?

innodb_암호화_ rotate_key_age

설명: >이것보다 오래된 키를 가진 페이지는 백그라운드에서 다시 암호화합니다.Encryption을 설정할 때 이 변수를 0이 아닌 > 값으로 설정해야 합니다.그렇지 않으면 innodb_encrypt_tables >MariaDB를 통해 암호화를 활성화하면 암호화되지 않은 테이블을 자동으로 암호화할 수 없습니다.

이것이 왜 그리고 왜 내 키가 회전하지 않는지 누가 설명해 줄 수 있습니까?

마리아DB 버전

mysql --version
mysql  Ver 15.1 Distrib 10.2.15-MariaDB, for Linux (x86_64) using readline 5.1`

AWS KMS 플러그인 버전

yum list installed | grep mariadb
MariaDB-aws-key-management.x86_64       10.2.15-1.el7.centos     @mariadb-main

기본회전

이를 해결하기 위해 전역 변수를 통해 회전을 트리거할 수 있습니다.MariaDB 및/또는 플러그인이 설명한 대로 구성 값에 따라 아무런 조치를 취하지 않는 것 같습니다.이것의 장점은 데이터베이스를 다시 시작할 필요가 없다는 것입니다.

  1. 제거하는 것을 잊지 마세요.aws_key_management_rotate_key당신은 그것이 필요하지 않을 것이기 때문입니다.
  2. 콘솔에서 글로벌 값을 설정하여 회전을 트리거합니다.회전 후에는 수동으로 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

Gotcha #1: 허용 버전 에이징

유감스럽게도, 이것은 끝나지 않았습니다.버전 2는 기본적으로 새 페이지를 암호화하는 데 사용되지만 이전 버전으로 암호화된 페이지는 백그라운드에서 다시 암호화되지 않습니다.이는 설정에 기인합니다.innodb_encryption_rotate_key_age=0 강제 실행이 아닌 백그라운드 암호화 실행 중지0키 버전 시대그래서 우리가 설정할 수 있는 최소 나이 차이는1 DB ( 1) 에 1을 사용할 수 있도록 합니다.

  1. 노드 공간 암호화를 확인합니다.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)
  1. 이 적어도 MIN_KEY_VERSION 2 합니다가 부터 한 번더합니다.2 3의 이는 또한 버전 2와 버전 3 키를 모두 보관해야 한다는 것을 의미합니다.

참조 : https://mariadb.com/kb/en/library/information-schema-innodb_tablespaces_encryption-table/

Gotcha #2: redo log

redo 로그는 이전 키 버전으로 여전히 암호화되어 있으며, 이전 키가 없으면 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 redo 로그에 대한 키 순환은 MariaDB 10.4.0 이상에서만 지원됩니다.이에 대해서는 MDEV-12041을 참조하십시오.

참조 : https://mariadb.com/kb/en/library/encrypting-data-for-innodb-xtradb/ #key-

언급URL : https://stackoverflow.com/questions/50793715/mariadb-encryption-at-rest-via-aws-kms-plugin-key-rotation-not-working

반응형