자습서: Azure SQL 데이터베이스의 VBS enclave를 사용하여 Always Encrypted 시작하기
적용 대상: Azure SQL 데이터베이스
이 자습서에서는 Azure SQL 데이터베이스에서 가상 기반 보안(VBS) enclave를 사용하여 보안 enclave를 사용한 Always Encrypted를 시작하는 방법을 알아볼 수 있습니다. 다음이 설명됩니다.
- 보안 enclave를 사용한 Always Encrypted를 테스트 및 평가하기 위한 환경을 만드는 방법
- SSMS(SQL Server Management Studio)를 사용하여 암호화된 열에 대해 데이터를 바로 암호화하고 풍부한 기밀 쿼리를 실행하는 방법.
필수 구성 요소
- 활성화된 Azure 구독. 아직 없는 경우 체험 계정을 만들 수 있습니다. 리소스를 만들려면 구독의 기여자 역할 또는 소유자 역할의 구성원이어야 합니다.
- 선택 사항이지만 Azure Key Vault의 키 자격 증명 모음인 Always Encrypted에 대한 열 마스터 키를 저장하는 데 권장됩니다. 키 자격 증명 모음을 만드는 방법에 대한 정보는 빠른 시작: Azure Portal을 사용하여 키 자격 증명 모음 만들기를 참조하세요.
- 키 자격 증명 모음에서 액세스 정책 권한 모델을 사용하는 경우 키 자격 증명 모음에
get
,list
,create
,unwrap key
,wrap key
,verify
,sign
등의 주요 권한이 있는지 확인합니다. Key Vault 액세스 정책 할당을 참조하세요. - Azure RBAC(역할 기반 액세스 제어) 권한 모델을 사용하는 경우 키 자격 증명 모음에 대한 Key Vault Crypto Officer 역할의 멤버인지 확인합니다. Azure 역할 기반 액세스 제어를 사용하여 Key Vault 키, 인증서 및 비밀에 대한 액세스 제공을 참조하세요.
- 키 자격 증명 모음에서 액세스 정책 권한 모델을 사용하는 경우 키 자격 증명 모음에
도구 요구 사항:
이 자습서에는 SSMS(SQL Server Management Studio)가 필요합니다. PowerShell 또는 Azure CLI를 사용하여 보안 enclave를 사용하도록 선택할 수 있습니다.
최신 버전의 SQL Server Management Studio(SSMS)를 다운로드하세요.
1단계: 서버 및 데이터베이스 만들기 및 구성
이 단계에서는 Azure SQL 데이터베이스 논리 서버와 새로운 데이터베이스를 만듭니다.
빠른 시작: 단일 Azure SQL 데이터베이스 데이터베이스를 만들고 단일 데이터베이스 만들기 섹션의 지침에 따라 새 Azure SQL 데이터베이스 논리 서버 및 새 데이터베이스를 만듭니다.
Important
샘플 데이터베이스가 아닌 ContosoHR이라는 이름의 빈 데이터베이스를 만들어야 합니다.
2단계: VBS Enclave 사용
이 단계에서는 보안 enclave를 사용하는 Always Encrypted에 필요한 데이터베이스에서 VBS Enclave를 사용하도록 설정합니다. 데이터베이스에서 VBS Enclave를 사용하려면 preferredEnclaveType 데이터베이스 속성을 VBS로 설정해야 합니다.
Azure Portal을 열고 보안 enclave를 사용하도록 설정할 데이터베이스를 찾습니다.
보안 설정에서 데이터 암호화를 선택합니다.
데이터 암호화 메뉴에서 Always Encrypted 탭을 선택합니다.
보안 enclave를 ON으로 설정합니다. 이미 ON으로 설정된 경우 다음 단계를 진행합니다.
저장을 선택하여 Always Encrypted 구성을 저장합니다.
3단계: 데이터베이스 채우기
이 단계에서는 테이블을 만들고 나중에 암호화하고 쿼리할 일부 데이터로 채웁니다.
SSMS를 열고 데이터베이스 연결에서 Always Encrypted를 사용하지 않고 만든 Azure SQL 논리 서버의 ContosoHR 데이터베이스에 연결합니다.
서버에 연결 대화 상자에서 서버의 정규화된 이름(예: myserver135.database.windows.net)을 지정하고, 서버를 만들 때 지정한 관리자 사용자 이름과 암호를 입력합니다.
옵션 >>을 선택하고 연결 속성 탭을 선택합니다. ContosoHR 데이터베이스(기본
master
데이터베이스 아님)를 선택해야 합니다.Always Encrypted 탭을 선택합니다.
Always Encrypted 사용(열 암호화) 확인란이 선택되어 있지 않은지 확인합니다.
연결을 선택합니다.
Employees라는 새 테이블을 만듭니다.
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]; GO
Employees 테이블에 몇 개의 직원 레코드를 추가합니다.
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로 입력합니다.
- Enclave 계산 허용이 선택되어 있는지 확인합니다. (데이터베이스에 대해 보안 Enclave를 사용하도록 설정된 경우 기본적으로 선택됩니다. 데이터베이스가 DC 시리즈 하드웨어 구성을 사용하므로 활성화해야 합니다.)
- Azure Key Vault 또는 Windows 인증서 저장소(현재 사용자 또는 로컬 컴퓨터)를 선택합니다.
- Azure Key Vault를 선택한 경우 Azure에 로그인하고, 사용할 키 자격 증명 모음이 포함된 Azure 구독을 선택하고, 키 자격 증명 모음을 선택합니다. 키 생성을 선택하여 새 키를 만듭니다.
- Windows 인증서 저장소를 선택한 경우 인증서 생성 단추를 선택하여 새 인증서를 만듭니다.
- 확인을 선택합니다.
새 Enclave 사용 열 암호화 키를 만듭니다.
- Always Encrypted 키를 마우스 오른쪽 단추로 클릭하고 새 열 암호화 키를 선택합니다.
- 새 열 암호화 키의 이름을 입력합니다. CEK1.
- 열 마스터 키 드롭다운에서 이전 단계에서 만든 열 마스터 키를 선택합니다.
- 확인을 선택합니다.
5단계: 일부 열 미리 암호화
이 단계에서는 서버 쪽 Enclave 내에서 SSN 및 Salary 열에 저장된 데이터를 암호화한 다음, 데이터에서 SELECT 쿼리를 테스트합니다.
새 SSMS 인스턴스를 열고 데이터베이스 연결에 대해 Always Encrypted를 사용하여 데이터베이스에 연결합니다.
SSMS의 새 인스턴스를 시작합니다.
서버에 연결 대화 상자에서 서버의 정규화된 이름(예: myserver135.database.windows.net)을 지정하고, 서버를 만들 때 지정한 관리자 사용자 이름과 암호를 입력합니다.
옵션 >>을 선택하고 연결 속성 탭을 선택합니다. ContosoHR 데이터베이스(기본
master
데이터베이스 아님)를 선택해야 합니다.Always Encrypted 탭을 선택합니다.
Always Encrypted(열 암호화) 사용 확인란을 선택합니다.
보안 Enclave 사용을 선택합니다.
프로토콜을 None으로 설정합니다. 아래 스크린샷을 참조하세요.
연결을 선택합니다.
Always Encrypted 쿼리에 대해 매개 변수화를 사용하도록 설정하라는 메시지가 표시되면 사용을 선택합니다.
동일한 SSMS 인스턴스(Always Encrypted 사용)를 사용하여 새 쿼리 창을 열고, 아래 명령문을 실행하여 SSN 및 Salary 열을 암호화합니다.
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 인스턴스에서 새 쿼리 창을 열고 아래 문을 실행합니다. 쿼리 창의 SSN 및 Salary 열에 암호화된 값이 반환되어야 합니다. Always Encrypted를 사용하는 SSMS 인스턴스에서 동일한 쿼리를 실행하는 경우 암호화된 데이터가 표시되어야 됩니다.
SELECT * FROM [HR].[Employees];
6단계: 암호화된 열에 대해 리치 쿼리 실행
암호화된 열에 대해 다양한 쿼리를 실행할 수 있습니다. 일부 쿼리 처리는 서버 쪽 Enclave 내에서 수행됩니다.
Always Encrypted를 사용하는 SSMS instance에서 Always Encrypted에 대해 매개 변수화도 사용하도록 설정되었는지 확인합니다.
- SSMS의 기본 메뉴에서 도구 를 선택합니다.
- 옵션... 을 선택합니다.
- 쿼리 실행>SQL Server>고급으로 이동합니다.
- Always Encrypted에 대해 매개 변수화 사용이 선택되었는지 확인합니다.
- 확인을 선택합니다.
새 쿼리 창을 열고 아래 쿼리를 붙여넣은 다음, 실행합니다. 이 쿼리는 지정된 검색 기준에 맞는 일반 텍스트 값 및 행을 반환해야 합니다.
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Always Encrypted를 사용하도록 설정되지 않은 SSMS 인스턴스에서 동일한 쿼리를 다시 시도합니다. 오류가 발생합니다.
다음 단계
이 자습서를 완료한 후 다음 자습서 중 하나로 이동할 수 있습니다.
- 자습서: 보안 enclave를 사용한 Always Encrypted를 이용하여 .NET 애플리케이션 개발을 참조하세요.
- 자습서: 보안 enclave를 사용한 Always Encrypted를 이용하여 .NET Framework 응용 프로그램 개발
- 자습서: 임의 암호화를 사용하는 enclave 사용 열에 인덱스 만들기 및 사용