Azure 키 자격 증명 모음(SQL Server)을 사용한 확장 가능 키 관리
이 Microsoft Azure 주요 자격 증명 모음용 SQL Server 커넥터 SQL Server 암호화를 통해 Azure Key Vault 서비스를 EKM(확장 가능한 키 관리) 공급자로 활용하여 암호화 키를 보호할 수 있습니다.
이 항목의 내용:
EKM 사용
organization 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 주요 자격 증명 모음을 참조하세요.
다음 이미지에 키 자격 증명 모음을 사용한 EKM의 프로세스 흐름이 요약되어 있습니다. 이미지의 프로세스 단계 번호는 이미지에서 설명하는 설정 단계 번호와 일치하지 않습니다.
1단계: SQL Server에서 사용할 수 있도록 키 자격 증명 모음 설정
암호화 키 보호를 위해 SQL Server 데이터베이스 엔진과 함께 사용할 키 자격 증명 모음을 설정하려면 다음 단계를 사용합니다. 자격 증명 모음은 이미 조직에 사용 중일 수 있습니다. 자격 증명 모음이 없는 경우 암호화 키를 관리하도록 지정된 organization Azure 관리자는 자격 증명 모음을 만들고, 자격 증명 모음에 비대칭 키를 생성한 다음, 키를 사용하도록 SQL Server 권한을 부여할 수 있습니다. Vault 서비스에 대해 이해하려면 Azure Key Vault 시작(영문), 및 PowerShell Azure Key Vault Cmdlet(영문) 참조를 검토하세요.
중요
여러 Azure 구독이 있는 경우 SQL Server 포함하는 구독을 사용해야 합니다.
Vault 만들기:Azure Key Vault 시작의 Key Vault 만들기 섹션에 있는 지침을 사용하여 Vault를 만듭니다. 자격 증명 모음의 이름은 기록합니다. 이 항목에서는 ContosoKeyVault 를 키 자격 증명 모음 이름으로 사용합니다.
자격 증명 모음에서 비대칭 키를 생성합니다. 키 자격 증명 모음의 비대칭 키는 SQL Server 암호화 키를 보호하는 데 사용됩니다. 비대칭 키의 퍼블릭 부분만 자격 증명 모음을 떠나고 프라이빗 부분은 자격 증명 모음에서 내보내지 않습니다. 비대칭 키를 사용하는 모든 암호화 작업은 Azure 키 자격 증명 모음에 위임되며, 키 자격 증명 모음 보안에 의해 보호됩니다.
비대칭 키를 생성하여 자격 증명 모음에 저장하는 방법에는 여러 가지가 있습니다. 외부에서 키를 생성한 다음 해당 키를 자격 증명 모음에 .pfx 파일로 가져올 수 있습니다. 또는 키 자격 증명 모음 API를 사용하여 자격 증명 모음에서 키를 직접 만들 수 있습니다.
SQL Server 커넥터에는 비대칭 키가 2048비트 RSA여야 하며 키 이름은 "a-z", "A-Z", "0-9" 및 "-" 문자만 사용할 수 있습니다. 이 문서에서 비대칭 키의 이름은 ContosoMasterKey라고 하고 있습니다. 이 이름은 키에 사용하고 싶은 고유 이름으로 대체하세요.
중요
비대칭 키를 가져오면 관리자가 키 에스크로 시스템에 키를 위탁할 수 있으므로 비대칭 키를 가져오는 것은 프로덕션 시나리오에 매우 좋습니다. 프라이빗 키는 자격 증명 모음을 벗어날 수 없으므로 비대칭 키를 자격 증명 모음에서 만든 경우에는 키를 위탁할 수 없습니다. 중요한 데이터를 보호하는 데 사용되는 키는 위탁해야 합니다. 비대칭 키가 손실되는 경우 데이터를 영구적으로 복구할 수 없습니다.
중요
키 자격 증명 모음에서는 여러 버전의 동일한 이름 키를 지원합니다. SQL Server 커넥터에서 사용할 키는 버전 관리 또는 롤백하면 안 됩니다. 관리자가 SQL Server 암호화에 사용되는 키를 롤하려는 경우 다른 이름의 새 키를 자격 증명 모음에 만들고 DEK를 암호화하는 데 사용해야 합니다.
키 자격 증명 모음으로 키를 가져오거나 키 자격 증명 모음에서 키를 만드는 방법에 대한 자세한 내용은 Azure Key Vault 시작의 키 자격 증명 모음에 키 또는 비밀 추가 섹션을 참조하세요.
SQL Server에 사용할 Azure Active Directory 서비스 보안 주체 가져오기: 조직은 Microsoft 클라우드 서비스에 등록할 때 Azure Active Directory를 가져옵니다. 키 자격 증명 모음에 액세스하는 동안 사용할 SQL Server(Azure Active Directory에 인증하기 위해) Azure Active Directory에 서비스 주체를 만듭니다.
암호화를 사용하도록 SQL Server 구성하는 동안 SQL Server 관리자가 자격 증명 모음에 액세스하려면 하나의 서비스 주체가 필요합니다.
SQL Server 암호화에 사용되는 키 래핑 해제를 위해 자격 증명 모음에 액세스하려면 SQL Server 데이터베이스 엔진에서 다른 서비스 주체가 필요합니다.
애플리케이션을 등록하고 서비스 사용자를 생성하는 방법에 대한 자세한 내용은 Azure Key Vault 시작(영문)의 Register an Application with Azure Active Directory(Azure Active Directory로 애플리케이션 등록) 섹션을 참조하세요. 등록 프로세스에서는 각 Azure Active Directory 서비스 사용자 에 대해 애플리케이션 ID( 클라이언트 ID 라고도 함) 및 인증 키( 비밀이라고도 함)를 반환합니다. 문에서
CREATE CREDENTIAL
사용되는 경우 클라이언트 ID에서 하이픈을 제거해야 합니다. 아래의 스크립트에서 사용할 수 있도록 기록해 두세요.sysadmin 로그인용 서비스 사용자 : CLIENTID_sysadmin_login 및 SECRET_sysadmin_login
SQL Server 데이터베이스 엔진의 서비스 주체: CLIENTID_DBEngine 및 SECRET_DBEngine.
서비스 사용자가 키 자격 증명 모음에 액세스할 수 있는 권한 부여:CLIENTID_sysadmin_login 및 CLIENTID_DBEngine서비스 사용자 는 모두 키 자격 증명 모음에서 get, list, wrapKey, 및 unwrapKey 권한을 필요로 합니다. SQL Server 통해 키를 만들려는 경우 키 자격 증명 모음에 만들기 권한을 부여해야 합니다.
중요
사용자가 키 자격 증명 모음에 적어도 wrapKey 및 unwrapKey 작업을 사용할 수 있어야 합니다.
Vault에 사용 권한을 부여하는 방법에 대한 자세한 내용은 Azure Key Vault 시작(영문)의 Authorize the application to use the key or secret(키 또는 암호를 사용할 수 있도록 애플리케이션에 권한 부여) 섹션을 참조하세요.
Azure 키 자격 증명 모음 설명서 링크
PowerShell Azure 주요 자격 증명 모음 Cmdlet 참조
2단계: SQL Server 커넥터 설치
SQL Server 커넥터는 SQL Server 컴퓨터의 관리자가 다운로드하여 설치합니다. SQL Server 커넥터는 Microsoft 다운로드 센터에서 다운로드할 수 있습니다. Microsoft Azure Key Vault 용 SQL Server 커넥터를 검색하고, 세부 정보, 시스템 요구 사항 및 설치 지침을 검토하고, 커넥터를 다운로드하도록 선택하고 실행을 사용하여 설치를 시작하세요. 라이선스를 검토한 다음 라이선스를 수락하고 계속합니다.
기본적으로 커넥터는 C:\Program Files\Microsoft Azure 주요 자격 증명 모음용 SQL Server 커넥터 설치됩니다. 이 위치는 설치 중 변경할 수 있습니다. (변경할 경우 아래의 스크립트를 조정하세요.)
설치를 완료하면 다음 항목이 컴퓨터에 설치됩니다.
Microsoft.AzureKeyVaultService.EKM.dll: CREATE CRYPTOGRAPHIC PROVIDER 문을 사용하여 SQL Server 등록해야 하는 암호화 EKM 공급자 DLL입니다.
Azure Key Vault SQL Server 커넥터: 암호화 EKM 공급자가 키 자격 증명 모음과 통신할 수 있도록 해주는 Windows 서비스입니다.
SQL Server 커넥터를 설치하면 원할 경우 SQL Server 암호화를 위한 샘플 스크립트를 다운로드할 수도 있습니다.
3단계: 키 자격 증명 모음에 EKM 공급자를 사용하도록 SQL Server 구성
사용 권한
이 전체 프로세스를 완료하려면 sysadmin 고정 서버 역할에 CONTROL SERVER 권한이나 멤버 자격이 있어야 합니다. 특정 작업에는 다음 권한이 필요합니다.
암호화 공급자를 만들려면 sysadmin 고정 서버 역할에 CONTROL SERVER 권한 또는 멤버 자격이 있어야 합니다.
구성 옵션을 변경하고 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'; GO
SQL Server 암호화 시나리오를 설정 및 관리하기 위해 키 자격 증명 모음을 사용하도록 SQL Server 관리자 로그인에 대한 SQL Server 자격 증명을 설정합니다.
중요
의
CREATE CREDENTIAL
IDENTITY 인수에는 키 자격 증명 모음 이름이 필요합니다. 의CREATE CREDENTIAL
SECRET 인수를 <사용하려면 클라이언트 ID>(하이픈 제외) 및 <비밀>이 둘 사이에 공백 없이 함께 전달되어야 합니다.다음 예제에서는 클라이언트 ID (
EF5C8E09-4D2A-4A76-9998-D93440D8115D
)가 하이픈을 제거하고 문자열EF5C8E094D2A4A769998D93440D8115D
로 입력되고 비밀 은 SECRET_sysadmin_login 문자열로 표시됩니다.USE master; CREATE CREDENTIAL sysadmin_ekm_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_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)을 참조하세요.섹션 3 의 1단계에서 설명한 대로 비대칭 키를 가져온 경우, 다음 예제에서 키 이름을 제공하여 키를 엽니다.
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 권한을 검사 합니다.
자세한 내용은
예제
예 1: 키 자격 증명 모음에서 비대칭 키를 사용한 투명한 데이터 암호화
위의 단계를 완료했으면 자격 증명과 로그인을 만들고, 키 자격 증명 모음에 비대칭 키로 보호되는 데이터베이스 암호화 키를 만듭니다. 데이터베이스 암호화 키를 사용하여 TDE로 데이터베이스를 암호화합니다.
데이터베이스를 암호화하려면 데이터베이스에 대한 CONTROL 권한이 필요합니다.
EKM 및 키 자격 증명 모음을 사용한 TDE 사용 설정
데이터베이스 로드 중 주요 자격 증명 모음 EKM에 액세스할 때 사용할 데이터베이스 엔진에 대한 SQL Server 자격 증명을 만듭니다.
중요
의
CREATE CREDENTIAL
IDENTITY 인수에는 키 자격 증명 모음 이름이 필요합니다. 의CREATE CREDENTIAL
SECRET 인수를 <사용하려면 클라이언트 ID>(하이픈 제외) 및 <비밀>이 둘 사이에 공백 없이 함께 전달되어야 합니다.다음 예제에서 클라이언트 ID (
EF5C8E09-4D2A-4A76-9998-D93440D8115D
)는 하이픈이 제거되어 문자열EF5C8E094D2A4A769998D93440D8115D
로 입력되어 있으며 암호 는 문자열 SECRET_DBEngine으로 표현되었습니다.USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_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 ; GO
TDE에 사용할 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
자세한 내용은
예 2: 키 자격 증명 모음에서 비대칭 키를 사용한 백업 암호화
암호화된 백업은 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(Transact-SQL)을 참조하세요.
예 3: 키 자격 증명 모음에서 비대칭 키를 사용한 열 수준 암호화
다음 예제에서는 키 자격 증명 모음에 비대칭 키로 보호되는 대칭 키를 만듭니다. 그런 다음 데이터베이스에서 대칭 키를 사용하여 데이터를 암호화합니다.
이 예제에서는 위에 있는 섹션 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;
참고 항목
CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)CREATE ASYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)EKM(확장 가능한 키 관리)EKM백업 암호화를 사용하여 TDE 사용암호화된 백업 만들기