Visual Studio 데이터베이스 프로젝트 및 상시 암호화
12847 단어 visualstudiosecuritysql
SSMS 또는 PowerShell을 통해 구성하는 것은 매우 쉽습니다.
그러나 개발자로서 소스 제어를 통해 관리할 수 있으므로 Visual Studio 데이터베이스 프로젝트를 통해 구성하고 싶습니다.
전제 조건
이 시나리오를 지원하는 몇 가지 조합이 있으며 Azure SQL을 데이터베이스 엔진으로 사용하고 Azure Key Vault를 사용하여 마스터 키를 저장합니다.
PowerShell을 사용하여 이러한 서비스를 자동 프로비저닝할 수 있지만 대부분의 사람들은 이미 리소스 또는 IaC를 가지고 있다고 생각합니다. 이 문서에서는 기존 리소스를 사용합니다.
키 생성
Always Encrypted를 사용하려면 두 개의 키가 필요합니다.
Azure Key Vault에서 마스터 키 만들기
키를 생성하는 방법은 여러 가지가 있으며 이 샘플에서는 PowerShell을 사용합니다. 나는 이 스크립트를 here에서 가져와 일부만 사용합니다.
이미 Key Vault 설정이 있으므로 몇 가지 명령을 주석 처리합니다. 주목해야 할 중요한 사항은 허가입니다. Always Encrypted를 사용하려면
get, create, delete, list, wrapKey,unwrapKey, sign, verify
권한이 필요합니다.Import-Module Az
Connect-AzAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "devto"
$azureLocation = "eastus"
$akvName = "kenakamukv"
$akvKeyName = "CMK1"
$azureCtx = Set-AzConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
#New-AzResourceGroup -Name $resourceGroup -Location $azureLocation # Creates a new resource group - skip, if your desired group already exists.
#New-AzKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"
키가 추가되었는지 확인합니다.
데이터베이스 프로젝트에서 열 암호화 키 생성
데이터베이스 프로젝트의 일부로 키를 관리합니다.
1. Visual Studio를 통해 데이터베이스 프로젝트를 생성합니다. "AlwaysEncrypted"데이터베이스 프로젝트를 만들었습니다.
2. 새 항목을 추가하고 "열 암호화 키"를 선택합니다.
3. 두 키의 이름을 모두 입력하고 마스터 키로 "Azure Key Vault"를 선택합니다. "만들기"를 클릭합니다.
4. Key Vault 정보를 마스터 키로 설정합니다.
CREATE COLUMN MASTER KEY [CMK_Auto1]
WITH
(
KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
KEY_PATH = N'https://kenakamukv.vault.azure.net/keys/CMK1/4264df67d0154312ad86e3b82c29f898'
)
GO
5. 다음 PowerShell 스크립트를 실행하여 암호화된 값을 얻습니다.
New-SqlColumnEncryptionKeyEncryptedValue
cmdlet은 지정된 Azure Key Vault 키를 사용하여 암호화된 값을 계산합니다.$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyUrl "https://kenakamukv.vault.azure.net/keys/CMK1/4264df67d0154312ad86e3b82c29f898"
$encryptedValue = New-SqlColumnEncryptionKeyEncryptedValue -TargetColumnMasterKeySettings $cmkSettings
$encryptedValue | Set-Clipboard
6. 값을
ENCRYPTED_VALUE
에 붙여넣습니다. 결과적으로 아래와 같이 표시되어야 합니다.보안 열이 있는 테이블 만들기
데이터베이스 프로젝트에서 키를 테스트할 테이블을 추가합니다.
1. 테이블을 추가합니다. 이름을
User
로 지정했습니다. 테스트용 열 하나를 추가하고 열 정의를 구성합니다ENCRYPTED WITH
. 자세한 내용은 CREATE TABLE (Transact-SQL)을 참조하십시오.2. Visual Studio에서 데이터베이스로 게시합니다.
결과 확인
쿼리를 실행하여 데이터베이스 구성 방법을 확인할 수 있습니다.
SELECT * FROM sys.column_master_keys
SELECT * FROM sys.column_master_key_definitions
SELECT * FROM sys.column_encryption_keys
SELECT * FROM sys.column_encryption_key_values
SELECT encryption_type_desc FROM sys.all_columns WHERE name = 'SecretValue'
올바르게 구성한 경우 SSMS를 사용하여 데이터를 조작할 수도 있습니다.
1. 옵션에서 "항상 암호화 사용"을 활성화하여 데이터베이스에 연결합니다.
2. 연결되면 다음 옵션이 활성화되어 있는지 확인하십시오.
3. 다음 쿼리를 실행하여 테스트합니다.
DECLARE @secretValue NVARCHAR(50) = 'secret'
INSERT INTO [User] (Id, SecretValue) VALUES (1, @secretValue)
SELECT * FROM [User]
요약
Always Encrypted는 DBA와 Key Admin 간에 키 관리를 분리하는 훌륭한 기능입니다. 하지만 보안 관점에서 고려해야 할 몇 가지 사항이 더 있습니다.
이들은 특히 생산에 중요한 질문입니다.
키 순환에 대한 자세한 내용은 Rotate Always Encrypted keys using PowerShell을 참조하십시오.
Reference
이 문제에 관하여(Visual Studio 데이터베이스 프로젝트 및 상시 암호화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kenakamu/visual-studio-database-project-and-always-encrypted-n4p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)