- 8.0 부터 데이터 파일뿐만 아니라 리두 로그나 언두 로그, 복제를 위한 바이너리 로그도 암호화 기능을 지원한다.
7.1 MySQL 서버의 데이터 암호화
- 암호화 기능은 디스크 <-> InnoDB 사이에서 암복화 과정이 수행된다.
- TDE, Transparent Data Encryption 이라고 한다.
- TDE 에서 암호화 키는 키링 플러그인에 의해 관리된다.
- keyring_file: 암호화 키를 파일로 저장한다.
- 커뮤니티 에디션에서는 keyring_file 플러그인만 지원한다.
- keyring_encrypted_file
- keyring_okv
- keyring_aws
- keyring_file: 암호화 키를 파일로 저장한다.
- 다양한 플러그인은 마스터키를 관리하는 방법만 다르다.
- MySQL 암호화는 2단계 암호화를 사용한다.
- 데이터는 테이블스페이스키로 암호화된다.
- 테이블스페이스키는 변하지 않는 키이다.
- 테이블스페이스키가 변한다면, 데이터 전체를 암복화해야하므로 까다롭다.
- 테이블스페이스키는 MySQL 외부로 노출되지 않는다.
- 프라이빗키라고도 한다.
- 마스터키로 모든 테이블스페이스키를 암호화한다.
- 마스터키는 외부로 노출되기 때문에 주기적으로 변경해줘야 한다.
- ALTER INSTANCE ROTATE INNODB MASTER KEY
- TDE 는 AES 256 비트 알고리즘을 사용한다.
- TDE 이므로, 버퍼풀에는 복호화된 데이터가 들어있다.
- TDE를 적용한다고 해도 데이터 파일의 크기는 테이블과 거의 동일한 크기를 가진다.
- 압축 적용시 압축 효율을 위해 압축을 하고 암호화를한다. 압축된 버전과 압축이 안된 버전을 버퍼풀에 관리해야 하므로 암호화는 압축보다 나중에 한다.
- 복제 시에 모든 노드는 각자의 Master 키를 가지고 있어야 한다. 소스 서버와 레플리카 서버도 마찬가지이다.
- 마스터키도 계속 변경될 수 있기 때문에 백업마다 키링 파일도 백업해야한다.
7.2 keyring_file 플러그인 설치
- 마스터키는 평문으로 파일로 저장되기 때문에 키링을 다운로드해서 MySQL 서버를 시작하고 지워주자.
- MySQL 서버 시작 후 마스터키는 메모리에 존재한다.
- Percona Server 의 keyring_vault 플러그인 사용도 고려할 수 있다.
- 암호화 플러그인은 가장 먼저 초기화되어야 하므로, 설정 파일에 early-plugin-load = keyring_file.so, keyring_file_data = .../tde_master.key 처럼 설정을 해주자.
- 마스터키 로테이션을 실행하면 키링 파일의 마스터키가 초기화된다.
7.3 테이블 암호화
- 테이블 생성 시 ENCRYPTION='Y' 를 추가하여 테이블을 암호화할 수 있다.
- TDE는 디스크 IO 시에 암호화를 하므로 애플리케이션 레벨의 암호화와 달리 인덱스를 사용할 수 있다.
- 그러나 테이블 암호화는 데이터베이스에 로그인한다면 평문을 볼 수 있다는 단점이 있다.
- 테이블 스페이스 이동 시 FLUSH TABLES source_table FOR EXPORT로 테이블스페이스를 익스포트할 수 있다.
- 암호화된 테이블일 경우 source_table.cfp라는 파일에 임시 마스터키를 발급한다.
- 임시로 발급한 마스터키로 테이블스페이스키를 암호화한 후 데이터 파일의 헤더 부분에 저장한다.
- 따라서 구조를 가지고 있는 cfg 파일과 데이터파일인 ibd 파일, 임시 마스터키가 저장된 cfp 파일을 같이 복사해야 한다.
7.4 언두 로그 및 리두 로그 암호화
- 8.0.16 버전부터 innodb_undo_log_encrypt 시스템 변수와 innodb_redo_log_encrypt 시스템 변수로 리두 로그와 언두 로그를 암호화할 수 있다.
- 암호화가 활성되거나 비활성되는 시점 이후 부터 로그아 암호화되어 저장되거나 평문으로 저장된다.
- 따라서 며칠또는 몇달동안은 암호화키가 필요할 수 있다.
- 로그 암호화를 위한 테이블스페이스키는 실제 테이블의 키가 아니라 언두 or 리두 로그 파일의 프라이빗키이다.
7.5 바이너리 로그 암호화
- 마찬가지로 2단계 암호화 방식이 적용된다.
- 파일 키 : 로그 파일 단위의 프라이빗 키이다.
- 바이너리 로그 암호화 키: 마스터키와 동일한 역할을 한다.
- mysqlbinlog 툴을 이용해 로그 파일의 내용을 볼 수 있다.
- 해당 툴이 직접 보는게 아니라 Mysql 서버에 요청해서 가져온다.
'데이터베이스' 카테고리의 다른 글
[RealMySQL 8.0] 6장 데이터 압축 (0) | 2025.01.06 |
---|---|
[RealMySQL 8.0] 5장 트랜잭션과 잠금 (0) | 2025.01.02 |
[RealMySQL 8.0] 4장 아키텍처 (0) | 2024.12.16 |
[RealMySQL 8.0] 3장 사용자 및 권한 (0) | 2024.12.14 |
[RealMySQL 8.0] 1장. 소개, 2장. 설치와 설정 (0) | 2024.12.10 |