자습서: HGS 사용 증명을 사용하는 SQL Server의 보안 Enclave를 사용하여 Always Encrypted 시작하기
적용 대상: SQL Server 2019(15.x) 이상 - Windows만 해당
이 자습서에서는 Enclave 증명을 위해 호스트 보호 서비스(HGS)를 사용하여 SQL Server에서 보안 Enclave를 사용한 Always Encrypted를 시작하는 방법을 설명합니다. 다음이 설명됩니다.
- 보안 Enclave를 사용하여 Always Encrypted를 테스트하고 평가하기 위한 기본 환경을 만드는 방법 및 Enclave 증명을 위해 구성된 HGS를 사용하는 방법.
- SSMS(SQL Server Management Studio)를 사용하여 암호화된 열에 대해 데이터를 바로 암호화하고 풍부한 기밀 쿼리를 실행하는 방법.
증명 없이 보안 Enclave를 사용하여 Always Encrypted를 설정하는 방법을 알아보려면 자습서: SQL Server의 보안 Enclave와 함께 Always Encrypted 사용을 시작하세요.
필수 조건
보안 Enclave를 사용한 Always Encrypted를 시작하려면 2대 이상의 컴퓨터(가상 머신 가능)가 필요합니다.
- SQL Server 및 SSMS를 호스트 할 SQL Server 컴퓨터입니다.
- Enclave 증명에 필요한 호스트 보호 서비스를 실행하는 HGS 컴퓨터입니다.
SQL Server 컴퓨터 요구 사항
- SQL Server 2019(15.x) 이상.
- Windows 10 버전 1809 이상 - Enterprise Edition, Windows 11 이상 - Enterprise Edition, Windows 서버 2019 이상 - 데이터 센터 버전. 기타 버전의 Windows 10/11 및 Windows 서버는 HGS를 사용하는 증명을 지원하지 않습니다.
- 가상화 기술에 대한 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를 사용하는 보안상의 이점이 떨어질 수 있습니다. 일반적으로 이런 도구는 다른 컴퓨터에서 실행하는 것을 권장합니다. 더 자세한 정보는 키 관리에 대한 보안 고려 사항을 참조하세요.
HGS 컴퓨터 요구 사항
- Windows 서버 2019(Standard 또는 Datacenter Edition)
- CPU 2개
- 8GB RAM
- 100GB 스토리지
노트
시작하기 전에 HGS 컴퓨터를 도메인에 가입하면 안 됩니다.
1단계: HGS 컴퓨터 구성
이 단계에서는 호스트 키 증명을 지원하는 호스트 보호 서비스를 실행하도록 HGS 컴퓨터를 구성합니다.
관리자(로컬 관리자)로 HGS 컴퓨터에 로그인하고, 관리자 권한 Windows PowerShell 콘솔을 열고, 다음 명령을 실행하여 호스트 보호 서비스 역할을 추가합니다.
Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
HGS 컴퓨터가 다시 부팅되면 관리자 계정으로 다시 로그인하고, 관리자 권한의 Windows PowerShell 콘솔을 열고, 다음 명령을 실행하여 호스트 보호 서비스를 설치하고 해당 도메인을 구성합니다. 여기서 지정한 비밀번호는 Active Directory의 디렉터리 서비스 복구 모드 비밀번호에만 적용되며, 관리자 계정의 로그인 암호는 변경되지 않습니다. -HgsDomainName에 대해 선택한 도메인 이름을 제공할 수 있습니다.
$adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
컴퓨터가 다시 시작하면 관리자 계정(이제 도메인 관리자이기도 하므로)으로 로그인합니다. 관리자 권한 Windows PowerShell 콘솔을 열고 HGS instance에 대한 호스트 키 증명을 구성합니다.
Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey
다음 명령을 실행하여 HGS 컴퓨터의 IP 주소를 찾습니다. 이후 단계를 위해 이 IP 주소를 저장합니다.
Get-NetIPAddress
노트
또는 DNS 이름으로 HGS 컴퓨터를 참조하려는 경우 회사 DNS 서버에서 새 HGS 도메인 컨트롤러로 전달자를 설정할 수 있습니다.
2단계: SQL Server 컴퓨터를 보호된 호스트로 구성
이 단계에서는 호스트 키 증명을 사용해 SQL Server 컴퓨터를 HGS에 등록된 보호된 호스트로 구성합니다.
경고
호스트 키 증명은 약한 증명 모드로 간주됩니다. 가능하다면 프로덕션 환경에서는 TPM 증명을 사용해야 합니다. 더 자세한 정보는 증명 모드를 참조하세요.
관리자 권한으로 SQL Server 컴퓨터에 로그인하고, 관리자 권한의 Windows PowerShell 콘솔을 연 다음, computername 변수에 액세스하여 컴퓨터의 이름을 검색합니다.
$env:computername
보호된 호스트 기능을 설치합니다. 이렇게 하면 Hyper-V(아직 설치되지 않은 경우)도 설치됩니다.
Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
Hyper-V 설치를 완료하라는 메시지가 표시되면 SQL Server 컴퓨터를 다시 시작합니다.
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
관리자 권한으로 SQL Server 컴퓨터에 다시 로그인하고, 관리자 권한 Windows PowerShell 콘솔을 열고, 고유한 호스트 키를 생성하고, 결과 공개 키를 파일로 내보냅니다.
Set-HgsClientHostKey Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
이전 단계에서 생성된 호스트 키 파일을 HGS 컴퓨터에 수동으로 복사합니다. 아래 지침에서는 파일 이름이
hostkey.cer
이고 HGS 컴퓨터의 데스크톱으로 복사 중이라고 가정합니다.HGS 컴퓨터에서 관리자 권한 Windows PowerShell 콘솔을 열고 HGS에 SQL Server 컴퓨터의 호스트 키를 등록합니다.
Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
SQL Server 컴퓨터의 관리자 권한 Windows PowerShell 콘솔에서 다음 명령을 실행하여 SQL Server 컴퓨터에서 어디서 이를 수집해야 했는지 알릴 수 있습니다. 두 주소 위치 모두에 HGS 컴퓨터의 IP 주소 또는 DNS 이름을 지정해야 합니다.
# use http, and not https Set-HgsClientConfiguration -AttestationServerUrl http://<IP address or DNS name>/Attestation -KeyProtectionServerUrl http://<IP address or DNS name>/KeyProtection/
위 명령의 결과는 AttestationStatus = Passed임을 보여 줘야 합니다.
HostUnreachable
오류가 발생하면 SQL Server 컴퓨터가 HGS와 통신할 수 없음을 의미합니다. HGS 컴퓨터를 ping할 수 있는지 확인합니다.
UnauthorizedHost
오류는 공개 키가 HGS 서버에 등록되지 않았음을 나타냅니다. 5단계와 6단계를 반복하여 오류를 해결합니다.
다른 모든 작업이 실패하면, Remove-HgsClientHostKey
을 실행하고 4-7단계를 반복합니다.
3단계: 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
4단계: 샘플 데이터베이스 만들기
이 단계에서는 나중에 암호화 할 일부 샘플 데이터가 포함된 데이터베이스를 만듭니다.
이전 단계의 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);
5단계: 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.
- 열 마스터 키 드롭다운에서 이전 단계에서 만든 열 마스터 키를 선택합니다.
- OK을 선택합니다.
6단계: 인플레이스 방식으로 일부 열 암호화
이 단계에서는 서버 쪽 Enclave 내에서 SSN 및 Salary 열에 저장된 데이터를 암호화한 다음, 데이터에서 SELECT 쿼리를 테스트합니다.
새 SSMS instance를 연 다음, 데이터베이스 연결에 Always Encrypted를 사용하여 SQL Server 인스턴스에 연결합니다.
SSMS의 새 instance를 시작합니다.
서버에 연결 대화 상자에서 서버 이름을 지정하고 인증 방법을 선택하고 자격 증명을 지정합니다.
옵션 >> 을 선택하고 Always Encrypted 탭을 선택합니다.
Always Encrypted(열 암호화) 사용 확인란을 선택합니다.
보안 Enclave 사용을 선택합니다. (이 단계는 SSMS 19 이상에 적용됩니다.)
프로토콜을 호스트 보호 서비스로 설정합니다. (이 단계는 SSMS 19 이상에 적용됩니다.)
enclave 증명 URL을 지정합니다(예: http:// hgs.bastion.local/Attestation).
연결을 선택합니다.
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 instance에서 동일한 쿼리를 실행하는 경우 암호화된 데이터가 해독된 것을 볼 수 있습니다.
SELECT * FROM [HR].[Employees];
7단계: 암호화된 열에 대해 리치 쿼리 실행
이제 암호화된 열에 대해 리치 조회를 실행할 수 있습니다. 일부 쿼리 처리는 서버 쪽 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 사용 열에 인덱스 만들기 및 사용
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기