자습서: SQL Server의 보안 enclave를 사용하여 Always Encrypted 시작하기
적용 대상: SQL Server 2019(15.x) 이상 - Windows만 해당
이 자습서에서는 SQL Server에서 보안 Enclave를 사용한 Always Encrypted를 시작하는 방법을 설명합니다. 다음이 설명됩니다.
- Enclave에 대해 구성된 증명이 없는 보안 enclave를 사용하여 Always Encrypted를 테스트 및 평가하기 위한 기본 환경을 만드는 방법.
- SSMS(SQL Server Management Studio)를 사용하여 암호화된 열에 대해 데이터를 바로 암호화하고 풍부한 기밀 쿼리를 실행하는 방법.
Enclave 증명에 호스트 보호 서비스를 사용하여 보안 Enclave를 사용하여 Always Encrypted를 설정하는 방법을 알아보려면 자습서: HGS를 사용하여 증명이 있는 SQL Server의 보안 Enclave로 Always Encrypted 사용 시작
필수 조건
SQL Server 인스턴스(SQL Server 컴퓨터라고 함)를 호스팅하는 컴퓨터는 다음 요구 사항을 충족해야 합니다.
- SQL Server 2019(15.x) 이상.
- Windows 10 이상, Windows 서버 2019 이상.
- 가상화 기술에 대한 CPU 지원:
- Extended Page Tables이 가능한 Intel VT-x.
- AMD-V의 신속한 가상화 인덱싱
- VM에서 SQL Server를 실행하는 경우:
- Azure의 경우 2세대 VM 크기(권장 사항) 또는 중첩 가상화가 적용된 1세대 VM 크기를 사용합니다. 어떤 1세대 VM 크기가 중첩 가상화를 지원하는지 확인하려면 개별 VM 크기 문서를 참조하세요.
- Hyper-V 2016 이상(Azure 외부)에서는 VM이 2세대 VM(권장 사항)인지 확인하세요. 적어도 중첩 가상화가 적용된 1세대 VM이어야 합니다. 자세한 내용은 Hyper-V에 1 또는 2세대 가상 머신을 만들어야 하나요? 및 중첩 가상화 구성을 참조하세요.
- VMware 문서에 설명된 대로 VMWare vSphere 6.7 이상에서 VM에 대한 가상화 기반 보안 지원을 사용합니다.
- 기타 하이퍼바이저 및 퍼블릭 클라우드는 VBS Enclave로 Always Encrypted를 사용하도록 설정하는 중첩된 가상화 기능도 지원할 수 있습니다. 호환성 및 구성 지침은 가상화 솔루션의 문서를 확인합니다.
- 최신 버전의 SSMS(SQL Server Management Studio). 대안으로 다른 컴퓨터에 SSMS를 설치할 수 있습니다.
경고
프로덕션 환경에서 SQL Server 컴퓨터에서 SSMS나 다른 키 관리 도구를 실행하면Always Encrypted를 사용하는 보안상의 이점이 떨어질 수 있습니다. 일반적으로 이런 도구는 다른 컴퓨터에서 실행하는 것을 권장합니다. 더 자세한 정보는 키 관리에 대한 보안 고려 사항을 참조하세요.
1단계: VBS(가상화 기반 보안)가 사용하도록 설정되어 있는지 확인
관리자 권한으로 SQL Server 컴퓨터에 로그인하고 관리자 권한 Windows PowerShell 콘솔을 열고 msinfo32.exe 실행합니다. VM이 실행 중인지 확인 VBS가 실행 중인 경우 이 섹션의 나머지 단계를 건너뛰고 다음 섹션으로 이동합니다.
PowerShell 세션에서 다음 cmdlet을 실행하여 VBS를 사용하도록 설정합니다.
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
SQL Server 컴퓨터가 가상 머신이거나, UEFI 보안 부팅을 지원하지 않는 물리적 컴퓨터거나, IOMMU가 장착되지 않은 물리적 컴퓨터인 경우 플랫폼 보안 기능에 대한 VBS 요구 사항을 제거해야 합니다. 관리자 권한 PowerShell 콘솔의 SQL Server 컴퓨터에서 다음 명령을 실행하여 보안 부팅 및 IOMMU에 대한 요구 사항을 제거합니다.
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
SQL Server 컴퓨터를 다시 시작하여 VBS가 온라인 상태가 되도록 합니다.
Restart-Computer
1단계를 반복하여 VBS가 실행 중인지 확인합니다.
2단계: SQL Server에서 보안 Enclave를 사용한 Always Encrypted 사용
이 단계에서는 SQL Server 인스턴스에서 보안 Enclave를 사용하여 Always Encrypted 기능을 사용하도록 설정합니다.
데이터베이스 연결에 Always Encrypted를 사용하지 않고, SSMS를 통해 SQL Server 인스턴스에 sysadmin으로 연결합니다.
SSMS를 시작합니다.
서버에 연결 대화 상자에서 서버 이름을 지정하고 인증 방법을 선택하고 자격 증명을 지정합니다.
옵션 >> 을 선택하고 Always Encrypted 탭을 선택합니다.
Always Encrypted 사용(열 암호화) 확인란이 선택되어 있지 않은지 확인합니다.
연결을 선택합니다.
새 쿼리 창을 열고 아래 문을 실행하여 보안 enclave 유형을 VBS(가상화 기반 보안)으로 설정합니다.
EXEC sys.sp_configure 'column encryption enclave type', 1; RECONFIGURE;
이전 변경 내용을 적용하려면 SQL Server 인스턴스를 다시 시작합니다. 개체 탐색기에서 instance를 마우스 오른쪽 단추로 클릭하고 다시 시작을 선택하여 SSMS에서 해당 instance를 다시 시작합니다. instance가 다시 시작되면 다시 연결합니다.
이제 다음 쿼리를 실행하여 보안 Enclave가 로드되는지 확인합니다.
SELECT [name], [value], [value_in_use] FROM sys.configurations WHERE [name] = 'column encryption enclave type';
쿼리는 다음 결과를 반환해야 합니다.
name value value_in_use 열 encryption enclave type 1 1
3단계: 샘플 데이터베이스 만들기
이 단계에서는 나중에 암호화 할 일부 샘플 데이터가 포함된 데이터베이스를 만듭니다.
이전 단계의 SSMS instance를 사용하여 쿼리 창에서 아래 문을 실행하여 ContosoHR이라는 이름의 새 데이터베이스를 만듭니다.
CREATE DATABASE [ContosoHR];
Employees라는 이름의 새 테이블을 만듭니다.
USE [ContosoHR]; GO CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY];
Employees 테이블에 몇 개의 직원 레코드를 추가합니다.
USE [ContosoHR]; GO INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
4단계: Enclave 사용 키 프로비전
이 단계에서는 Enclave 계산을 허용하는 열 마스터 키 및 열 암호화 키를 만듭니다.
이전 단계의 SSMS instance를 사용해, 개체 탐색기에서 데이터베이스를 확장하고 보안>Always Encrypted 키로 이동합니다.
새 Enclave 사용해 열 마스터 키를 프로비전합니다.
마우스 오른쪽 단추를 클릭해 Always Encrypted 키 및 새 열 마스터 키... 를 선택합니다.
열 마스터 키 이름을 선택합니다. CMK1.
Windows 인증서 저장소(현재 사용자 또는 로컬 컴퓨터) 또는 Azure Key Vault를 선택합니다.
Enclave 계산 허용을 선택합니다.
Azure Key Vault를 선택한 경우 Azure에 로그인하고 키 자격 증명 모음을 선택합니다. Always Encrypted용 키 자격 증명 모음을 만드는 방법에 대한 자세한 내용은 Azure Portal에서 키 자격 증명 모음 관리를 참조하세요.
인증서나 Azure 키 값 키가 이미 존재하는 경우 하나를 선택하거나 인증서 생성 버튼을 선택하여 새 인증서를 생성합니다.
확인을 선택합니다.
새 Enclave 사용 열 암호화 키를 만듭니다.
- Always Encrypted 키를 마우스 오른쪽 단추로 클릭하고 새 열 암호화 키를 선택합니다.
- 새 열 암호화 키의 이름을 입력합니다. CEK1.
- 열 마스터 키 드롭다운에서 이전 단계에서 만든 열 마스터 키를 선택합니다.
- 확인을 선택합니다.
5단계: 일부 열 미리 암호화
이 단계에서는 서버 쪽 Enclave 내에서 SSN 및 Salary 열에 저장된 데이터를 암호화한 다음, 데이터에서 SELECT 쿼리를 테스트합니다.
새 SSMS instance를 연 다음, 데이터베이스 연결에 Always Encrypted를 사용하여 SQL Server 인스턴스에 연결합니다.
SSMS의 새 instance를 시작합니다.
서버에 연결 대화 상자에서 서버 이름을 지정하고 인증 방법을 선택하고 자격 증명을 지정합니다.
옵션 >> 을 선택하고 Always Encrypted 탭을 선택합니다.
Always Encrypted(열 암호화) 사용 확인란을 선택합니다.
보안 Enclave 사용을 선택합니다.
프로토콜을 None으로 설정합니다.
연결을 선택합니다.
Always Encrypted 쿼리에 대해 매개 변수화를 사용하도록 설정하라는 메시지가 표시되면 사용을 선택합니다.
동일한 SSMS instance(Always Encrypted 사용)를 사용해 새 쿼리 창을 열고, 아래 쿼리를 실행하여 SSN 및 Salary 열을 암호화합니다.
USE [ContosoHR]; GO ALTER TABLE [HR].[Employees] ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
참고 항목
위의 스크립트에서 데이터베이스에 대한 쿼리 계획 캐시를 지우려면 ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE 문을 확인합니다. 테이블을 변경한 후에는 테이블에 액세스하는 모든 일괄 처리 및 저장 프로시저에 대한 계획을 지워서 매개 변수 암호화 정보를 새로 고쳐야 합니다.
SSN 및 Salary 열이 지금 암호화되었는지 확인하려면, 데이터베이스 연결에 대해 Always Encrypted를 사용하지 않고 SSMS instance에서 새 쿼리 창을 열고 아래 문을 실행합니다. 쿼리 창의 SSN 및 Salary 열에 암호화된 값이 반환되어야 합니다. Always Encrypted를 사용하는 SSMS 인스턴스에서 동일한 쿼리를 실행하는 경우 암호화된 데이터가 표시되어야 됩니다.
SELECT * FROM [HR].[Employees];
6단계: 암호화된 열에 대해 리치 쿼리 실행
이제 암호화된 열에 대해 리치 조회를 실행할 수 있습니다. 일부 쿼리 처리는 서버 쪽 Enclave 내에서 수행됩니다.
Always Encrypted를 사용하는 SSMS instance에서 Always Encrypted에 대해 매개 변수화도 사용하도록 설정되었는지 확인합니다.
- SSMS의 기본 메뉴에서 도구 를 선택합니다.
- 옵션... 을 선택합니다.
- 쿼리 실행>SQL Server>고급으로 이동합니다.
- Always Encrypted에 대해 매개 변수화 사용이 선택되었는지 확인합니다.
- OK을 선택합니다.
새 쿼리 창을 열고 아래 쿼리를 붙여넣은 다음 실행합니다. 이 쿼리는 지정된 검색 기준에 맞는 일반 텍스트 값 및 행을 반환해야 합니다.
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Always Encrypted를 사용하지 않는 SSMS instance에서 동일한 쿼리를 다시 시도하고 발생하는 오류를 확인합니다.
다음 단계
이 자습서를 완료한 후 다음 자습서 중 하나로 이동할 수 있습니다.
- 자습서: 보안 enclave를 사용한 Always Encrypted를 이용하여 .NET 애플리케이션 개발을 참조하세요.
- 자습서: 보안 enclave를 사용한 Always Encrypted를 이용하여 .NET Framework 응용 프로그램 개발
- 자습서: 임의 암호화를 사용하는 enclave 사용 열에 인덱스 만들기 및 사용