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 모듈 버전 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-PfxCertificate 및 Export-PfxCertificate cmdlet을 사용하여 인증서를 가져오고 내보냅니다.
Microsoft Management Console 사용하기
사용자에게 로컬 컴퓨터 인증서 저장소 위치에 저장된 인증서에 대한 읽기 권한을 부여하려면 다음 단계를 따릅니다.
- 명령 프롬프트를 열고 mmc를 입력합니다.
- MMC 콘솔에서에 파일 메뉴 클릭 스냅인 추가/제거합니다.
- 스냅인 추가/제거 대화 상자에서 추가 단추를 클릭합니다.
- 독립 실행형 스냅인 추가 대화 상자에서 인증서를 클릭하고 추가를 클릭합니다.
- 인증서 스냅인 대화 상자에서 컴퓨터 계정을 선택한 다음, 마침을 클릭합니다.
- 독립 실행형 스냅인 추가 대화 상자에서 닫기를 클릭합니다.
- 스냅인 추가/제거 대화 상자에서 확인을 클릭합니다.
- 인증서 스냅인의 인증서> 개인 폴더에서 인증서를 찾은 다음, 인증서를 마우스 오른쪽 단추로 클릭하고, 마우스로 모든 작업을 가리킨 후 프라이빗 키 관리를 클릭합니다.
- 필요한 경우 보안 대화 상자에서 사용자 계정에 대해 읽기 권한을 추가합니다.
Azure Key Vault에서 열 마스터 키 만들기
Azure Key Vault는 암호화 키와 비밀을 보호하도록 돕고, Always Encrypted에 대한 열 마스터 키를 저장 및 관리하는 편리한 옵션입니다(특히 애플리케이션이 Azure에서 호스트되는 경우). Azure Key Vault에서 키를 만들려면 Azure 구독 및 Azure Key Vault가 필요합니다. 키 자격 증명 모음 또는 관리형 HSM에 키를 저장할 수 있습니다. 유효한 열 마스터 키이려면 Azure Key Vault에서 관리되는 키가 RSA 키여야 합니다.
Azure CLI, Portal 또는 PowerShell 사용
키 자격 증명 모음에서 키를 만드는 방법에 대한 자세한 내용은 다음을 참조하세요.
- 빠른 시작: Azure CLI를 사용하여 Azure Key Vault에서 키 설정 및 검색
- 빠른 시작: Azure PowerShell을 사용하여 Azure Key Vault에서 키 설정 및 검색
- 빠른 시작: Azure Portal을 사용하여 Azure Key Vault에서 키 설정 및 검색
관리되는 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 암호화 사용자 역할에 추가하는 것입니다. 필요한 권한으로 사용자 지정 역할을 만들 수도 있습니다.
키 자격 증명 모음에 열 마스터 키를 저장하고 권한 부여에 액세스 정책을 사용하는 경우:
- 애플리케이션 ID에는 키 자격 증명 모음에 대한 액세스 정책 권한인 get, unwrapKey 및 verify가 필요합니다.
- Always Encrypted에 대한 키를 관리하는 사용자는 키 자격 증명 모음에 대해 만들기, 가져오기, 나열, 서명, unwrapKey, wrapKey, verify 등의 액세스 정책 권한이 필요합니다.
키 자격 증명 모음에 대한 인증 및 권한 부여를 구성하는 방법에 대한 일반적인 내용은 보안 주체에게 키 자격 증명 모음의 액세스 권한 부여를 참조하세요.
관리형 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
- Microsoft.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 Enhanced RSA 및 AES Cryptographic Provider가 포함되어 있습니다.
CAPI/CSP를 사용하여 키 저장소에 열 마스터 키 만들기
열 마스터 키는 RSA 알고리즘을 사용하는 비대칭 키(공개/프라이빗 키 쌍)여야 합니다. 권장 키 길이는 2048자 이상입니다.
HSM 전용 도구 사용
HSM에 대한 설명서를 참조하세요.
SSMS(SQL Server Management Studio) 사용
SQL Server Management Studio를 사용하여 Always Encrypted 키 프로비저닝을 참조하세요.
애플리케이션 및 사용자가 CNG 키를 사용할 수 있도록 설정
컴퓨터에서 CSP를 구성하고 애플리케이션 및 사용자에게 HSM 액세스 권한을 부여하는 방법은 HSM 및 CSP 설명서를 참조하세요.
다음 단계
- SQL Server Management Studio를 사용하여 Always Encrypted 키 프로비저닝
- PowerShell을 사용하여 Always Encrypted 키 프로비저닝