자습서: Azure SQL Database의 보안 Enclave를 사용한 Always Encrypted 알아보기

적용 대상:Azure SQL Database

이 자습서에서는 Azure SQL Database에서 가상 기반 보안(VBS) enclave를 사용하여보안 enclave를 사용한 Always Encrypted를 시작하는 방법을 알아볼 수 있습니다. 다음이 설명됩니다.

  • 보안 enclave를 사용한 Always Encrypted를 테스트 및 평가하기 위한 환경을 만드는 방법
  • SSMS(SQL Server Management Studio)를 사용하여 암호화된 열에 대해 데이터를 바로 암호화하고 풍부한 기밀 쿼리를 실행하는 방법.

필수 구성 요소

도구 요구 사항:

이 자습서에는 SSMS(SQL Server Management Studio)가 필요합니다. PowerShell 또는 Azure CLI를 사용하여 보안 enclave를 사용하도록 선택할 수 있습니다.

최신 버전의 SQL Server Management Studio(SSMS)를 다운로드하세요.

1단계: 서버 및 데이터베이스 만들기 및 구성

이 단계에서는 Azure SQL Database 논리 서버와 새로운 데이터베이스를 만듭니다.

빠른 시작: 단일 Azure SQL Database 데이터베이스를 만들고단일 데이터베이스 만들기 섹션의 지침에 따라 새 Azure SQL Database 논리 서버 및 새 데이터베이스를 만듭니다.

Important

샘플 데이터베이스가 아닌 ContosoHR이라는 이름의 빈 데이터베이스를 만들어야 합니다.

2단계: VBS Enclave 사용

이 단계에서는 보안 enclave를 사용하는 Always Encrypted에 필요한 데이터베이스에서 VBS Enclave를 사용하도록 설정합니다. 데이터베이스에서 VBS enclave를 사용하도록 설정하려면 preferredEnclaveType데이터베이스 속성VBS로 설정해야 합니다.

  1. Azure Portal을 열고 보안 enclave를 사용하도록 설정할 데이터베이스를 찾습니다.

  2. 보안 설정에서 데이터 암호화를 선택합니다.

  3. 데이터 암호화 메뉴에서 Always Encrypted 탭을 선택합니다.

  4. 보안 enclaveON으로 설정합니다. 이미 ON으로 설정된 경우 다음 단계를 진행합니다.

    Screenshot of enabling secure enclaves on an existing database in the Azure portal.

  5. 저장을 선택하여 Always Encrypted 구성을 저장합니다.

3단계: 데이터베이스 채우기

이 단계에서는 테이블을 만들고 나중에 암호화하고 쿼리할 일부 데이터로 채웁니다.

  1. SSMS를 열고 데이터베이스 연결에서 Always Encrypted를 사용하지 않고 만든 Azure SQL 논리 서버의 ContosoHR 데이터베이스에 연결합니다.

    1. 서버에 연결 대화 상자에서 서버의 정규화된 이름(예: myserver135.database.windows.net)을 지정하고, 서버를 만들 때 지정한 관리자 사용자 이름과 암호를 입력합니다.

    2. 옵션 >>을 선택하고 연결 속성 탭을 선택합니다. ContosoHR 데이터베이스(기본 master 데이터베이스 아님)를 선택해야 합니다.

    3. Always Encrypted 탭을 선택합니다.

    4. Always Encrypted 사용(열 암호화) 확인란이 선택되어 있지 않은지 확인합니다.

      Screenshot of Connect to Server using SSMS without Always Encrypted enabled.

    5. 연결을 선택합니다.

  2. 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
    
  3. 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 계산을 허용하는 열 마스터 키 및 열 암호화 키를 만듭니다.

  1. 이전 단계의 SSMS 인스턴스를 사용해, 개체 탐색기에서 데이터베이스를 확장하고 보안>Always Encrypted 키로 이동합니다.

  2. 새 Enclave 사용 열 마스터 키를 프로비전합니다.

    1. Always Encrypted 키를 마우스 오른쪽 단추로 클릭하고 새 열 마스터 키... 를 선택합니다.
    2. 새 열 마스터 키의 이름을 CMK1로 입력합니다.
    3. Enclave 계산 허용이 선택되어 있는지 확인합니다. (데이터베이스에 대해 보안 Enclave를 사용하도록 설정된 경우 기본적으로 선택됩니다. 데이터베이스가 DC 시리즈 하드웨어 구성을 사용하므로 활성화해야 합니다.)
    4. Azure Key Vault 또는 Windows 인증서 저장소(현재 사용자 또는 로컬 컴퓨터)를 선택합니다.
      • Azure Key Vault를 선택한 경우 Azure에 로그인하고, 사용할 키 자격 증명 모음이 포함된 Azure 구독을 선택하고, 키 자격 증명 모음을 선택합니다. 키 생성을 선택하여 새 키를 만듭니다.
      • Windows 인증서 저장소를 선택한 경우 인증서 생성 단추를 선택하여 새 인증서를 만듭니다. Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.
    5. 확인을 선택합니다.
  3. 새 Enclave 사용 열 암호화 키를 만듭니다.

    1. Always Encrypted 키를 마우스 오른쪽 단추로 클릭하고 새 열 암호화 키를 선택합니다.
    2. 새 열 암호화 키의 이름을 입력합니다. CEK1.
    3. 열 마스터 키 드롭다운에서 이전 단계에서 만든 열 마스터 키를 선택합니다.
    4. 확인을 선택합니다.

5단계: 일부 열 미리 암호화

이 단계에서는 서버 쪽 Enclave 내에서 SSNSalary 열에 저장된 데이터를 암호화한 다음, 데이터에서 SELECT 쿼리를 테스트합니다.

  1. 새 SSMS 인스턴스를 열고 데이터베이스 연결에 대해 Always Encrypted를 사용하여 데이터베이스에 연결합니다.

    1. SSMS의 새 인스턴스를 시작합니다.

    2. 서버에 연결 대화 상자에서 서버의 정규화된 이름(예: myserver135.database.windows.net)을 지정하고, 서버를 만들 때 지정한 관리자 사용자 이름과 암호를 입력합니다.

    3. 옵션 >>을 선택하고 연결 속성 탭을 선택합니다. ContosoHR 데이터베이스(기본 master 데이터베이스 아님)를 선택해야 합니다.

    4. Always Encrypted 탭을 선택합니다.

    5. Always Encrypted(열 암호화) 사용 확인란을 선택합니다.

    6. 보안 Enclave 사용을 선택합니다.

    7. 프로토콜None으로 설정합니다. 아래 스크린샷을 참조하세요.

      Screenshot of the SSMS Connect to Server dialog Always Encrypted tab, with attestation protocol set to None.

    8. 연결을 선택합니다.

    9. Always Encrypted 쿼리에 대해 매개 변수화를 사용하도록 설정하라는 메시지가 표시되면 사용을 선택합니다.

  2. 동일한 SSMS 인스턴스(Always Encrypted 사용)를 사용하여 새 쿼리 창을 열고, 아래 명령문을 실행하여 SSNSalary 열을 암호화합니다.

    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문을 실행하세요. 테이블을 변경한 후에는 테이블에 액세스하는 모든 일괄 처리 및 저장 프로시저에 대한 계획을 지워서 매개 변수 암호화 정보를 새로 고쳐야 합니다.

  3. SSNSalary 열이 지금 암호화되었는지 확인하려면, 데이터베이스 연결에 대해 Always Encrypted를 사용하지 않고 SSMS 인스턴스에서 새 쿼리 창을 열고 아래 문을 실행합니다. 쿼리 창의 SSNSalary 열에 암호화된 값이 반환되어야 합니다. Always Encrypted를 사용하는 SSMS 인스턴스에서 동일한 쿼리를 실행하는 경우 암호화된 데이터가 표시되어야 됩니다.

    SELECT * FROM [HR].[Employees];
    

6단계: 암호화된 열에 대해 리치 쿼리 실행

암호화된 열에 대해 다양한 쿼리를 실행할 수 있습니다. 일부 쿼리 처리는 서버 쪽 Enclave 내에서 수행됩니다.

  1. Always Encrypted를 사용하는 SSMS 인스턴스에서 Always Encrypted에 대해 매개 변수화도 사용하도록 설정되었는지 확인합니다.

    1. SSMS의 주 메뉴에서 도구 를 선택합니다.
    2. 옵션... 을 선택합니다.
    3. 쿼리 실행>SQL Server>고급으로 이동합니다.
    4. Always Encrypted에 대해 매개 변수화 사용이 선택되었는지 확인합니다.
    5. 확인을 선택합니다.
  2. 새 쿼리 창을 열고 아래 쿼리를 붙여넣은 다음, 실행합니다. 이 쿼리는 지정된 검색 기준에 맞는 일반 텍스트 값 및 행을 반환해야 합니다.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Always Encrypted를 사용하도록 설정되지 않은 SSMS 인스턴스에서 동일한 쿼리를 다시 시도합니다. 오류가 발생합니다.

다음 단계

이 자습서를 완료한 후 다음 자습서 중 하나로 이동할 수 있습니다.

참고 항목