Important
Microsoft SQL Server 2019 빅 데이터 클러스터는 사용 중지되었습니다. SQL Server 2019 빅 데이터 클러스터에 대한 지원은 2025년 2월 28일부터 종료되었습니다. 자세한 내용은 Microsoft SQL Server 플랫폼의 공지 블로그 게시물 및 빅 데이터 옵션을 참조하세요.
Microsoft SQL Server 2019 CU8 빅 데이터 클러스터부터 미사용 데이터 암호화 기능을 사용하여 플랫폼에 저장된 모든 데이터에 애플리케이션 수준 암호화를 제공할 수 있습니다. 이 가이드에서는 빅 데이터 클러스터에 대한 미사용 데이터 암호화 기능 집합의 개념, 아키텍처 및 구성에 대해 설명합니다.
SQL Server 빅 데이터 클러스터는 다음 위치에 데이터를 저장합니다.
- SQL Server 마스터 인스턴스.
- HDFS. 스토리지 풀 및 Spark에서 사용됩니다.
SQL Server 빅 데이터 클러스터에서 데이터를 투명하게 암호화하는 두 가지 방법이 있습니다.
- Volume encryption. Kubernetes 플랫폼은 이 방법을 지원합니다. 빅 데이터 클러스터 배포를 위한 모범 사례입니다. 이 문서에서는 볼륨 암호화를 다루지 않습니다. SQL Server 빅 데이터 클러스터에 사용되는 볼륨을 올바르게 암호화하는 방법은 Kubernetes 플랫폼 또는 어플라이언스 설명서를 참조하세요.
- 애플리케이션 수준 암호화. 이 아키텍처는 디스크에 기록되기 전에 데이터를 처리하는 애플리케이션의 데이터 암호화를 나타냅니다. 볼륨이 노출되는 경우 대상 시스템도 동일한 암호화 키로 구성되지 않은 한 공격자는 다른 곳에서 데이터 아티팩트를 복원할 수 없습니다.
SQL Server 빅 데이터 클러스터의 미사용 데이터 암호화 기능 집합은 SQL Server 및 HDFS 구성 요소에 대한 애플리케이션 수준 암호화의 핵심 시나리오를 지원합니다.
이 기능은 다음과 같은 기능을 제공합니다.
- 정지 상태에서 시스템 관리형 암호화. 이 기능은 CU8+에서 사용할 수 있습니다.
- 사용자가 관리하는 저장 데이터 암호화는 BYOK(Bring Your Own Key)라고도 합니다. 서비스 관리 통합은 SQL Server 2019 CU8에서 도입되었습니다. 외부 키 공급자 통합은 SQL Server 2019 CU11 이상에서 도입되었습니다.
자세한 내용은 SQL Server 빅 데이터 클러스터의 주요 버전을 참조하세요.
Key definitions
SQL Server KMS(빅 데이터 클러스터 키 관리 서비스)
SQL Server 빅 데이터 클러스터에 대한 미사용 데이터 암호화 기능 집합의 키 및 인증서를 관리하는 컨트롤러 호스팅 서비스입니다. 이 서비스는 다음 기능을 지원합니다.
- 미사용 암호화에 사용되는 키 및 인증서의 보안 관리 및 스토리지
- Hadoop KMS 호환성. KMS는 빅 데이터 클러스터의 HDFS 구성 요소에 대한 키 관리 서비스 역할을 합니다.
- SQL Server TDE(투명한 데이터 암호화) 인증서 관리
System-managed keys
빅 데이터 클러스터 KMS 서비스는 SQL Server 및 HDFS에 대한 모든 키와 인증서를 관리합니다.
User-defined keys
빅 데이터 클러스터 KMS에서 관리할 사용자 정의 키(일반적으로 사용자 고유 키 가져오기라고 함). SQL Server 빅 데이터 클러스터는 SQL Server 및 HDFS 구성 요소 모두에서 암호화에 사용할 키의 사용자 지정 정의를 지원합니다. 빅 데이터 클러스터 KMS는 이러한 키를 관리합니다.
Caution
SQL Server 마스터 인스턴스는 SQL Server TDE 기능을 상속합니다. 그러나 파일에서 Pod로 사용자 지정 키를 수동으로 로드하고, SQL Server에 등록하고, TDE에 사용하는 것은 지원되는 시나리오가 아닙니다. 빅 데이터 클러스터 KMS는 해당 키를 관리하지 않습니다. 이 경우 데이터베이스를 읽을 수 없게 될 수 있습니다. 외부 제공 키를 올바르게 사용하려면 이 문서에 설명된 대로 "외부 공급자" 기능을 사용합니다.
External providers
빅 데이터 클러스터 KMS와 호환되는 외부 키 솔루션은 암호화 작업 위임에 지원됩니다. 이 기능은 SQL Server 2019 CU11 이상에서 지원됩니다. 이 기능을 사용하도록 설정하면 암호화의 루트 키가 빅 데이터 클러스터 컨트롤러 외부에서 호스트됩니다.
SQL Server 빅 데이터 클러스터의 정지 데이터 암호화
빅 데이터 클러스터 KMS 컨트롤러 서비스는 SQL Server와 HDFS 모두에서 미사용 데이터 암호화를 달성하기 위해 시스템 관리형 키 및 외부 공급자 제어 키를 지원합니다.
이러한 키와 인증서는 서비스 관리입니다. 이 문서에서는 서비스와 상호 작용하는 방법에 대한 운영 지침을 제공합니다.
이 기능 집합은 SQL Server와 HDFS 모두에서 미사용 데이터 암호화를 위한 시스템 관리형 키 및 인증서를 제공하는 빅 데이터 클러스터 KMS 컨트롤러 서비스를 도입했습니다. 이러한 키와 인증서는 서비스 관리입니다. 이 문서에서는 서비스와 상호 작용하는 방법에 대한 운영 지침을 제공합니다.
- SQL Server 인스턴스는 설정된 TDE(투명한 데이터 암호화) 기능을 사용합니다.
- HDFS는 각 Pod 내의 네이티브 Hadoop KMS를 사용하여 컨트롤러의 빅 데이터 클러스터 KMS와 상호 작용합니다. 이 방법을 사용하면 HDFS에서 보안 경로를 제공하는 HDFS 암호화 영역을 사용할 수 있습니다.
SQL Server 인스턴스
- 시스템 생성 인증서는 TDE 명령과 함께 사용할 SQL Server Pod에 설치됩니다. 시스템 관리 인증서 명명 표준은 .입니다
TDECertificate+timestamp. 예:TDECertificate2020_09_15_22_46_27. - 마스터 인스턴스 빅 데이터 클러스터 프로비전된 데이터베이스 및 사용자 데이터베이스는 자동으로 암호화되지 않습니다. 데이터베이스 관리자는 설치된 인증서를 사용하여 데이터베이스를 암호화할 수 있습니다.
- 컴퓨팅 풀 및 스토리지 풀은 시스템 생성 인증서를 사용하여 자동으로 암호화됩니다.
- T-SQL
EXECUTE AT명령을 사용하여 기술적으로 가능하지만 데이터 풀 암호화는 현재 권장되지 않으며 지원되지 않습니다. 이 기술을 사용하여 데이터 풀 데이터베이스를 암호화하는 것은 효과적이지 않을 수 있으며 암호화가 원하는 상태에서 발생하지 않을 수 있습니다. 또한 이 방법은 다음 릴리스에 대한 호환되지 않는 업그레이드 경로를 만듭니다. - SQL Server 키 회전은 표준 T-SQL 관리 명령을 사용하여 수행됩니다. 자세한 내용은 SQL Server 빅 데이터 클러스터 투명 데이터 암호화(TDE) 저장 데이터 사용 가이드를 참조하세요.
- 암호화 모니터링은 TDE용 기존 표준 SQL Server DMV를 통해 수행됩니다.
- TDE 사용 데이터베이스를 클러스터에 백업하고 복원할 수 있습니다.
- 고가용성이 지원됩니다. SQL Server의 주 인스턴스에 있는 데이터베이스가 암호화된 경우 데이터베이스의 모든 보조 복제본도 암호화됩니다.
HDFS 암호화 영역
- HDFS에 대한 암호화 영역을 사용하도록 설정하려면 Active Directory 통합이 필요합니다.
- 시스템 생성 키는 Hadoop KMS에서 프로비전됩니다. 키 이름은 .입니다
securelakekey. CU8에서 기본 키는 256비트이며 256비트 AES 암호화를 지원합니다. - 기본 암호화 영역은 /securelake라는 경로에서 위의 시스템 생성 키를 사용하여 프로비전됩니다.
- 사용자는 이 가이드에 제공된 특정 지침을 사용하여 다른 키 및 암호화 영역을 만들 수 있습니다. 사용자는 키를 만드는 동안 128, 192 또는 256의 키 크기를 선택할 수 있습니다.
- HDFS 암호화 영역 키 회전은 .를 사용하여
azdata수행됩니다. 자세한 내용은 SQL Server 빅 데이터 클러스터 HDFS 암호화 영역 사용 가이드를 참조하세요. - 암호화 영역 위에 HDFS 계층화 탑재는 지원되지 않습니다.
미사용 데이터 암호화 관리
다음 목록에는 미사용 암호화에 대한 관리 기능이 포함되어 있습니다.
- SQL Server TDE 관리는 표준 T-SQL 명령을 사용하여 수행됩니다.
-
HDFS 암호화 영역 및 HDFS 키 관리는 명령을 사용하여
azdata수행됩니다. - 다음 관리 기능은 운영 Notebook을 사용하여 수행됩니다.
- HDFS 키 백업 및 복구
- HDFS 키 삭제
Configuration guide
SQL Server 빅 데이터 클러스터를 새로 배포하는 동안 CU8 이상에서는 미사용 암호화가 기본적으로 사용하도록 설정되고 구성됩니다. That means:
- 빅 데이터 클러스터 KMS 구성 요소는 컨트롤러에 배포되고 기본 키 및 인증서 집합을 생성합니다.
- SQL Server는 TDE를 켜고 배포되고 인증서는 컨트롤러에 의해 설치됩니다.
- HDFS용 Hadoop KMS는 암호화 작업을 위해 빅 데이터 클러스터 KMS와 상호 작용하도록 구성됩니다. HDFS 암호화 영역이 구성되고 사용할 준비가 된 것입니다.
이전 섹션에서 설명한 요구 사항 및 기본 동작이 적용됩니다.
SQL Server 빅 데이터 클러스터 CU8의 새 배포를 계속 수행하거나 CU9로 직접 업그레이드하는 경우 다른 단계가 필요하지 않습니다.
Upgrade scenarios
기존 클러스터에서 업그레이드 프로세스는 아직 암호화되지 않은 사용자 데이터에 대해 새 암호화 또는 다시 암호화를 적용하지 않습니다. 이 동작은 의도적으로 수행되며 구성 요소별로 다음 문제를 고려해야 합니다.
SQL Server
- SQL Server 마스터 인스턴스. 업그레이드 프로세스는 마스터 인스턴스 데이터베이스 및 설치된 TDE 인증서에 영향을 주지 않습니다. 업그레이드 프로세스 전에 데이터베이스 및 수동으로 설치된 TDE 인증서를 백업하는 것이 좋습니다. 또한 이러한 아티팩트도 빅 데이터 클러스터 외부에 저장하는 것이 좋습니다.
- 컴퓨팅 및 스토리지 풀. 이러한 데이터베이스는 시스템 관리형, 휘발성이며 클러스터 업그레이드에서 다시 만들어지고 자동으로 암호화됩니다.
- Data pool. 업그레이드는 데이터 풀의 SQL Server 인스턴스 부분에 있는 데이터베이스에 영향을 주지 않습니다.
HDFS
업그레이드 프로세스는 암호화 영역 외부의 HDFS 파일 및 폴더를 건드리지 않습니다.
CU8 이하에서 CU9로 업그레이드
기타 단계는 수행할 필요가 없습니다.
CU6 이하에서 CU8로 업그레이드
Caution
SQL Server 빅 데이터 클러스터 CU8로 업그레이드하기 전에 데이터의 전체 백업을 수행합니다.
암호화 영역은 구성되지 않습니다. Hadoop KMS 구성 요소는 빅 데이터 클러스터 KMS를 사용하도록 구성되지 않습니다. 업그레이드 후 HDFS 암호화 영역을 구성하고 사용하도록 설정하려면 다음 섹션의 지침을 따릅니다.
CU8로 업그레이드한 후 HDFS 암호화 영역 사용
클러스터를 CU8(azdata upgrade)로 업그레이드하고 HDFS 암호화 영역을 사용하도록 설정하려는 경우 다음 두 가지 옵션이 있습니다.
- Azure Data Studio의 운영 Notebook인 SOP0128 - 빅 데이터 클러스터에서 HDFS 암호화 영역을 사용하도록 설정을 실행하여 구성을 수행합니다.
- 아래에 설명된 대로 스크립트를 실행합니다.
Requirements:
- Active Directory 통합 클러스터.
- AD 모드에서 클러스터에 구성되고 로그인된 Azure Data CLI(
azdata)입니다.
이 절차에 따라 암호화 영역 지원을 사용하여 클러스터를 다시 구성합니다.
업그레이드
azdata를 수행한 후 다음 스크립트를 저장합니다.스크립트 실행 요구 사항:
- 두 스크립트는 동일한 디렉터리에 있어야 합니다.
- Kubernetes의 경로 설정 파일은 폴더
kubectl에 있습니다.
이 스크립트는 run-key-provider-patch.sh 이름이 지정되어야 합니다.
#!/bin/bash if [[ -z "${BDC_DOMAIN}" ]]; then echo "BDC_DOMAIN environment variable with the domain name of the cluster is not defined." exit 1 fi if [[ -z "${BDC_CLUSTER_NS}" ]]; then echo "BDC_CLUSTER_NS environment variable with the cluster namespace is not defined." exit 1 fi kubectl get configmaps -n test diff <(kubectl get configmaps mssql-hadoop-storage-0-configmap -n $BDC_CLUSTER_NS -o json | ./updatekeyprovider.py) <(kubectl get configmaps mssql-hadoop-storage-0-configmap -n $BDC_CLUSTER_NS -o json | python -m json.tool) diff <(kubectl get configmaps mssql-hadoop-sparkhead-configmap -n $BDC_CLUSTER_NS -o json | ./updatekeyprovider.py) <(kubectl get configmaps mssql-hadoop-sparkhead-configmap -n $BDC_CLUSTER_NS -o json | python -m json.tool) # Replace the config maps. # kubectl replace -n $BDC_CLUSTER_NS -o json -f <(kubectl get configmaps mssql-hadoop-storage-0-configmap -n $BDC_CLUSTER_NS -o json | ./updatekeyprovider.py) kubectl replace -n $BDC_CLUSTER_NS -o json -f <(kubectl get configmaps mssql-hadoop-sparkhead-configmap -n $BDC_CLUSTER_NS -o json | ./updatekeyprovider.py) # Restart the pods which need to have the necessary changes with the core-site.xml kubectl delete pods -n $BDC_CLUSTER_NS nmnode-0-0 kubectl delete pods -n $BDC_CLUSTER_NS storage-0-0 kubectl delete pods -n $BDC_CLUSTER_NS storage-0-1 # Wait for sometime for pods to restart # sleep 300 # Check for the KMS process status. # kubectl exec -n $BDC_CLUSTER_NS -c hadoop nmnode-0-0 -- bash -c 'ps aux | grep kms' kubectl exec -n $BDC_CLUSTER_NS -c hadoop storage-0-0 -- bash -c 'ps aux | grep kms' kubectl exec -n $BDC_CLUSTER_NS -c hadoop storage-0-1 -- bash -c 'ps aux | grep kms'이 스크립트는 updatekeyprovider.py 이름이 지정되어야 합니다.
#!/usr/bin/env python3 import json import re import sys import xml.etree.ElementTree as ET import os class CommentedTreeBuilder(ET.TreeBuilder): def comment(self, data): self.start(ET.Comment, {}) self.data(data) self.end(ET.Comment) domain_name = os.environ['BDC_DOMAIN'] parser = ET.XMLParser(target=CommentedTreeBuilder()) core_site = 'core-site.xml' j = json.load(sys.stdin) cs = j['data'][core_site] csxml = ET.fromstring(cs, parser=parser) props = [prop.find('value').text for prop in csxml.findall( "./property/name/..[name='hadoop.security.key.provider.path']")] kms_provider_path='' for x in range(5): if len(kms_provider_path) != 0: kms_provider_path = kms_provider_path + ';' kms_provider_path = kms_provider_path + 'nmnode-0-0.' + domain_name if len(props) == 0: prop = ET.SubElement(csxml, 'property') name = ET.SubElement(prop, 'name') name.text = 'hadoop.security.key.provider.path' value = ET.SubElement(prop, 'value') value.text = 'kms://https@' + kms_provider_path + ':9600/kms' cs = ET.tostring(csxml, encoding='utf-8').decode('utf-8') j['data'][core_site] = cs kms_site = 'kms-site.xml.tmpl' ks = j['data'][kms_site] kp_uri_regex = re.compile('(<name>hadoop.kms.key.provider.uri</name>\s*<value>\s*)(.*)(\s*</value>)', re.MULTILINE) def replace_uri(match_obj): key_provider_uri = 'bdc://https@hdfsvault-svc.' + domain_name if match_obj.group(2) == 'jceks://file@/var/run/secrets/keystores/kms/kms.jceks' or match_obj.group(2) == key_provider_uri: return match_obj.group(1) + key_provider_uri + match_obj.group(3) return match_obj.group(0) ks = kp_uri_regex.sub(replace_uri, ks) j['data'][kms_site] = ks print(json.dumps(j, indent=4, sort_keys=True))적절한 매개 변수를 사용하여 run-key-provider-patch.sh 실행합니다.
외부 공급자 구성
이전 섹션에서 설명한 것처럼 SQL Server 2019 CU8+ 빅 데이터 클러스터 배포를 사용하면 기본적으로 시스템 관리형 키를 사용하여 미사용 데이터 암호화 기능을 사용할 수 있습니다. 외부 키 공급자가 SQL Server 및 HDFS 암호화의 루트 키를 보호할 수 있도록 하려면 SQL Server 빅 데이터 클러스터의 외부 키 공급자를 참조하세요.
Next steps
SQL Server 빅 데이터 클러스터에서 키 버전을 사용하는 방법에 대한 자세한 내용은 SQL Server 빅 데이터 클러스터의 키 버전을 참조하세요.
미사용 SQL Server 빅 데이터 클러스터에서 암호화를 효과적으로 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.
SQL Server 빅 데이터 클러스터에 대한 자세한 내용은 다음 개요를 참조하세요.