Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

AlwaysOn 가용성 그룹에서 TDE(투명 데이터 암호화) 구성하기: 단계별 완벽 가이드

이 글에서는 AlwaysOn 가용성 그룹(Availability Group) 환경에서 TDE(투명 데이터 암호화, Transparent Data Encryption)를 설정하는 데 필요한 세부 단계를 하나씩 살펴봅니다.

소개

SQL Server는 물리적 파일을 암호화하여 고객의 민감한 데이터를 보호할 수 있도록 TDE(투명 데이터 암호화) 기능을 제공합니다. TDE는 SQL Server 2008에서 엔터프라이즈 에디션 전용 기능으로 처음 도입되었습니다.

TDE를 지원하는 SQL Server 에디션

  • SQL Server 2008, 2008 R2, 2012, 2014, 2016, 2017 (Evaluation, Developer, Enterprise)

참고로 SQL Server 2019부터는 대부분의 에디션에서 TDE를 사용할 수 있습니다.

  • SQL Server 2019 – Standard, Evaluation, Developer, Enterprise

다루는 시나리오

  1. TDE로 암호화된 데이터베이스를 AG(가용성 그룹)에 추가하기
  2. AG에 이미 포함되어 있는 데이터베이스에 TDE 구성하기
  3. 만료된 인증서 교체(Rotation)

시나리오 1: TDE 암호화 데이터베이스를 AG에 추가하기

여기서는 두 노드로 구성된 AG를 사용해 TDE를 설정하며, 각 단계를 자세히 설명합니다. 보조 복제본이 여러 개라면 아래의 보조 복제본 관련 단계를 각 보조 복제본마다 반복 수행하면 됩니다.

  • 주 복제본(Primary Replica): node1
  • 보조 복제본(Secondary Replica): node2
  • AG 그룹: TDE_AG

팁: TDE를 적용하기 전에는 항상 DBCC CHECKDB를 실행해 데이터베이스에 오류가 없는지 확인하고, 최신 전체 백업을 확보해 두는 것이 좋습니다.

1단계: 주 인스턴스 – 마스터 키 생성

TDE를 처음 적용하는 경우라면 마스터 키가 존재하지 않습니다. 다음 쿼리를 실행했을 때 결과가 없다면 마스터 키가 없는 상태입니다.

USE master;
GO
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%DatabaseMasterKey%';
GO

이제 master 데이터베이스에 강력한 암호를 사용해 마스터 키를 생성합니다.

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '강력한_암호_입력';
GO

생성된 마스터 키를 검증합니다.

모범 사례로서 마스터 키는 안전한 위치에 반드시 백업해 두세요. 백업 시 사용하는 암호는 마스터 키 암호와 달라도 됩니다.

BACKUP MASTER KEY TO FILE = 'C:\Backup\master_key.key'
ENCRYPTION BY PASSWORD = '백업용_암호';
GO

2단계: 주 인스턴스 – 인증서 생성

데이터베이스 암호화 키(DEK)를 보호할 인증서를 생성합니다. 인증서의 기본 만료일은 1년입니다.
팁: 1년 후에 인증서가 만료되어 곤란한 상황이 생기지 않도록, 만료일을 5년으로 설정하는 것이 모범 사례입니다.

USE master;
GO
CREATE CERTIFICATE TDE_Cert
WITH SUBJECT = 'TDE Certificate',
     EXPIRY_DATE = '20301231';
GO

아래 T-SQL로 인증서가 정상적으로 생성되었는지 확인합니다.

SELECT name, subject, start_date, expiry_date
FROM sys.certificates;
GO

3단계: 주 인스턴스 – DEK(데이터베이스 암호화 키) 생성

실제 데이터베이스 내용을 암호화하는 대칭 키인 DEK를 생성합니다. 사용 가능한 AES 알고리즘 중 하나를 선택해 생성할 수 있습니다.

USE TDE_DB;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDE_Cert;
GO

4단계: 주 인스턴스 – 인증서 백업

모범 사례에 따라 인증서와 개인 키를 함께 백업합니다. 이렇게 해두면 데이터베이스 백업 파일을 다른 SQL Server 인스턴스에서 복원하거나, 데이터 파일을 다른 인스턴스에 연결(attatch)할 때 유용합니다.

BACKUP CERTIFICATE TDE_Cert TO FILE = 'C:\Backup\TDE_Cert.cer'
WITH PRIVATE KEY (
    FILE = 'C:\Backup\TDE_Cert.pvk',
    ENCRYPTION BY PASSWORD = '개인키_암호'
);
GO

5단계: 보조 인스턴스 – 마스터 키 생성

마스터 키가 없다면 모든 보조 복제본에 데이터베이스 마스터 키를 생성해야 합니다. 절차는 주 인스턴스의 1단계와 동일합니다. 이 예제에서는 1단계에서 이미 두 인스턴스 모두에 마스터 키를 생성했습니다.

6단계: 보조 인스턴스 – 보조 인증서 생성

주 복제본의 인증서 파일을 모든 보조 복제본으로 복사한 뒤, 해당 인증서 파일을 사용해 보조 복제본에 인증서를 생성합니다.

USE master;
GO
CREATE CERTIFICATE TDE_Cert
FROM FILE = 'C:\Backup\TDE_Cert.cer'
WITH PRIVATE KEY (
    FILE = 'C:\Backup\TDE_Cert.pvk',
    DECRYPTION BY PASSWORD = '개인키_암호'
);
GO

이때 주 복제본에서 백업 파일을 암호화할 때 사용했던 복호화 암호를 지정해야 합니다.

7단계: 주 인스턴스 – TDE 암호화 활성화

대상 데이터베이스에서 TDE를 활성화하는 마지막 단계입니다. 다음 명령을 실행합니다.

ALTER DATABASE TDE_DB SET ENCRYPTION ON;
GO

이제 암호화 진행 상태를 모니터링하고, 상태 값이 3(암호화 완료)인지 확인합니다.

SELECT db.name, dek.encryption_state
FROM sys.dm_database_encryption_keys AS dek
JOIN sys.databases AS db
  ON dek.database_id = db.database_id;
GO

아래 쿼리로 TDE가 활성화된 데이터베이스 목록을 조회할 수 있습니다.

결과를 보면 TDE_DB 데이터베이스에 TDE가 활성화되어 있으며, 암호화 상태 3은 데이터베이스가 완전히 암호화되었음을 의미합니다. 참고로 사용자 데이터베이스에 TDE를 적용하면 기본적으로 tempdb도 자동으로 암호화됩니다.

8단계: 가용성 그룹에 데이터베이스 추가

이제 암호화된 데이터베이스를 AG 그룹에 추가합니다.

참고: SSMS의 GUI 옵션으로는 TDE 암호화 데이터베이스를 가용성 그룹에 추가할 수 없습니다.

따라서 T-SQL을 사용해 데이터베이스를 AG에 추가해야 합니다. 주 복제본에서 TDE_Test 데이터베이스의 전체 백업과 트랜잭션 로그 백업을 수행한 뒤, 백업 파일을 보조 복제본으로 복사하고 NORECOVERY 옵션으로 복원합니다.

-- 주 복제본(node1)
BACKUP DATABASE TDE_Test TO DISK = 'C:\Backup\TDE_Test.bak';
BACKUP LOG TDE_Test TO DISK = 'C:\Backup\TDE_Test.trn';

-- 보조 복제본(node2)
RESTORE DATABASE TDE_Test FROM DISK = 'C:\Backup\TDE_Test.bak' WITH NORECOVERY;
RESTORE LOG TDE_Test FROM DISK = 'C:\Backup\TDE_Test.trn' WITH NORECOVERY;

-- 주 복제본(node1)
ALTER AVAILABILITY GROUP TDE_AG ADD DATABASE TDE_Test;
GO

백업과 복원이 완료되면 위 명령을 실행해 데이터베이스를 가용성 그룹에 추가합니다.

9단계: AG 상태 검증

대시보드를 통해 AG 상태를 점검하고, 수동 장애 조치(failover) 테스트를 수행해 TDE가 활성화된 데이터베이스가 정상적으로 작동하는지 확인합니다.

시나리오 2: AG에 이미 포함된 데이터베이스에 TDE 구성하기

데이터베이스가 이미 AG에 추가되어 있는 경우에도, 첫 번째 시나리오에서 설명한 단계를 그대로 따라 TDE를 활성화할 수 있습니다.

  • 1단계: 주 인스턴스 – 마스터 키 생성
  • 2단계: 주 인스턴스 – 인증서 생성
  • 3단계: 주 인스턴스 – DEK 생성
  • 4단계: 주 인스턴스 – 인증서 백업
  • 5단계: 보조 인스턴스 – 마스터 키 생성
  • 6단계: 보조 인스턴스 – 보조 인증서 생성
  • 7단계: 주 인스턴스 – TDE 암호화 활성화
  • 9단계: AG 상태 검증

앞선 시나리오에서 두 복제본 모두에 마스터 키와 인증서를 이미 생성했다면 1, 2, 4, 5, 6, 7단계는 건너뛰어도 됩니다. 이 경우 3단계(DEK 생성)와 7단계(TDE 활성화)만 수행하면 됩니다.

  • 주 복제본: node1
  • 보조 복제본: node2
  • AG 그룹: TDE_AG
  • AG 데이터베이스: Test_tde
  • TDE 인증서: TDE_AG2021

3단계 및 7단계 – 주 인스턴스에서 수행

USE Test_tde;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDE_AG2021;
GO

ALTER DATABASE Test_tde SET ENCRYPTION ON;
GO

암호화 진행 상태를 모니터링하고, 상태 값이 3(암호화 완료)인지 확인합니다.

SELECT db.name, dek.encryption_state
FROM sys.dm_database_encryption_keys AS dek
JOIN sys.databases AS db
  ON dek.database_id = db.database_id;
GO

아래 쿼리로 TDE가 활성화된 데이터베이스를 확인합니다.

마지막으로 AG 상태 점검과 장애 조치 테스트를 수행해 모든 것이 정상적으로 동작하는지 검증합니다.

시나리오 3: 만료된 인증서 교체하기

TDE 인증서의 만료일이 가까워졌다는 것을 알게 되면, 비록 만료된 인증서가 데이터베이스의 일반적인 운영에는 문제를 일으키지 않더라도 모범 사례에 따라 인증서를 교체(rotating)하는 것이 좋습니다.

아래 쿼리로 TDE 인증서의 만료일을 먼저 확인한 후, 설명된 단계에 따라 SQL TDE 인증서를 교체하세요.

SELECT name, subject, start_date, expiry_date
FROM sys.certificates;
GO

1단계: 주 인스턴스 – 새 인증서 생성

USE master;
GO
CREATE CERTIFICATE New_TDE_Cert
WITH SUBJECT = 'New TDE Certificate',
     EXPIRY_DATE = '20311231';
GO

2단계: 주 인스턴스 – 새 인증서 백업

BACKUP CERTIFICATE New_TDE_Cert TO FILE = 'C:\Backup\New_TDE_Cert.cer'
WITH PRIVATE KEY (
    FILE = 'C:\Backup\New_TDE_Cert.pvk',
    ENCRYPTION BY PASSWORD = '개인키_암호'
);
GO

3단계: 보조 인스턴스 – 보조 인증서 생성

새 인증서 파일을 보조 복제본으로 복사한 뒤, 주 복제본과 동일한 이름으로 인증서를 생성합니다.

4단계: 주 인스턴스 – SQL TDE 인증서 교체

USE Test_tde;
GO
ALTER DATABASE ENCRYPTION KEY
REGENERATE WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE New_TDE_Cert;
GO

Test_tde 데이터베이스의 만료일을 검증합니다.

SELECT db.name, c.name AS certificate_name, c.expiry_date
FROM sys.dm_database_encryption_keys AS dek
JOIN sys.databases AS db ON db.database_id = dek.database_id
JOIN master.sys.certificates AS c
  ON dek.encryptor_thumbprint = c.thumbprint;
GO

5단계: AG 상태 검증

교체 후에도 AG 상태 점검과 장애 조치 테스트를 통해 정상 동작 여부를 확인합니다.

기존 백업을 복원해야 할 경우에 대비해 만료된 TDE 인증서는 한동안 보관해 두세요. 새 인증서는 키 교체 이후 수행된 백업을 복원할 때만 사용됩니다.

결론

SQL Server는 물리적 파일을 암호화하여 고객의 기밀 정보를 보호할 수 있는 TDE(투명 데이터 암호화) 기능을 제공합니다. 이 글에서는 AlwaysOn 가용성 그룹 데이터베이스에 대해 TDE를 구성하는 다양한 시나리오를 살펴보았습니다.

의견을 남기거나 질문하려면 피드백(Feedback) 탭을 이용해 주세요. 언제든지 저희와 대화를 시작하실 수 있습니다.