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
일 단위로 측정되는 것이 잘못된 것입니까?이 옵션에 대한 설명서는 아래에서 볼 수 있으며, 이 숫자 값으로 사용되는 측정 단위는 전혀 참조되지 않습니까?
설명: >이것보다 오래된 키를 가진 페이지는 백그라운드에서 다시 암호화합니다.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 및/또는 플러그인이 설명한 대로 구성 값에 따라 아무런 조치를 취하지 않는 것 같습니다.이것의 장점은 데이터베이스를 다시 시작할 필요가 없다는 것입니다.
- 제거하는 것을 잊지 마세요.
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
Gotcha #1: 허용 버전 에이징
유감스럽게도, 이것은 끝나지 않았습니다.버전 2는 기본적으로 새 페이지를 암호화하는 데 사용되지만 이전 버전으로 암호화된 페이지는 백그라운드에서 다시 암호화되지 않습니다.이는 설정에 기인합니다.innodb_encryption_rotate_key_age=0
강제 실행이 아닌 백그라운드 암호화 실행 중지0
키 버전 시대그래서 우리가 설정할 수 있는 최소 나이 차이는1
DB ( 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)
- 이 적어도 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
'programing' 카테고리의 다른 글
TypeScript에 'this' 에 대한 별칭이 있습니까? (0) | 2023.10.06 |
---|---|
iTemes Security Pro Plugin 사용 시 Wordpress API에서 정보를 가져오는 방법 (0) | 2023.10.01 |
Excel VBA의 동적 함수 호출 (0) | 2023.10.01 |
e에서 2조 자리까지 계산하는 가장 빠른 방법은 무엇입니까? (0) | 2023.10.01 |
jQuery를 사용하여 "삭제" 키 누르기 (0) | 2023.10.01 |