바이너리 로그 암호화
바이너리 로그 암호화의 중요도
- 바이너리 로그와 릴레이 로그 파일 또한, 테이블 암호화가 적용돼도 평문을 저장한다.
- 바이너리 로그는 의도적으로 상당히 긴 시간 동안 보관하는 서비스도 있고, 때로는 증분 백업(Incremental Backup)을 위해 바이너리 로그를 보관하기도 한다.
- 이런 이유로 바이너리 로그의 암호화는 상황에 따라 중요도가 높아질 수 있다.
네트워크 구간에서의 암호화
- 바이너리 로그와 릴레이 로그 파일 암호화 기능은 디스크에 저장된 로그 파일에 대한 암호화만 담당한다.
- MySQL 서버의 메모리 내부 또는 소스 서버와 레플리카 서버 간의 네트워크 구간에서 로그 데이터를 암호화하지는 않는다.
- 복제 멤버 간의 네트워크 구간에서도 바이너리 로그를 암호화하고자 한다면 MySQL 복제를 위한 계정이 SSL을 사용하도록 설정하면 된다.
바이너리 로그 암호화 키 관리
2단계 암호화 키 관리 방식
MySQL 서버는 바이너리 로그와 릴레이 로그 파일 데이터의 암호화를 위해서도 2단계 암호화 키 관리 방식을 사용한다.
- 바이너리 로그와 릴레이 로그 파일의 데이터는 파일 키(File Key)로 암호화해서 디스크로 저장한다.
- 파일 키는 바이너리 로그와 릴레이 로그 파일 단위로 자동 생성되며, 해당 로그 파일의 데이터 암호화에만 사용된다.
- 파일 키는 “바이너리 로그 암호화 키”로 암호화해서 각 바이너리 로그와 릴레이 로그 파일의 헤더에 저장된다.
- “바이너리 로그 암호화 키”는 테이블 암호화의 마스터 키와 동일한 역할을 한다.
바이너리 로그 암호화 키 변경
mysqlbinlog 도구 활용
바이너리 로그 복호화
- MySQL 서버에서는 트랜잭션의 내용을 추적하거나 백업 복구를 위해 암호화된 바이너리 로그를 평문으로 복호화할 일이 자주 발생한다.
- 하지만 한 번 바이너리 로그 파일이 암호화되면 다음과 같은 이유로 복호화가 불가능하다.
- 암호화된 파일은 바이너리 로그 암호화 키가 없으면 복호화할 수 없다.
- 바이너리 로그 암호화 키는 MySQL 서버만 가지고 있으므로 복호화가 불가능하다.
mysqlbinlog 도구로 복호화
MySQL 서버를 통해 확인
- 바이너리 로그 파일의 내용을 볼 수 있는 방법은 MySQL 서버를 통해 가져오는 방법이 유일하다.
- MySQL 서버가 로그 파일을 가지고 있다는 가정하에, 로그 파일의 내용을 확인하고자 한다면
mysqlbinlog
도구가 MySQL 서버에 접속해서 바이너리 로그를 가져오는 방법밖에 없다.
- 파라미터로 주어진 ‘mysql-bin.000011’은 MySQL 서버에게 요청할 바이너리 로그 파일의 이름일 뿐이다.
mysqlbinlog
도구가 직접 ‘mysql-bin.000011’ 파일을 읽는 것이 아니다.
mysqlbinlog
명령을 실행 할 때 --read-from-remote-server
파라미터와 함께 MySQL 서버 접속 정보를 입력한다.
mysqlbinlog --read-from-remote-server -uroot -p -vvv mysql-bin.000011
Reference
참고 서적
📔 Real MySQL 8.0