DB

[MySQL] (보안설정2️⃣) 데이터 at rest 암호화 설정법: 테이블·디스크 암호화 실무 가이드

인생아 2025. 7. 16. 16:48
반응형

서버에 저장된 데이터를 보호하는 가장 핵심적인 방법이 바로 데이터 at rest 암호화다.
이 방식은 하드디스크나 데이터 파일에 저장된 정보 자체를 암호화하는 것으로, 물리적인 유출이나 루트 권한 탈취 같은 위협에서도 데이터를 안전하게 지켜준다.
MySQL에서는 기본적으로 InnoDB 테이블스페이스 암호화, AES 기반 컬럼 암호화, 그리고 OS 디스크 레벨 암호화를 활용할 수 있다.

✅ 데이터 at rest 암호화란?

  • 물리적인 디스크에 저장된 데이터를 암호화된 형태로 유지하는 것
  • 디스크가 유출되거나 백업 파일이 탈취되어도 암호화 키 없이는 복호화 불가
  • 백업본, 스냅샷, 로그 파일까지 모두 암호화 대상이 될 수 있음
  • 일반적으로 InnoDB 스토리지 엔진 기반의 테이블에 적용
반응형

🔐 방식 1: InnoDB 테이블스페이스 암호화

MySQL 5.7 이상에서는 InnoDB 테이블 단위 암호화 기능을 기본 지원한다.

1️⃣ 서버 설정

my.cnf 설정 예시

[mysqld]
early-plugin-load = keyring_file.so
keyring_file_data = /var/lib/mysql-keyring/keyring
innodb_encrypt_tables = ON
innodb_encrypt_log = ON
innodb_encryption_threads = 4

2️⃣ keyring 플러그인 등록

INSTALL PLUGIN keyring_file SONAME 'keyring_file.so';

3️⃣ 암호화 테이블 생성 예시

CREATE TABLE secure_table (
  id INT PRIMARY KEY,
  ssn VARBINARY(255)
) ENCRYPTION='Y';

ENCRYPTION='Y'를 붙이면 해당 테이블은 자동으로 암호화된다.

4️⃣ 기존 테이블 암호화 적용

ALTER TABLE user_data ENCRYPTION='Y';

주요 특징

  • 물리적인 .ibd 파일이 암호화된 상태로 저장됨
  • 내부적으로는 AES 알고리즘 기반
  • 암호화 키는 keyring_file 또는 AWS KMS 등 외부 키 관리 시스템에 저장 가능

🔐 방식 2: 컬럼 암호화 (AES_ENCRYPT)

컬럼 단위로 암호화할 경우, 데이터 단위로 개별 암복호화가 가능하다.

암호화 저장 예시

INSERT INTO user_info (email, phone)
VALUES (
  AES_ENCRYPT('admin@site.com', 'my_secret_key'),
  AES_ENCRYPT('010-1234-5678', 'my_secret_key')
);

복호화 예시

SELECT
  AES_DECRYPT(email, 'my_secret_key') AS email,
  AES_DECRYPT(phone, 'my_secret_key') AS phone
FROM user_info;

주의할 점

  • 키가 유출되면 데이터도 그대로 유출됨
  • 키 관리가 매우 중요함 (환경변수 또는 Key Management System 사용 추천)
  • WHERE절에 사용하기 어려움 (인덱싱 불가능)
반응형

🔐 방식 3: OS 디스크 암호화 (LUKS, BitLocker 등)

MySQL 외부에서 암호화를 적용하는 방식으로,
서버 디스크 자체를 OS 수준에서 암호화하는 방식이다.

  • Linux: LUKS, dm-crypt
  • Windows: BitLocker
  • 클라우드: EBS 암호화(AWS), PD 암호화(GCP)

장점

  • MySQL에 별도 설정 없이 전체 파일 시스템 보호
  • 설정이 간단하고 관리 포인트가 줄어듦

단점

  • 데이터베이스 프로세스가 구동된 상태에서는 복호화된 형태로 메모리에 올라오기 때문에
    운영 중 메모리 탈취에는 무방비

🧠 실무 적용 전략

암호화 방식 적용 위치 특징 실무 추천 상황
InnoDB 테이블 암호화 DB 엔진 레벨 기본 내장 기능, 설정 필요 중요 테이블 대상 암호화 시
AES_ENCRYPT 컬럼 단위 개별 복호화 가능, 키 관리 필요 이메일, 계좌번호 등 민감 필드
OS 디스크 암호화 운영체제 레벨 전체 디스크 암호화, 설정 간편 소규모 서버, 테스트/개발 환경 등

암호화는 단일 방식을 사용하는 것보다, DB 내부 암호화 + 디스크 암호화병행하는 것이
보안성과 복원력을 함께 확보할 수 있는 실무 전략이다.

📘 공식 문서 참고

https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html

 

반응형