Microsoft Azure Key Vault용 SQL Server 커넥터를 사용하면 SQL Server 암호화가 Azure Key Vault 서비스를 EKM(확장 가능 키 관리) 공급자로 활용하여 암호화 키를 보호할 수 있습니다.
이 항목에 포함됨:
EKM 사용
조직은 SQL Server 암호화를 사용하여 중요한 데이터를 보호할 수 있습니다. SQL Server 암호화에는 TDE(투명한 데이터 암호화), CLE( 열 수준 암호화 ) 및 백업 암호화가 포함됩니다. 이러한 모든 경우 데이터는 대칭 데이터 암호화 키를 사용하여 암호화됩니다. 대칭 데이터 암호화 키는 SQL Server에 저장된 키 계층 구조로 암호화하여 추가로 보호됩니다. 또는 EKM 공급자 아키텍처를 사용하면 SQL Server가 외부 암호화 공급자의 SQL Server 외부에 저장된 비대칭 키를 사용하여 데이터 암호화 키를 보호할 수 있습니다. EKM 공급자 아키텍처를 사용하면 추가 보안 계층이 추가되고 조직에서 키와 데이터의 관리를 분리할 수 있습니다.
Azure Key Vault용 SQL Server 커넥터를 사용하면 SQL Server가 확장 가능하고 고성능이며 고가용성 키 자격 증명 모음 서비스를 암호화 키 보호를 위한 EKM 공급자로 활용할 수 있습니다. 키 자격 증명 모음 서비스는 Microsoft Azure Virtual Machines의 SQL Server 설치 및 온-프레미스 서버에 사용할 수 있습니다. 또한 키 자격 증명 모음 서비스는 비대칭 암호화 키에 대해 더 높은 수준의 보호를 위해 엄격하게 제어되고 모니터링되는 HSM(하드웨어 보안 모듈)을 사용하는 옵션을 제공합니다. 키 자격 증명 모음에 대한 자세한 내용은 Azure Key Vault를 참조하세요.
EKM의 프로세스 흐름을 키 자격 증명 모음을 사용하여 요약한 이미지는 다음과 같습니다. 이미지의 프로세스 단계 번호는 이미지 뒤에 있는 설정 단계 번호와 일치하지 않습니다.
1단계: SQL Server에서 사용할 Key Vault 설정
암호화 키 보호를 위해 SQL Server 데이터베이스 엔진과 함께 사용할 키 자격 증명 모음을 설정하려면 다음 단계를 사용합니다. 조직에 이미 사용 중인 보관소가 있을 수 있습니다. 자격 증명 모음이 없으면 암호화 키를 관리하도록 지정된 조직의 Azure 관리자가 자격 증명 모음을 만들고 자격 증명 모음에 비대칭 키를 생성한 다음 SQL Server에 키를 사용하도록 권한을 부여할 수 있습니다. 키 자격 증명 모음 서비스에 익숙해지려면 Azure Key Vault 시작 및 PowerShell Azure Key Vault Cmdlet 참조를 검토합니다.
중요합니다
Azure 구독이 여러 개 있는 경우 SQL Server가 포함된 구독을 사용해야 합니다.
자격 증명 모음 만들기: Azure Key Vault 시작하기의 키 자격 증명 모음 만들기 섹션의 지침을 사용하여 자격 증명 모음을 만듭니다. 금고의 이름을 기록합니다. 이 항목에서는 ContosoKeyVault 를 키 자격 증명 모음 이름으로 사용합니다.
자격 증명 모음에서 비대칭 키를 생성합니다 . 키 자격 증명 모음의 비대칭 키는 SQL Server 암호화 키를 보호하는 데 사용됩니다. 비대칭 키의 공개 키 부분만 보관소를 떠나고, 개인 키 부분은 절대 보관소에서 내보내지 않습니다. 비대칭 키를 사용하는 모든 암호화 작업은 Azure Key Vault에 위임되며 키 자격 증명 모음 보안으로 보호됩니다.
비대칭 키를 생성하고 키 저장소에 저장할 수 있는 여러 가지 방법이 있습니다. 외부에서 키를 생성한 후, 키를 .pfx 파일로 금고에 가져올 수 있습니다. 또는 키 저장소 API를 사용하여 저장소에 직접 키를 만듭니다.
SQL Server 커넥터는 비대칭 키가 2048비트 RSA여야 하며 키 이름은 "a-z", "A-Z", "0-9" 및 "-" 문자만 사용할 수 있습니다. 이 문서에서는 비대칭 키의 이름을 ContosoMasterKey라고 합니다. 이 이름을 키에 사용하는 고유한 이름으로 바꿉습니다.
중요합니다
비대칭 키를 가져오는 것은 관리자가 키 에스크로 시스템에서 키를 에스크로할 수 있기 때문에 프로덕션 시나리오에 매우 권장됩니다. 비대칭 키가 보관소에서 생성된 경우 프라이빗 키가 보관소를 떠날 수 없으므로 이 키를 에스크로할 수 없습니다. 중요한 데이터를 보호하는 데 사용되는 키는 에스크로해야 합니다. 비대칭 키가 손실되면 영구적으로 복구할 수 없는 데이터가 생성됩니다.
중요합니다
키 보관소는 같은 이름의 키의 여러 버전을 지원합니다. SQL Server 커넥터에서 사용할 키는 버전 관리되거나 순환되지 않아야 합니다. 관리자가 SQL Server 암호화를 위한 키를 교체하려는 경우, 자격 증명 저장소에 새로운 이름의 키를 생성하여 DEK(Data Encryption Key)를 암호화하는 데 사용해야 합니다.
키 자격 증명 모음으로 키를 가져오거나 키 자격 증명 모음에서 키를 만드는 방법에 대한 자세한 내용은(프로덕션 환경에 권장되지 않음) Azure Key Vault 시작의 키 자격 증명 모음에 키 또는 비밀 추가 섹션을 참조하세요.
SQL Server에 사용할 Azure Active Directory 서비스 주체를 가져옵니다 . 조직에서 Microsoft 클라우드 서비스에 등록하면 Azure Active Directory가 표시됩니다. Azure Active Directory에 SQL Server용 서비스 주체를 만들어, 키 자격 증명 모음에 접근할 때 Azure Active Directory에 인증하도록 합니다.
SQL Server 관리자가 SQL Server를 암호화할 수 있도록 구성하는 동안 자격 모음에 액세스하기 위해 하나의 서비스 주체가 필요합니다.
SQL Server 데이터베이스 엔진에서 SQL Server 암호화에 사용되는 키를 풀기 위해 자격 증명 모음에 액세스하려면 다른 서비스 주체가 필요합니다.
애플리케이션을 등록하고 서비스 주체를 생성하는 방법에 대한 자세한 내용은 Azure Key Vault 시작의 Azure Active Directory에 애플리케이션 등록 섹션을 참조하세요. 등록 프로세스는 각 Azure Active Directory 서비스 주체에 대한 애플리케이션 ID(클라이언트 ID라고도 함) 및 인증 키(비밀이라고도 함)를 반환합니다. 문에서
CREATE CREDENTIAL사용하는 경우 클라이언트 ID에서 하이픈을 제거해야 합니다. 아래 스크립트에서 사용하기 위해 다음을 기록합니다.sysadmin 로그인에 대한 서비스 주체: CLIENTID_sysadmin_login 및 SECRET_sysadmin_login
SQL Server 데이터베이스 엔진의 서비스 주체: CLIENTID_DBEngine 및 SECRET_DBEngine.
서비스 주체에게 Key Vault에 대한 액세스 권한 부여:CLIENTID_sysadmin_login 및 CLIENTID_DBEngineService Principals 모두 Key Vault에서 get, list, wrapKey, unwrapKey 권한이 필요합니다. SQL Server를 통해 키를 만들려는 경우 키 자격 증명 모음의 만들기 권한도 부여해야 합니다.
중요합니다
사용자에게는 Key Vault에 대한 wrapKey 및 unwrapKey 작업이 있어야 합니다.
자격 증명 모음에 대한 권한 부여 방법에 대한 자세한 내용은 Azure Key Vault 시작하기의 키 또는 비밀 사용을 위한 애플리케이션 권한 부여 섹션을 참조하세요.
Azure Key Vault 설명서에 대한 링크
PowerShell Azure Key Vault Cmdlets 참조
2단계: SQL Server 커넥터 설치
SQL Server 커넥터는 SQL Server 컴퓨터의 관리자가 다운로드하여 설치합니다. SQL Server 커넥터는 Microsoft 다운로드 센터에서 다운로드할 수 있습니다. Microsoft Azure Key Vault용 SQL Server 커넥터를 검색하고, 세부 정보, 시스템 요구 사항 및 설치 지침을 검토하고, 커넥터를 다운로드하고 실행을 사용하여 설치를 시작하도록 선택합니다. 라이선스를 검토하고 라이선스를 수락하고 계속합니다.
기본적으로 커넥터는 Microsoft Azure Key Vault용 C:\Program Files\SQL Server Connector에 설치됩니다. 이 위치는 설치 중 변경할 수 있습니다. (변경된 경우 아래 스크립트를 조정합니다.)
설치를 완료하면 컴퓨터에 다음이 설치됩니다.
Microsoft.AzureKeyVaultService.EKM.dll: CREATE CRYPTOGRAPHIC PROVIDER 문을 사용하여 SQL Server에 등록해야 하는 암호화 EKM 공급자 DLL입니다.
Azure Key Vault SQL Server 커넥터: 암호화 EKM 공급자가 키 자격 증명 보관소와 통신할 수 있도록 하는 Windows 서비스입니다.
SQL Server 커넥터 설치 프로그램에서 선택적으로 SQL Server 암호화를 위한 샘플 스크립트를 다운로드할 수도 있습니다.
3단계: Key Vault에 EKM 공급자를 사용하도록 SQL Server 구성
권한
이 전체 프로세스를 완료하려면 CONTROL SERVER 권한 또는 sysadmin 고정 서버 역할의 멤버 자격이 필요합니다. 특정 작업에는 다음 권한이 필요합니다.
암호화 공급자를 만들려면 CONTROL SERVER 권한 또는 sysadmin 고정 서버 역할의 멤버 자격이 필요합니다.
구성 옵션을 변경하고 RECONFIGURE 문을 실행하려면 서버 수준 ALTER SETTINGS 권한이 있어야 합니다. sysadmin 및 serveradmin 고정 서버 역할은 ALTER SETTINGS 권한을 암시적으로 보유하고 있습니다.
자격 증명을 만들려면 ALTER ANY CREDENTIAL 권한이 필요합니다.
로그인에 자격 증명을 추가하려면 ALTER ANY LOGIN 권한이 필요합니다.
비대칭 키를 만들려면 CREATE ASYMMETRIC KEY 권한이 필요합니다.
암호화 공급자를 사용하도록 SQL Server를 구성하려면
EKM을 사용하도록 데이터베이스 엔진을 구성하고 SQL Server에 암호화 공급자를 등록(만들기)합니다.
-- Enable advanced options. USE master; GO sp_configure 'show advanced options', 1 ; GO RECONFIGURE ; GO -- Enable EKM provider sp_configure 'EKM provider enabled', 1 ; GO RECONFIGURE ; GO -- Create a cryptographic provider, using the SQL Server Connector -- which is an EKM provider for the Azure Key Vault. This example uses -- the name AzureKeyVault_EKM_Prov. CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll'; GOSQL Server 암호화 시나리오를 설정 및 관리하기 위해 키 자격 증명 모음을 사용하도록 SQL Server 관리자 로그인에 대한 SQL Server 자격 증명을 설정합니다.
중요합니다
IDENTITY 인수
CREATE CREDENTIAL에는 키 보관소 이름이 필요합니다. SECRET 인수CREATE CREDENTIAL를 <사용하려면 클라이언트 ID>(하이픈 없음)와 <비밀을> 공백 없이 함께 전달해야 합니다.다음 예제에서는 클라이언트 ID (
00001111-aaaa-2222-bbbb-3333cccc4444)가 하이픈을 제거하고 문자열00001111AAAA2222BBBB3333CCCC4444로 입력되고 비밀 은 문자열 SECRET_sysadmin_login 표시됩니다.USE master; CREATE CREDENTIAL sysadmin_ekm_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_sysadmin_login' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ; -- Add the credential to the SQL Server administrators domain login ALTER LOGIN [<domain>/<login>] ADD CREDENTIAL sysadmin_ekm_cred;인수에
CREATE CREDENTIAL변수를 사용하고 클라이언트 ID에서 하이픈을 프로그래밍 방식으로 제거하는 예제는 CREATE CREDENTIAL(Transact-SQL)을 참조하세요.1단계, 섹션 3의 앞부분에서 설명한 대로 비대칭 키를 가져온 경우 다음 예제에서 키 이름을 제공하여 키를 엽니다.
CREATE ASYMMETRIC KEY CONTOSO_KEY FROM PROVIDER [AzureKeyVault_EKM_Prov] WITH PROVIDER_KEY_NAME = 'ContosoMasterKey', CREATION_DISPOSITION = OPEN_EXISTING;프로덕션 환경에서는 권장되지 않지만(키를 내보낼 수 없기 때문에) SQL Server에서 금고에 직접 비대칭 키를 만들 수 있습니다. 이전에 키를 가져오지 않은 경우 다음 스크립트를 사용하여 테스트를 위해 키 자격 증명 모음에 비대칭 키를 만듭니다. sysadmin_ekm_cred 자격 증명으로 프로비전된 로그인을 사용하여 스크립트를 실행합니다.
CREATE ASYMMETRIC KEY CONTOSO_KEY FROM PROVIDER [AzureKeyVault_EKM_Prov] WITH ALGORITHM = RSA_2048, PROVIDER_KEY_NAME = 'ContosoMasterKey';
팁 (조언)
오류가 수신된 사용자는 공급자에서 공개 키를 내보낼 수 없습니다. 공급자 오류 코드: 2053. 키 자격 증명 모음에서 get, list, wrapKey 및 unwrapKey 권한을 확인해야 합니다.
자세한 내용을 보려면 다음을 참조하십시오:
예시
예제 A: Key Vault에서 비대칭 키를 사용하여 투명한 데이터 암호화
위의 단계를 완료한 후 자격 증명과 로그인을 생성하고, 키 자격 증명 모음의 비대칭 키로 보호되는 데이터베이스 암호화 키를 만듭니다. 데이터베이스 암호화 키를 사용하여 TDE를 사용하여 데이터베이스를 암호화합니다.
데이터베이스를 암호화하려면 데이터베이스에 대한 CONTROL 권한이 필요합니다.
EKM 및 Key Vault를 사용하여 TDE를 사용하도록 설정하려면
데이터베이스 로드 중에 키 자격 증명 모음 EKM에 액세스할 때 사용할 데이터베이스 엔진에 대한 SQL Server 자격 증명을 만듭니다.
중요합니다
IDENTITY 인수
CREATE CREDENTIAL에는 키 자격 증명 모음 이름이 필요합니다. SECRET 인수CREATE CREDENTIAL를 <사용하려면 클라이언트 ID>(하이픈 없음)와 <비밀을> 공백 없이 함께 전달해야 합니다.다음 예제에서는 클라이언트 ID (
00001111-aaaa-2222-bbbb-3333cccc4444)가 하이픈을 제거하고 문자열00001111AAAA2222BBBB3333CCCC4444로 입력되고 비밀 은 문자열 SECRET_DBEngine 표시됩니다.USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_DBEngine' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;TDE용 데이터베이스 엔진에서 사용할 SQL Server 로그인을 만들고 자격 증명을 추가합니다. 이 예제에서는 위의 3단계, 섹션 3에서 설명한 대로 이전에 master 데이터베이스에 대해 가져오거나 만든 키 자격 증명 보관소에 저장된 CONTOSO_KEY 비대칭 키를 사용합니다.
USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it loads a database -- encrypted by TDE. CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY CONTOSO_KEY; GO -- Alter the TDE Login to add the credential for use by the -- Database Engine to access the key vault ALTER LOGIN TDE_Login ADD CREDENTIAL Azure_EKM_TDE_cred ; GOTDE에 사용할 DEK(데이터베이스 암호화 키)를 만듭니다. DEK는 SQL Server에서 지원하는 모든 알고리즘 또는 키 길이를 사용하여 만들 수 있습니다. DEK는 키 자격 증명 모음의 비대칭 키로 보호됩니다.
이 예제에서는 위의 3단계 섹션 3 에 설명된 대로 이전에 가져오거나 만든 키 자격 증명 모음에 저장된 CONTOSO_KEY 비대칭 키를 사용합니다.
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GO -- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON ; GO자세한 내용을 보려면 다음을 참조하십시오:
예제 B: Key Vault에서 비대칭 키를 사용하여 백업 암호화
암호화된 백업은 SQL Server 2014부터 지원됩니다. 다음 예제에서는 키 자격 증명 모음에서 비대칭 키로 보호되는 데이터 암호화 키로 암호화된 백업을 만들고 복원합니다.
USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]'
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO
샘플 복원 코드입니다.
RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO
Backup 인수에 대한 자세한 내용은 BACKUP(Transact-SQL)을 참조하세요.
예제 C: Key Vault에서 비대칭 키를 사용하여 열 수준 암호화
다음 예제에서는 키 자격 증명 모음 내의 비대칭 키로 보호되는 대칭 키를 만듭니다. 그런 다음 데이터베이스에서 대칭 키를 사용하여 데이터를 암호화합니다.
이 예제에서는 위의 3단계 섹션 3 에 설명된 대로 이전에 가져오거나 만든 키 자격 증명 모음에 저장된 CONTOSO_KEY 비대칭 키를 사용합니다. 데이터베이스에서 ContosoDatabase 이 비대칭 키를 사용하려면 CREATE ASYMMETRIC KEY 문을 다시 실행하여 데이터베이스에 ContosoDatabase 키에 대한 참조를 제공해야 합니다.
USE [ContosoDatabase];
GO
-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;
-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;
DECLARE @DATA VARBINARY(MAX);
--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;
--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));
-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));
--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;
또한 참조하십시오
암호화 공급자 생성 (Transact-SQL)자격 증명 생성 (Transact-SQL)비대칭 키 생성 (Transact-SQL)대칭 키 생성 (Transact-SQL)확장 가능 키 관리(EKM)EKM을 사용하여 TDE 활성화백업 암호화암호화된 백업 생성