Azure Key Vault를 사용하여 SQL Server TDE 확장 가능 키 관리 설정

적용 대상:SQL Server

이 문서에서는 Azure Key Vault용 SQL Server 커넥터를 설치하고 구성합니다.

참고 항목

Microsoft Entra ID는 이전의 Azure AD(Azure Active Directory)입니다.

Azure Key Vault(AKV)를 사용한 확장 가능한 키 관리는 SQL Server 2022(16.x) 누적 업데이트 12부터 Linux 환경의 SQL Server에서 사용할 수 있습니다. 동일한 지침을 따르지만, 3단계와 4단계를 건너뜁니다.

필수 조건

SQL Server 인스턴스에서 Azure Key Vault를 사용하기 전에 다음 필수 조건을 충족해야 합니다.

1단계: Microsoft Entra 서비스 주체 설정

SQL Server 인스턴스에 Azure Key Vault에 대한 액세스 권한을 부여하려면 Microsoft Entra ID의 서비스 주체 계정이 필요합니다.

  1. Azure Portal에 로그인하고 다음 중 하나를 수행합니다.

    • Microsoft Entra ID 버튼을 선택합니다.

      Azure 서비스 창의 스크린샷.

    • 추가 서비스를 선택한 다음 전체 서비스 창에서 Microsoft Entra ID를 입력합니다.

  2. 다음을 수행하여 애플리케이션을 Microsoft Entra ID로 등록합니다. 자세한 단계별 지침은 Azure Key Vault 블로그 게시물의 애플리케이션의 ID 가져오기 섹션, Azure Key Vault - 단계별에서 확인할 수 있습니다.

    1. Microsoft Entra ID 리소스의 관리 섹션에서 앱 등록을 선택합니다.

      Azure Portal의 Microsoft Entra ID 개요 페이지 스크린샷.

    2. 앱 등록 페이지에서 신규 등록을 선택합니다.

      Azure Portal의 앱 등록 창 스크린샷.

    3. 애플리케이션 등록 창에서 앱에 대한 사용자 이름을 입력하고 등록을 선택합니다.

      애플리케이션 등록 창의 스크린샷.

    4. 왼쪽 창에서 인증서 및 비밀 > 클라이언트 암호 > 새 클라이언트 암호를 선택합니다.

      Azure Portal에서 앱의 인증서 및 비밀 창 스크린샷.

    5. 클라이언트 암호 추가에서 설명과 적절한 만료 시간을 입력하고 추가를 선택합니다. 24개월을 초과하는 만료 기간은 선택할 수 없습니다. 자세한 내용은 클라이언트 암호 추가를 참조하세요.

      Azure Portal에서 앱에 대한 클라이언트 암호 추가 섹션의 스크린샷.

    6. 인증서 및 비밀 창의 아래에서 SQL Server에서 비대칭 키를 만드는 데 사용할 클라이언트 암호 값 옆에 있는 복사 버튼을 선택합니다.

      Azure Portal에서 비밀 값의 스크린샷.

    7. 왼쪽 창에서 개요를 선택하고 애플리케이션(클라이언트) ID 상자에서 SQL Server에 비대칭 키를 만드는 데 사용할 값을 복사합니다.

      개요 창에 있는 애플리케이션(클라이언트) ID 값의 스크린샷.

2단계: 키 자격 증명 모음 만들기

키 자격 증명 모음을 만드는 데 사용할 방법을 선택합니다.

Azure Portal을 사용하여 키 자격 증명 모음 만들기

Azure Portal을 사용하여 키 자격 증명 모음을 만든 다음 Microsoft Entra 보안 주체를 추가할 수 있습니다.

  1. 리소스 그룹을 만듭니다.

    Azure Portal을 통해 만든 모든 Azure 리소스는 키 자격 증명 모음을 보관하기 위해 만든 리소스 그룹에 포함되어야 합니다. 이 예제에서 리소스 이름은 DocsSampleRG입니다. 모든 키 자격 증명 모음 이름은 전역적으로 고유해야 하므로 고유한 리소스 그룹 및 키 자격 증명 모음 이름을 선택합니다.

    리소스 그룹 만들기 창의 프로젝트 세부 정보에서 값을 입력한 다음 검토 + 만들기를 선택합니다.

    Azure Portal에서 리소스 그룹 만들기 창의 스크린샷.

  2. Azure Portal에서 키 자격 증명 모음 서비스를 검색하거나 선택하여 키 자격 증명 모음을 만듭니다. 만들기를 실행합니다.

    키 자격 증명 모음 만들기 창에서 기본 탭을 선택하고 해당 탭에 적절한 값을 입력합니다. 또한 제거 보호를 사용하도록 설정하는 것이 좋습니다.

    Azure Portal에서 키 자격 증명 모음 만들기 창의 스크린샷.

  3. 액세스 구성 탭에서 Azure 역할 기반 액세스 제어 또는 중요 보관소 액세스 정책을 선택할 수 있습니다. 두 가지 옵션 모두에 대해 살펴보겠지만, Azure 역할 기반 액세스 제어 옵션이 권장됩니다. 자세한 내용은 액세스 모델 개요를 참조하세요.

    Azure Portal에서 키 자격 증명 모음 만들기 창 및 액세스 구성 탭의 스크린샷.

  4. 검토 + 만들기를 선택하고 키 자격 증명 모음을 만듭니다.

Azure 역할 기반 Access Control

권장되는 방법은 Azure 역할 기반 액세스 제어(RBAC)를 사용하여 키 자격 증명 모음에 사용 권한을 할당하는 방법입니다. 이 방법을 사용하면 사용자, 그룹 및 애플리케이션에 더 세분화된 수준에서 권한을 할당할 수 있습니다. 관리 평면(Azure 역할 할당) 및 데이터 평면(키 자격 증명 모음 액세스 정책)에서 키 자격 증명 모음에 사용 권한을 할당할 수 있습니다. 액세스 정책만 사용할 수 있는 경우에는 이 섹션을 건너뛰고 중요 보관소 액세스 정책 섹션으로 이동합니다. Azure Key Vault RBAC 권한에 대한 자세한 내용은 키 자격 증명 모음 데이터 평면 작업을 위한 Azure 기본 제공 역할을 참조하세요.

  1. 만든 키 자격 증명 모음 리소스로 이동하여 액세스 제어(IAM) 설정을 선택합니다.

  2. 추가>역할 할당 추가를 선택합니다.

    Azure Portal의 액세스 제어(IAM) 창에 있는 역할 할당 추가 버튼의 스크린샷.

  3. EKM 애플리케이션에서 래핑 및 언래핑 작업을 수행하려면 키 자격 증명 모음 암호화 서비스 암호화 사용자 역할이 필요합니다. 키 자격 증명 모음 암호화 서비스 암호화 사용자를 검색하고 역할을 선택합니다. 다음을 선택합니다.

    Azure Portal에서 역할 할당을 선택하는 스크린샷.

  4. 구성원 탭에서 구성원 선택 옵션을 선택한 다음 1단계에서 만든 Microsoft Entra 애플리케이션을 검색합니다. 애플리케이션을 선택한 다음 선택 버튼을 클릭합니다.

    Azure Portal에서 역할 할당을 추가하기 위한 구성원 선택 창의 스크린샷.

  5. 검토 + 할당을 두 번 선택하여 역할 할당을 완료합니다.

  6. 키를 만드는 사용자에게는 키 자격 증명 모음 관리자 역할이 필요합니다. 키 자격 증명 모음 관리자를 검색하고 역할을 선택합니다. 다음을 선택합니다.

  7. 이전 단계와 마찬가지로 키를 만드는 구성원을 추가하고 역할을 할당합니다.

키 자격 증명 모음 액세스 정책

참고 항목

Azure 역할 기반 액세스 제어 옵션을 사용 중인 경우 이 섹션을 건너뛸 수 있습니다. 권한 모델을 변경 중인 경우에는 키 자격 증명 모음의 액세스 구성 메뉴로 이동하여 변경할 수 있습니다. 키 자격 증명 모음을 관리할 수 있는 올바른 권한이 있어야 합니다. 자세한 내용은 Key Vault에서 Azure RBAC 권한 사용을 참조하세요.

  1. 액세스 구성 탭에서 중요 보관소 액세스 정책을 선택합니다. 기존 키 자격 증명 모음을 사용 중인 경우에는 키 자격 증명 모음 리소스에서 액세스 정책 메뉴를 선택한 다음 만들기를 선택할 수 있습니다.

  2. 액세스 정책 만들기 창에서 키 관리 작업 옵션에서 권한 가져오기나열 권한을 선택합니다. 암호화 작업 옵션에서 키 래핑 해제키 래핑 권한을 선택합니다. 다음을 선택합니다.

    액세스 정책 창에서 액세스 정책 추가 링크의 스크린샷.

  3. 보안 주체 탭에서 1단계에서 만든 애플리케이션을 선택합니다.

    보안 주체 창에서 애플리케이션 검색 상자의 스크린샷.

  4. 다음, 만들기를 차례로 선택합니다.

키 만들기

  1. 키 자격 증명 모음 창에서 를 선택한 다음 만들기/가져오기 옵션을 선택합니다. 그러면 키 만들기 창이 열립니다. 키 자격 증명 모음 이름을 입력합니다. 만들기 옵션을 선택하고 키의 이름을 입력합니다.

  2. 키 유형은 RSA를 사용하고 RSA 키 크기2048로 설정합니다. 현재 EKM은 RSA 키만 지원합니다. 활성화 및 만료 날짜를 적절하게 설정하고 사용로 설정합니다.

    키 만들기 창의 스크린샷.

모범 사례

빠른 키 복구를 보장하고 Azure 외부에서 데이터에 액세스할 수 있도록 하려면 다음 모범 사례가 권장됩니다.

  • 로컬 HSM(하드웨어 보안 모듈) 디바이스에서 로컬로 암호화 키를 만듭니다. SQL Server에서 지원하도록 비대칭 RSA 2048 또는 3072 키를 사용해야 합니다.

  • 암호화 키를 Azure Key Vault로 가져옵니다. 이 프로세스에 대해서는 다음 섹션에 설명되어 있습니다.

  • Azure key vault에서 키를 처음 사용하기 전에 Backup-AzureKeyVaultKey PowerShell cmdlet을 사용하여 Azure key vault 키 백업을 수행합니다.

  • 키를 변경할 때마다(예: ACL, 태그 또는 키 특성 추가) 다른 Azure Key Vault 키 백업을 수행해야 합니다.

    참고 항목

    키 백업은 어디에나 저장할 수 있는 파일을 반환하는 Azure Key Vault 키 작업입니다.

    방화벽 또는 프록시 서버의 후방에 Azure Key Vault용 SQL Server 커넥터를 사용하면 트래픽이 지연되거나 차단되는 경우 성능에 영향을 줄 수 있습니다. 올바른 규칙을 적용하려면 방화벽 뒤에 있는 Azure Key Vault 액세스를 숙지합니다.

3단계: SQL Server 커넥터 설치

Microsoft 다운로드 센터에서 SQL Server 커넥터를 다운로드합니다. 다운로드는 SQL Server 컴퓨터의 관리자가 수행해야 합니다.

참고 항목

  • SQL Server 커넥터 버전 1.0.0.440 이전 버전은 교체되었으며 프로덕션 환경에서는 더 이상 지원되지 않으므로 SQL Server 커넥터 업그레이드에서 SQL Server 커넥터 유지 관리 및 문제 해결 페이지의 지침을 사용합니다.
  • 1.0.3.0 버전부터 SQL Server 커넥터는 문제를 해결하기 위해 Windows 이벤트 로그에 관련 오류 메시지를 보고합니다.
  • 버전 1.0.4.0부터, 21Vianet에서 운영하는 Azure, Azure 독일 및 Azure Government 등 사설 비공개 클라우드가 지원됩니다.
  • 1.0.5.0 버전에는 지문 알고리즘과 관련하여 획기적인 변경 사항이 있습니다. 1.0.5.0으로 업그레이드한 후에는 데이터베이스 복원 오류가 발생할 수 있습니다. 자세한 내용은 기술 자료 문서 447099를 참조하세요.
  • 버전 1.0.5.0(타임스탬프: 2020년 9월)부터 SQL Server 커넥터는 메시지 필터링 및 네트워크 요청 재시도 논리를 지원합니다.
  • 업데이트된 버전 1.0.5.0(타임스탬프: 2020년 11월)부터 SQL Server 커넥터는 RSA 2048, RSA 3072, RSA-HSM 2048 및 RSA-HSM 3072 키를 지원합니다.
  • 업데이트된 버전 1.0.5.0(타임스탬프: 2020년 11월)부터 Azure Key Vault에서 특정 키 버전을 참조할 수 있습니다.

SQL Server 커넥터 설치 마법사의 스크린샷.

기본적으로 커넥터는 C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault에 설치됩니다. 이 위치는 설치 중 변경할 수 있습니다. 이를 변경하면 다음 섹션에서 스크립트를 조정합니다.

커넥터를 위한 인터페이스는 없지만, 성공적으로 설치되면 Microsoft.AzureKeyVaultService.EKM.dll이 컴퓨터에 설치됩니다. 이 어셈블리는 CREATE CRYPTOGRAPHIC PROVIDER 문을 사용하여 SQL Server에 등록해야 하는 암호화 EKM 공급자 DLL입니다.

SQL Server 커넥터 설치 프로그램에서 선택적으로 SQL Server 암호화를 위한 샘플 스크립트를 다운로드할 수도 있습니다.

SQL Server 커넥터의 오류 코드 설명, 구성 설정 또는 유지 관리 작업을 살펴보려면 다음을 참조하세요.

4단계: 레지스트리 키를 추가하여 EKM 공급자 지원

Warning

레지스트리 수정은 자신이 수행하는 작업을 정확히 알고 있는 사용자가 수행해야 합니다. 레지스트리를 잘못 수정할 경우 심각한 문제가 발생할 수 있습니다. 추가적인 보호를 위해 레지스트리를 수정하기 전에 백업합니다. 그래야 문제가 발생하는 경우 레지스트리를 복원할 수 있습니다.

  1. SQL Server가 설치되어 실행 중인지 확인합니다.

  2. regedit를 실행하여 레지스트리 편집기를 엽니다.

  3. SQL Server Cryptographic ProviderHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft 레지스트리 키를 만듭니다. 전체 경로는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider입니다.

  4. SQL Server Cryptographic Provider 레지스트리 키를 마우스 오른쪽 버튼으로 클릭한 다음 사용 권한을 선택합니다.

  5. SQL Server 서비스를 실행하는 사용자 계정에 SQL Server Cryptographic Provider 레지스트리 키에 대한 모든 권한을 부여합니다.

    레지스트리 편집기에서 EKM 레지스트리 키의 스크린샷.

  6. 적용을 선택한 다음, 확인을 선택합니다.

  7. 레지스트리 편집기를 닫고 SQL Server 서비스를 다시 시작합니다.

    참고 항목

    장애 조치(failover) 클러스터 인스턴스에서 EKM 또는 Azure Key Vault와 함께 TDE를 사용하는 경우, 레지스트리가 노드 간에 동기화될 수 있도록 클러스터 레지스트리 검사점 루틴에 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider를 추가하는 추가 단계를 완료해야 합니다. 동기화하면 장애 조치(failover) 및 키 순환 이후에 데이터베이스를 편리하게 복구할 수 있습니다.

    클러스터 레지스트리 검사점 루틴에 레지스트리 키를 추가하려면 PowerShell에서 다음 명령을 실행합니다.

    Add-ClusterCheckpoint -RegistryCheckpoint "SOFTWARE\Microsoft\SQL Server Cryptographic Provider" -Resourcename "SQL Server"

5단계: SQL Server 구성

이 섹션의 각 작업에 필요한 최소 권한 수준에 대한 참고 사항은 B. 자주 묻는 질문을 참조하세요.

master 데이터베이스 구성

  1. sqlcmd를 실행하거나 SQL Server Management Studio를 엽니다.

  2. 다음 Transact-SQL 스크립트를 실행하여 EKM을 사용하도록 SQL Server를 구성합니다.

    -- Enable advanced options.
    USE master;
    GO
    
    EXEC sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    
    -- Enable EKM provider
    EXEC sp_configure 'EKM provider enabled', 1;
    GO
    RECONFIGURE;
    
  3. SQL Server 커넥터를 SQL Server에 EKM 공급자로 등록합니다.

    Azure Key Vault의 EKM 공급자인 SQL Server 커넥터를 사용하여 암호화 공급자를 만듭니다. 이 예제에서는 공급자 이름이 AzureKeyVault_EKM입니다.

    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO
    

    참고 항목

    파일 경로 길이는 256자를 초과할 수 없습니다.

  4. 키 자격 증명 모음을 사용하도록 SQL Server 로그인에 대한 SQL Server 자격 증명을 설정합니다.

    키 자격 증명 모음에서 키를 사용하여 암호화를 수행할 각 로그인에 자격 증명을 추가해야 합니다. 여기에는 다음이 포함될 수 있습니다.

    • 키 자격 증명 모음을 사용하여 SQL Server 암호화 시나리오를 설정하고 관리하는 SQL Server 관리자 로그인입니다.

    • TDE 또는 다른 SQL Server 암호화 기능을 사용하도록 설정할 수 있는 다른 SQL Server 로그인입니다.

    자격 증명과 로그인 사이에는 일대일 매핑이 이루어집니다. 즉, 각 로그인에는 고유한 자격 증명이 있어야 합니다.

    이 Transact-SQL 스크립트를 다음과 같은 방법으로 수정합니다.

    • Azure Key Vault를 가리키도록 IDENTITY 인수(DocsSampleEKMKeyVault)를 편집합니다.

    • SECRET 인수의 첫 번째 부분을 1단계: Microsoft Entra 서비스 주체 설정의 Microsoft Entra 클라이언트 ID로 바꿉니다. 이 예제에서 클라이언트 IDd956f6b9xxxxxxx입니다.

      Important

      앱(클라이언트) ID에서 하이픈을 제거해야 합니다.

    • 1단계: Microsoft Entra 서비스 주체 설정클라이언트 암호SECRET 인수의 두 번째 부분을 완료합니다. 이 예제에서 클라이언트 암호는 yrA8X~PldtMCvUZPxxxxxxxx입니다. SECRET 인수의 마지막 문자열은 하이픈이 없는 긴 문자열과 숫자로 구성됩니다(클라이언트 암호에 하이픈이 포함된 경우 클라이언트 암호 부분 제외).

      USE master;
      CREATE CREDENTIAL sysadmin_ekm_cred
          WITH IDENTITY = 'DocsSampleEKMKeyVault',                            -- for public Azure
          -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.azure.cn',          -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.microsoftazure.de', -- for Azure Germany
                 --<----Application (Client) ID ---><--Microsoft Entra app (Client) ID secret-->
          SECRET = 'd956f6b9xxxxxxxyrA8X~PldtMCvUZPxxxxxxxx'
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
      
      -- Add the credential to the SQL Server administrator's domain login
      ALTER LOGIN [<domain>\<login>]
      ADD CREDENTIAL sysadmin_ekm_cred;
      

    CREATE CREDENTIAL 인수에 변수를 사용하고 클라이언트 ID에서 하이픈을 프로그래밍 방식으로 제거하는 예는 CREATE CREDENTIAL(Transact-SQL)을 참조하세요.

  5. SQL Server 인스턴스에서 Azure Key Vault 키를 엽니다.

    2단계: 키 자격 증명 모음 만들기의 설명과 같이 새 키를 만들었든 비대칭 키를 가져왔든 간에 키를 열어야 합니다. 다음 Transact-SQL 스크립트에서 키 이름을 입력하여 키를 엽니다.

    Important

    먼저 이 단계에 대한 레지스트리 필수 구성 요소를 완료해야 합니다.

    • EKMSampleASYKey를 SQL Server에서 사용할 원하는 키 이름으로 바꿉니다.
    • ContosoRSAKey0를 Azure Key Vault의 키 이름으로 바꿉니다. 아래는 버전이 없는 키의 예입니다.
    CREATE ASYMMETRIC KEY EKMSampleASYKey
    FROM PROVIDER [AzureKeyVault_EKM]
    WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    SQL Server 커넥터의 업데이트된 버전 1.0.5.0부터, Azure Key Vault의 특정 키 버전을 참조할 수 있습니다.

    CREATE ASYMMETRIC KEY EKMSampleASYKey
    FROM PROVIDER [AzureKeyVault_EKM]
    WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    앞의 예제 스크립트에서 1a4d3b9b393c4678831ccc60def75379는 사용할 키의 특정 버전을 나타냅니다. 이 스크립트를 사용하는 경우 키를 새 버전으로 업데이트해도 문제가 되지 않습니다. 데이터베이스 작업에는 항상 키 버전(예: 1a4d3b9b393c4678831ccc60def75379)이 사용됩니다.

  6. 이전 단계에서 만든 SQL Server의 비대칭 키를 사용하여 새 로그인을 만듭니다.

    --Create a Login that will associate the asymmetric key to this login
    CREATE LOGIN TDE_Login
    FROM ASYMMETRIC KEY EKMSampleASYKey;
    
  7. SQL Server의 비대칭 키에서 새 로그인을 만듭니다. 자격 증명을 새 로그인에 매핑할 수 있도록 5단계: SQL Server 구성의 자격 증명 매핑을 삭제합니다.

    --Now drop the credential mapping from the original association
    ALTER LOGIN [<domain>\<login>]
    DROP CREDENTIAL sysadmin_ekm_cred;
    
  8. 새 로그인을 변경하고 EKM 자격 증명을 새 로그인에 매핑합니다.

    --Now add the credential mapping to the new Login
    ALTER LOGIN TDE_Login
    ADD CREDENTIAL sysadmin_ekm_cred;
    

암호화할 사용자 데이터베이스 구성

  1. Azure Key Vault 키로 암호화할 테스트 데이터베이스를 만듭니다.

    --Create a test database that will be encrypted with the Azure Key Vault key
    CREATE DATABASE TestTDE;
    
  2. ASYMMETRIC KEY(EKMSampleASYKey)를 사용하여 데이터베이스 암호화 키를 만듭니다.

    USE <DB Name>;
    --Create an ENCRYPTION KEY using the ASYMMETRIC KEY (EKMSampleASYKey)
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER ASYMMETRIC KEY EKMSampleASYKey;
    
  3. 테스트 데이터베이스를 암호화합니다. ENCRYPTION ON을 설정하여 TDE를 사용하도록 설정합니다.

    --Enable TDE by setting ENCRYPTION ON
    ALTER DATABASE TestTDE
    SET ENCRYPTION ON;
    

레지스트리 세부 정보

  1. master 데이터베이스에서 다음 Transact-SQL 쿼리를 실행하여 사용되는 비대칭 키를 표시합니다.

    SELECT name, algorithm_desc, thumbprint FROM sys.asymmetric_keys;
    

    이 문은 다음을 반환합니다.

    name            algorithm_desc    thumbprint
    EKMSampleASYKey RSA_2048          <key thumbprint>
    
  2. 사용자 데이터베이스(TestTDE)에서 다음 Transact-SQL 쿼리를 실행하여 사용되는 암호화 키를 표시합니다.

    SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint 
    FROM sys.dm_database_encryption_keys
    WHERE database_id = DB_ID('TestTDE');
    

    이 문은 다음을 반환합니다.

    encryptor_type encryption_state_desc encryptor_thumbprint
    ASYMMETRIC KEY ENCRYPTED             <key thumbprint>
    

정리

  1. 테스트 개체를 정리합니다. 이 테스트 스크립트에서 만든 모든 개체를 삭제합니다.

    -- CLEAN UP
    USE master;
    GO
    ALTER DATABASE [TestTDE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE [TestTDE];
    GO
    
    ALTER LOGIN [TDE_Login] DROP CREDENTIAL [sysadmin_ekm_cred];
    DROP LOGIN [TDE_Login];
    GO
    
    DROP CREDENTIAL [sysadmin_ekm_cred];
    GO
    
    USE master;
    GO
    DROP ASYMMETRIC KEY [EKMSampleASYKey];
    DROP CRYPTOGRAPHIC PROVIDER [AzureKeyVault_EKM];
    GO
    

    샘플 스크립트는 SQL Server 투명한 데이터 암호화 및 Azure Key Vault를 사용한 확장 가능 키 관리 블로그를 참조하세요.

  2. SQL Server Cryptographic Provider 레지스트리 키는 키 또는 모든 EKM 키가 삭제된 후 자동으로 정리되지 않습니다. 수동으로 정리해야 합니다. 레지스트리 키를 너무 일찍 정리하면 EKM 기능이 손상될 수 있으므로 레지스트리 키 정리는 매우 신중하게 수행해야 합니다. 레지스트리 키를 정리하려면 SQL Server Cryptographic Provider에서 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft 레지스트리 키를 삭제합니다.

문제 해결

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider 레지스트리 키가 생성되지 않거나 필요한 권한이 부여되지 않으면 다음 DDL 문이 실패합니다.

CREATE ASYMMETRIC KEY EKMSampleASYKey
FROM PROVIDER [AzureKeyVault_EKM]
WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0',
CREATION_DISPOSITION = OPEN_EXISTING;
Msg 33049, Level 16, State 2, Line 65
Key with name 'ContosoRSAKey0' does not exist in the provider or access is denied. Provider error code: 2058.  (Provider Error - No explanation is available, consult EKM Provider for details)

만료 예정인 클라이언트 암호

자격 증명에 만료 예정인 클라이언트 암호가 있는 경우 자격 증명에 새 비밀 번호를 할당할 수 있습니다.

  1. 1단계: Microsoft Entra 서비스 주체 설정에서 원래 만든 비밀 번호를 업데이트합니다.

  2. 다음 코드를 사용하여 동일한 ID와 새 비밀 번호를 사용하여 자격 증명을 변경합니다. <New Secret>을 새 비밀 번호로 바꿉니다.

    ALTER CREDENTIAL sysadmin_ekm_cred
    WITH IDENTITY = 'DocsSampleEKMKeyVault',
    SECRET = '<New Secret>';
    
  3. SQL Server 서비스를 다시 시작합니다.

참고 항목

AG(가용성 그룹)에서 EKM을 사용하는 경우 자격 증명을 변경하고 AG의 모든 노드에서 SQL Server 서비스를 다시 시작해야 합니다.

새 AKV 키 또는 새 AKV 키 버전으로 비대칭 키 회전

참고 항목

  • AKV 키를 수동으로 회전하는 경우 SQL Server는 AKV 버전이 없는 키 또는 버전이 지정된 키를 모두 지원하며 다른 AKV 키를 사용할 필요가 없습니다.
  • 원래 AKV 키를 회전하여 SQL Server에서 만든 이전 키를 대체할 수 있는 새 버전을 만들 수 있습니다.
  • 수동 키 회전의 경우 AKV에서 회전된 버전이 없는 키 또는 버전이 지정된 키를 참조하는 새 SQL Server 비대칭 키를 만들어야 합니다. 새 SQL Server 비대칭 키의 경우 버전이 없는 AKV 키는 AKV에서 가장 높은 키 버전을 사용하여 자동으로 선택됩니다. 버전이 지정된 키의 경우, WITH PROVIDER_KEY_NAME = <key_name>/<version> 구문을 사용하여 AKV에서 가장 높은 버전을 표시해야 합니다. 데이터베이스 암호화 키를 변경하여 새 비대칭 키로 다시 암호화할 수 있습니다. AKV 회전 정책과 동일한 키 이름(버전이 지정되거나 버전이 없는)을 사용할 수 있습니다. 버전이 지정된 키의 경우 현재 버전을 추가해야 합니다. 버전이 없는 키의 경우 동일한 키 이름을 사용합니다.

SQL Server에는 TDE에 사용되는 비대칭 키를 자동으로 회전하는 메커니즘이 없습니다. 비대칭 키를 수동으로 회전하는 단계는 다음과 같습니다.

  1. 초기 설정(sysadmin_ekm_cred)에 사용된 자격 증명을 키 회전에 다시 사용할 수도 있습니다. 필요에 따라, 새 비대칭 키에 대한 새 자격 증명을 만듭니다.

    CREATE CREDENTIAL <new_credential_name>
        WITH IDENTITY = <key vault>,
        SECRET = 'existing/new secret'
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
    
  2. 보안 주체에 자격 증명을 추가합니다.

    ALTER LOGIN [domain\userName];
    ADD CREDENTIAL <new_credential_name>;
    
  3. 키를 회전한 후 새 키를 기반으로 새 비대칭 키를 만듭니다. 새 키는 버전이 없는 키(이 예제에서는 ContosoRSAKey0)이거나 버전이 있는 키(ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379, 여기서 1a4d3b9b393c4678831ccc60def75379는 AKV에서 업데이트된 키의 버전)일 수 있습니다.

    CREATE ASYMMETRIC KEY <new_ekm_key_name>
     FROM PROVIDER [AzureKeyVault_EKM]  
     WITH PROVIDER_KEY_NAME = <new_key_from_key_vault>,  
     CREATION_DISPOSITION = OPEN_EXISTING;
    
  4. 새 비대칭 키에서 새 로그인을 만듭니다.

    CREATE LOGIN <new_login_name>
    FROM ASYMMETRIC KEY <new_ekm_key_name>;
    
  5. 보안 주체에서 자격 증명을 삭제합니다.

    ALTER LOGIN [domain\username]
    DROP CREDENTIAL <new_credential_name>;
    
  6. AKV 자격 증명을 새 로그인에 매핑합니다.

    ALTER LOGIN <new_login_name>;
    ADD CREDENTIAL <new_credential_name>;
    
  7. DEK(데이터베이스 암호화 키)를 변경하여 새 비대칭 키로 다시 암호화합니다.

    USE [databaseName];
    GO
    ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY <new_ekm_key_name>;
    
  8. 데이터베이스에서 사용되는 새 비대칭 키와 암호화 키를 확인할 수 있습니다.

    SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint 
    FROM sys.dm_database_encryption_keys 
    WHERE database_id = DB_ID('databaseName');
    

    이 지문은 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider\Azure Key Vault\<key_vault_url>\<thumbprint> 경로 아래의 레지스트리 키와 일치해야 하며 회전된 키에 대한 KeyUri를 제공해야 합니다.

Important

서버의 논리적 TDE 보호기를 교체하는 것은 데이터베이스 암호화 키(DEK)를 보호하는 새로운 비대칭 키 또는 인증서로 전환하는 것을 의미합니다. 키 회전은 온라인 작업이며, 전체 데이터베이스가 아닌 DEK만 복호화하고 다시 암호화하기 때문에 완료하는 데 몇 초 밖에 걸리지 않습니다.

회전 후 이전 버전의 키를 삭제하지 않습니다. 키를 교체해도 이전 데이터베이스 백업, 백업된 로그 파일, 가상 로그 파일(VLF), 트랜잭션 로그 파일 등 일부 데이터는 여전히 이전 키로 암호화됩니다. 데이터베이스 복구 또는 데이터베이스 복원에도 이전 키가 필요할 수 있습니다.