Always Encrypted용 열 마스터 키 만들기 및 저장

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

열 마스터 키 는 Always Encrypted에서 열 암호화 키를 암호화하는 데 사용되는 키 보호 키입니다. 열 마스터 키는 신뢰할 수 있는 키 저장소에 저장되어야 하며, 데이터를 암호화하거나 암호 해독해야 하는 애플리케이션과 Always Encrypted 키를 구성하고 Always Encrypted 키를 관리하기 위한 도구에서 키에 액세스할 수 있어야 합니다.

이 문서에서는 키 저장소를 선택하고 Always Encrypted에 대한 열 마스터 키를 만드는 방법에 대한 세부 정보를 제공합니다. 자세한 개요는 Always Encrypted에 대한 키 관리 개요를 참조하세요.

열 마스터 키에 대한 키 저장소 선택

Always Encrypted는 Always Encrypted 열 마스터 키를 저장하기 위해 여러 키 저장소를 지원합니다. 지원되는 키 저장소는 사용 중인 드라이버 및 버전에 따라 달라집니다.

고려해야 할 키 저장소에는 로컬 키 저장소와 중앙 집중식 키 저장소의 두 가지 상위 수준 범주가 있습니다.

로컬 또는 중앙 집중식 키 저장소?

  • 로컬 키 저장소 - 로컬 키 저장소가 포함된 컴퓨터의 애플리케이션에서만 사용할 수 있습니다. 즉, 키 저장소와 키를 애플리케이션을 실행하는 각 컴퓨터에 복제해야 합니다. 로컬 키 저장소의 예로 Windows 인증서 저장소가 있습니다. 로컬 키 저장소를 사용할 경우 애플리케이션을 호스트하는 각 컴퓨터에 키 저장소가 있고, 애플리케이션에서 상시 암호화를 사용하여 보호된 데이터에 액세스할 때 필요한 열 마스터 키가 컴퓨터에 있는지 확인해야 합니다. 열 마스터 키를 처음으로 프로비전하거나 키를 변경(회전)할 때 애플리케이션을 호스트하는 모든 컴퓨터에 키가 배포되는지 확인해야 합니다.

  • 중앙 집중식 키 저장소 - 여러 컴퓨터에서 애플리케이션을 제공합니다. 중앙 집중식 키 저장소의 예로는 Azure Key Vault가 있습니다. 중앙 집중식 키 저장소는 일반적으로 여러 컴퓨터에서 열 마스터 키의 여러 복사본을 유지할 필요가 없으므로 키 관리를 더 쉽게 만듭니다. 애플리케이션이 중앙 집중식 키 저장소에 연결하도록 구성되어 있는지 확인합니다.

Always Encrypted 사용 클라이언트 드라이버에서 지원되는 키 저장소는 무엇인가요?

Always Encrypted 사용 클라이언트 드라이버는 Always Encrypted를 클라이언트 애플리케이션에 통합하기 위해 기본적으로 지원되는 SQL Server 클라이언트 드라이버입니다. Always Encrypted 사용 드라이버는 인기 있는 키 저장소에 대한 몇 가지 기본 제공 공급자를 포함합니다. 또한 일부 드라이버를 사용하면 기본 제공 공급자가 없는 경우에도 키 저장소를 사용할 수 있도록 사용자 지정 열 마스터 키 저장소 공급자를 구현하고 등록할 수 있습니다. 기본 제공 공급자와 사용자 지정 공급자 중에서 결정할 때 기본 제공 공급자를 사용하는 것은 일반적으로 애플리케이션에 대한 변경 내용이 적다는 것을 의미합니다(경우에 따라 데이터베이스 연결 문자열만 변경해야 하는 경우).

사용 가능한 기본 제공 공급자는 선택된 드라이버, 드라이버 버전 및 운영 체제에 따라 달라집니다. 특정 드라이버에 대한 Always Encrypted 설명서를 참조하여 기본적으로 지원되는 키 저장소와 드라이버가 사용자 지정 키 저장소 공급자 를 지원하는지 확인하세요. Always Encrypted를 사용하여 애플리케이션을 개발합니다.

SQL 도구에서 지원되는 키 저장소는 무엇입니까?

SQL Server Management Studio, Azure Data Studio 및 SqlServer PowerShell 모듈은 다음 위치에 저장된 열 마스터 키를 지원합니다.

  • Azure Key Vault의 키 자격 증명 모음관리형 HSM.

    참고 항목

    관리형 HSM에는 SSMS 18.9 이상 및 SqlServer PowerShell 모듈 Verion 21.1.18235 이상이 필요합니다. Azure Data Studio는 현재 관리형 HSM을 지원하지 않습니다.

  • Windows 인증서 저장소.

  • CNG(Cryptography Next Generation) API 또는 CAPI(Cryptography API)를 제공하는 하드웨어 보안 모듈과 같은 주요 저장소입니다.

Windows 인증서 저장소에서 열 마스터 키 만들기

열 마스터 키는 Windows 인증서 저장소에 저장된 인증서일 수 있습니다. Always Encrypted 지원 드라이버에서는 만료 날짜 또는 인증 기관 체인을 확인하지 않습니다. 인증서는 단지 퍼블릭 키와 프라이빗 키로 구성된 키 쌍으로만 사용됩니다.

유효한 열 마스터 키가 되려면 인증서가 다음을 수행해야 합니다.

  • X.509 인증서여야 합니다.
  • 은 로컬 컴퓨터 또는 현재 사용자라는 두 인증서 저장소 위치 중 하나에 저장됩니다. (로컬 컴퓨터 인증서 저장소 위치에 인증서를 만들려면 대상 컴퓨터의 관리자여야 합니다.)
  • 에는 프라이빗 키가 포함되어 있습니다(인증서에 있는 키의 권장 길이는 2048비트 이상).
  • 키 교환을 위해 만들어집니다.

유효한 열 마스터 키인 인증서를 만드는 방법에는 여러 가지가 있지만 가장 간단한 옵션은 자체 서명된 인증서를 만드는 것입니다.

PowerShell을 사용하여 자체 서명된 인증서 만들기

New-SelfSignedCertificate cmdlet을 사용하여 자체 서명된 인증서를 만듭니다. 다음 예제에서는 상시 암호화에 대한 열 마스터 키로 사용할 수 있는 인증서를 생성하는 방법을 보여 줍니다.

# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 

# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048

SSMS(SQL Server Management Studio)를 사용하여 자체 서명된 인증서 만들기

자세한 내용은 SQL Server Management Studio를 사용하여 Always Encrypted 키 프로비전을 참조하세요. SSMS를 사용하고 Windows 인증서 저장소에 상시 암호화 키를 저장하는 단계별 자습서는 상시 암호화 마법사 자습서(Windows 인증서 저장소)를 참조하세요.

애플리케이션 및 사용자가 인증서를 사용할 수 있도록 설정

열 마스터 키가 로컬 컴퓨터 인증서 저장소 위치에 저장된 인증서인 경우 프라이빗 키를 사용하여 인증서를 내보내 암호화된 열에 저장된 데이터를 암호화하거나 암호 해독해야 하는 애플리케이션을 호스트하는 모든 컴퓨터 또는 Always Encrypted를 구성하고 Always Encrypted 키를 관리하기 위한 도구로 가져와야 합니다. 또한 인증서를 열 마스터 키로 사용할 수 있도록 로컬 컴퓨터 인증서 저장소 위치에 저장된 인증서에 대한 읽기 권한이 각 사용자에게 부여되어야 합니다.

열 마스터 키가 현재 사용자 인증서 저장소 위치에 저장된 인증서인 경우 프라이빗 키를 사용하여 인증서를 내보내 암호화된 열에 저장된 데이터를 암호화하거나 암호 해독해야 하는 애플리케이션을 실행하는 모든 사용자 계정의 현재 사용자 인증서 저장소 위치로 가져오거나 Always Encrypted 키를 구성하고 Always Encrypted 키를 관리하기 위한 도구(해당 애플리케이션/도구를 포함하는 모든 컴퓨터에서)로 가져와야 합니다. 권한 구성이 필요하지 않습니다. 컴퓨터에 로그온한 후 사용자는 현재 사용자 인증서 저장소 위치의 모든 인증서에 액세스할 수 있습니다.

PowerShell 사용

Import-PfxCertificateExport-PfxCertificate cmdlet을 사용하여 인증서를 가져오고 내보냅니다.

Microsoft 관리 콘솔 사용

사용자에게 로컬 컴퓨터 인증서 저장소 위치에 저장된 인증서에 대한 읽기 권한을 부여하려면 다음 단계를 따릅니다.

  1. 명령 프롬프트를 열고 mmc를 입력합니다.
  2. MMC 콘솔에서에 파일 메뉴 클릭 스냅인 추가/제거합니다.
  3. 스냅인 추가/제거 대화 상자에서 추가를 클릭합니다.
  4. 독립 실행형 스냅인 추가 대화 상자에서 인증서를 클릭하고 추가를 클릭합니다.
  5. 인증서 스냅인 대화 상자에서 컴퓨터 계정을 클릭한 다음 마침을 클릭합니다.
  6. 독립 실행형 스냅인 추가 대화 상자에서 닫기를 클릭합니다.
  7. 스냅인 추가/제거 대화 상자에서 확인을 클릭합니다.
  8. 인증서 스냅인에서 인증서 개인 폴더에서 인증서를 > 찾아서 인증서를 마우스 오른쪽 단추로 클릭하고 모든 작업을 가리킨 다음 개인 키 관리를 클릭합니다.
  9. 필요한 경우 보안 대화 상자에서 사용자 계정에 대한 읽기 권한을 추가합니다.

Azure Key Vault에서 열 마스터 키 만들기

Azure Key Vault는 암호화 키와 비밀을 보호하는 데 도움이 되며, 특히 애플리케이션이 Azure에서 호스트되는 경우 Always Encrypted에 대한 열 마스터 키를 저장하는 편리한 옵션입니다. Azure Key Vault에서 키를 만들려면 Azure 구독 및 Azure Key Vault가 필요합니다. 키 자격 증명 모음 또는 관리형 HSM키를 저장할 수 있습니다. 유효한 열 마스터 키가 되려면 Azure Key Vault에서 관리되는 키가 RSA 키여야 합니다.

Azure CLI, 포털 또는 PowerShell 사용

키 자격 증명 모음에서 키를 만드는 방법에 대한 자세한 내용은 다음을 참조하세요.

관리형 HSM에서 키를 만드는 방법에 대한 자세한 내용은 다음을 참조하세요.

SSMS(SQL Server Management Studio)

SSMS를 사용하여 키 자격 증명 모음 또는 Azure Key Vault의 관리형 HSM에서 열 마스터 키를 만드는 방법에 대한 자세한 내용은 SQL Server Management Studio를 사용하여 Always Encrypted 키 프로비저닝을 참조 하세요. SSMS를 사용하고 키 자격 증명 모음에 Always Encrypted 키를 저장하는 단계별 자습서는 Always Encrypted 마법사 자습서(Azure Key Vault)를 참조하세요.

애플리케이션 및 사용자가 Azure Key Vault 키를 사용할 수 있도록 설정

암호화된 열에 액세스하려면 애플리케이션이 Azure Key Vault에 액세스할 수 있어야 하며 열을 보호하는 열 암호화 키의 암호를 해독하기 위해 열 마스터 키에 대한 특정 권한도 필요합니다.

Always Encrypted에 대한 키를 관리하려면 Azure Key Vault에서 열 마스터 키를 나열 및 만들고 키를 사용하여 암호화 작업을 수행할 수 있는 권한이 필요합니다.

Key Vault

키 자격 증명 모음에 열 마스터 키를 저장하고 권한 부여에 역할 권한을 사용하는 경우:

  • 애플리케이션의 ID는 키 자격 증명 모음에서 다음 데이터 평면 작업을 허용하는 역할의 멤버여야 합니다.

    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/verify/action

    애플리케이션에 필요한 권한을 부여하는 가장 쉬운 방법은 해당 ID를 Key Vault 암호화 사용자 역할에 추가하는 것입니다. 필요한 권한으로 사용자 지정 역할을 만들 수도 있습니다.

  • Always Encrypted용 키를 관리하는 사용자는 키 자격 증명 모음에 대해 다음과 같은 데이터 평면 작업을 허용하는 구성원 또는 역할이어야 합니다.

    • Microsoft.KeyVault/vaults/keys/create/action
    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/encrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/sign/action
    • Microsoft.KeyVault/vaults/keys/verify/action

    사용자에게 필요한 권한을 부여하는 가장 쉬운 방법은 사용자를 Key Vault Crypto 사용자 역할에 추가하는 것입니다. 필요한 권한으로 사용자 지정 역할을 만들 수도 있습니다.

키 자격 증명 모음에 열 마스터 키를 저장하고 권한 부여에 액세스 정책을 사용하는 경우:

  • 애플리케이션의 ID에는 키 자격 증명 모음에 대한 액세스 정책 권한인 get, unwrapKeyverify가 필요합니다.
  • Always Encrypted에 대한 키를 관리하는 사용자는 키 자격 증명 모음에 대해 만들기, 가져오기, 나열, 서명, unwrapKey, wrapKey, verify 등의 액세스 정책 권한이 필요합니다.

키 자격 증명 모음에 대한 인증 및 권한 부여를 구성하는 방법에 대한 일반적인 내용은 Key Vault에 액세스하도록 보안 주체 권한 부여를 참조 하세요.

관리형 HSM

애플리케이션의 ID는 관리되는 HSM에서 다음 데이터 평면 작업을 허용하는 역할의 멤버여야 합니다.

  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

위의 사용 권한만 포함하는 사용자 지정 역할을 만드는 것이 좋습니다.

Always Encrypted에 대한 키를 관리하는 사용자는 키에 대해 다음 데이터 평면 작업을 허용하는 멤버 또는 역할이어야 합니다.

  • Microsoft.KeyVault/managedHsm/keys/create/action
  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/encrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read
  • icrosoft.KeyVault/managedHsm/keys/sign/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

사용자에게 위의 권한을 부여하는 가장 쉬운 방법은 관리형 HSM Crypto 사용자 역할에 사용자를 추가하는 것입니다. 필요한 권한으로 사용자 지정 역할을 만들 수도 있습니다.

관리형 HSM에 대한 액세스 제어에 대한 자세한 내용은 다음을 참조하세요.

CNG를 사용하여 하드웨어 보안 모듈에서 열 마스터 키 만들기

Always Encrypted의 열 마스터 키는 CNG(Cryptography Next Generation) API를 구현하는 키 저장소에 저장할 수 있습니다. 일반적으로 이 유형의 저장소는 HSM(하드웨어 보안 모듈)입니다. HSM은 디지털 키를 보호하고 관리하고 암호화 처리를 제공하는 물리적 디바이스입니다. HSM은 일반적으로 플러그 인 카드 또는 컴퓨터(로컬 HSM) 또는 네트워크 서버에 직접 연결하는 외부 디바이스의 형태로 제공됩니다.

지정된 컴퓨터의 애플리케이션에서 HSM을 사용할 수 있도록 하려면 CNG를 구현하는 KSP(키 스토리지 공급자)를 컴퓨터에 설치하고 구성해야 합니다. 상시 암호화 클라이언트 드라이버(드라이버 내의 열 마스터 키 저장소 공급자)는 KSP를 사용하여 키 저장소에 저장된 열 마스터 키로 보호되는 열 암호화 키를 암호화 및 암호 해독합니다.

Windows에는 테스트 용도로 사용할 수 있는 Microsoft 소프트웨어 키 스토리지 공급 기업(소프트웨어 기반 KSP)이 있습니다. CNG 키 스토리지 공급자를 참조 하세요.

CNG/KSP를 사용하여 키 저장소에 열 마스터 키 만들기

열 마스터 키는 RSA 알고리즘을 사용하여 비대칭 키(퍼블릭/프라이빗 키 쌍)여야 합니다. 권장 키 길이는 2048 이상입니다.

HSM 관련 도구 사용

HSM에 대한 설명서를 참조하세요.

PowerShell 사용

.NET API를 사용하여 PowerShell에서 CNG를 사용하여 키 저장소에 키를 만들 수 있습니다.

$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

SQL Server Management Studio 사용

SQL Server Management Studio를 사용하여 Always Encrypted 키 프로비저닝을 참조 하세요.

애플리케이션 및 사용자가 CNG 키를 사용할 수 있도록 설정

컴퓨터에서 KSP를 구성하는 방법과 애플리케이션 및 사용자에게 HSM에 대한 액세스 권한을 부여하는 방법은 HSM 및 KSP 설명서를 참조하세요.

CAPI를 사용하여 하드웨어 보안 모듈에서 열 마스터 키 만들기

Always Encrypted의 열 마스터 키는 CAPI(Cryptography API)를 구현하는 키 저장소에 저장할 수 있습니다. 일반적으로 이러한 저장소는 HSM(하드웨어 보안 모듈)으로, 디지털 키를 보호하고 관리하고 암호화 처리를 제공하는 물리적 디바이스입니다. HSM은 일반적으로 플러그 인 카드 또는 컴퓨터(로컬 HSM) 또는 네트워크 서버에 직접 연결하는 외부 디바이스의 형태로 제공됩니다.

지정된 컴퓨터의 애플리케이션에서 HSM을 사용할 수 있도록 하려면 CAPI를 구현하는 CSP(암호화 서비스 공급자)를 컴퓨터에 설치하고 구성해야 합니다. Always Encrypted 클라이언트 드라이버(드라이버 내의 열 마스터 키 저장소 공급자)는 CSP를 사용하여 키 저장소에 저장된 열 마스터 키로 보호되는 열 암호화 키를 암호화하고 암호 해독합니다.

참고 항목

CAPI는 사용되지 않는 레거시 API입니다. HSM에 KSP를 사용할 수 있는 경우 CSP/CAPI 대신 사용해야 합니다.

CSP는 Always Encrypted와 함께 사용할 RSA 알고리즘을 지원해야 합니다.

Windows에는 RSA를 지원하고 테스트 목적으로 사용할 수 있는 다음 소프트웨어 기반(HSM에서 지원하지 않음) CSP가 포함되어 있습니다. Microsoft 고급 RSA 및 AES 암호화 공급자.

CAPI/CSP를 사용하여 키 저장소에 열 마스터 키 만들기

열 마스터 키는 RSA 알고리즘을 사용하여 비대칭 키(퍼블릭/프라이빗 키 쌍)여야 합니다. 권장 키 길이는 2048 이상입니다.

HSM 관련 도구 사용

HSM에 대한 설명서를 참조하세요.

SSMS(SQL Server Management Studio) 사용

SQL Server Management Studio를 사용하여 Always Encrypted 키 프로비저닝을 참조 하세요.

애플리케이션 및 사용자가 CNG 키를 사용할 수 있도록 설정

컴퓨터에서 CSP를 구성하는 방법 및 애플리케이션 및 사용자에게 HSM에 대한 액세스 권한을 부여하는 방법은 HSM 및 CSP에 대한 설명서를 참조하세요.

다음 단계

참고 항목