Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2025/06/24/enable-confidential-computing-openshift-virtualization
Red Hat OpenShift Virtualization은 컨테이너화된 워크로드와 함께 가상 머신을 배포할 수 있도록 지원합니다. 이 문서에서는 기밀 컴퓨팅 기술이 사용 중인 데이터를 보호하고 가상 머신의 무결성을 유지하는 방법을 설명합니다. 또한, 이 환경에서 기밀 가상 머신을 배포하기 위한 개념 증명(PoC)의 주요 내용을 제시합니다.
이 글에서는 OpenShift 가상화 환경 내에서 기밀 컴퓨팅을 지원하는 기술을 소개하며, 특히 Red Hat Enterprise Linux 와 KubeVirt에 중점을 둡니다. 또한 기밀 환경의 무결성을 검증하는 증명 흐름에 대한 자세한 내용을 제공하고, 일반적인 사용 사례를 살펴보며, 이 분야의 향후 개발 방향에 대한 통찰력을 제시합니다. 먼저, 이 기술이 가상 머신 수명 주기 및 생성 프로세스에 어떻게 통합되는지 간략하게 살펴보겠습니다.
기밀 컴퓨팅 개요
컨피덴셜 컴퓨팅은 사용 중인 데이터 보호에 중점을 둔 보안 패러다임입니다. 하드웨어 기반의 검증된 Trusted Execution Environment (TEE) 내에서 연산을 수행하여 이를 달성합니다. 이 접근 방식은 처리 중에도 민감한 정보를 무단 접근으로부터 격리하고 안전하게 보호합니다. 컨피덴셜 컴퓨팅은 제로 트러스트 모델을 발전시키는 데 중요한 역할을 하며 , 특히 제3자가 관리하는 플랫폼을 포함한 다양한 플랫폼에서 데이터 프라이버시와 무결성을 강화합니다.
기밀 컴퓨팅은 다음과 같은 주요 기능을 제공합니다.
- 기밀성 : 가상 머신의 상태는 암호화되어 호스트 하이퍼바이저조차도 이를 엿볼 수 없습니다. 기밀 컴퓨팅 하드웨어는 게스트 메모리를 즉시 복호화하여 가상 머신 환경에서 사용할 수 있도록 합니다.
- 무결성 : 가상 머신의 메모리와 상태를 외부 수정으로부터 보호합니다. 예를 들어, 공격자는 내용을 볼 수 없더라도 가상 머신의 메모리를 임의로 변경하여 무결성을 침해할 수 있습니다. 기밀 컴퓨팅 하드웨어는 이를 방지하기 위해 무결성 보장을 제공하며, 이는 공격자가 호스트 하이퍼바이저인 경우에도 적용됩니다.
- 증명 : VM 소유자는 이를 통해 중요한 작업을 실행하기 전에 컴퓨팅 환경의 무결성과 신뢰성을 확인할 수 있습니다.
그림 1의 다이어그램은 기밀 컴퓨팅의 상위 수준 구성 요소를 보여줍니다.

RHEL 지원
기밀 컴퓨팅은 추가 보안 프로세서를 활용하여 외부 기관의 악의적인 접근으로부터 게스트 환경을 보호합니다. x86 플랫폼에서는 Intel의 TDX(Trusted Domain Extensions)와 AMD의 SEV-SNP(Secure Encrypted Virtualization Suite of Features)가 게스트 환경에 기밀 컴퓨팅 기능을 제공하는 최신 솔루션입니다.
RHEL은 다음과 같이 이러한 기능을 지원합니다.
- AMD SEV-SNP: 이 기능은 RHEL 9.5 버전부터 기술 미리보기 기능 으로 제공되었습니다 .
- Intel TDX: 이러한 확장 기능은 업스트림 단계에서 활발하게 개발되고 있으며, 필요한 변경 사항이 승인되면 RHEL에 도입될 예정입니다. 임시방편으로, 관심 있는 사용자는 CentOS Stream Virt SIG 를 통해 제공되는 TDX 이미지를 사용해 볼 수 있습니다 .
KubeVirt와 OpenShift Virtualization에서 SEV-SNP와 TDX를 지원하지 않기 때문에 SEV-SNP 게스트를 활성화하고 해당 게스트 내에서 증명을 시연했습니다.
가상 머신의 수명주기
OpenShift Virtualization을 사용하면 기존 가상 머신을 컨테이너화된 워크로드로 사용할 수 있습니다. 이 기능은 OpenShift의 오퍼레이터로 제공됩니다.
이를 위해 Kubevirt는 VirtualMachine이라는 커스텀 리소스를 도입합니다 . VirtualMachine 객체가 생성되면 Kubevirt 구성 요소는 Pod 세트를 생성하고 libvirt API를 활용하여 가상 머신을 생성합니다.
Kubevirt가 가상 머신을 관리하기 위해 도입한 주요 구성 요소는 다음과 같습니다.
- Virt Controller : virt-controller는 새로운 VM 정의 제출을 모니터링하고 가상 머신의 컨테이너 역할을 하는 virt-launcher 포드를 생성합니다.
- Virt Handler : virt 핸들러는 데몬 세트 역할을 하며 특정 노드의 가상 머신을 관리합니다. virt 런처와 달리, virt 핸들러는 VM 실행을 위해 노드를 준비하는 권한이 있는 구성 요소입니다.
- Virt Launcher : virt-launcher 포드는 가상 머신 정의를 사용하여 libvirt API를 활용하는 게스트를 실행합니다.
그림 2는 KubeVirt가 OpenShift에 도입한 가상화 구성 요소를 보여줍니다.

OpenShift 가상화 사용자 정의 기능
Kubevirt 프로젝트는 게스트에게 기밀 컴퓨팅 기능을 제공하기 위해 적극적으로 노력하고 있습니다.
하지만 현재 VirtualMachine 객체 정의에서 이러한 기능을 지원하지 않아 사용자 지정 옵션이 제한됩니다. PoC에서는 KubeVirt의 후크 사이드카 기능을 사용하여 이러한 제한을 해결했습니다.
후크 사이드카는 가상 머신이 초기화되기 전에 사용자 지정을 적용하는 컨테이너입니다. 프로덕션 환경에서는 권장되지 않지만, OpenShift Virtualization에서 지원되지 않는 기능을 실험하는 데 유용합니다. 따라서 게스트에서 SEV-SNP를 활성화하는 개념 증명(PoC)을 만드는 데 이상적입니다. 그림 3은 이 개념을 보여줍니다.

후크 사이드카 는 일반적으로 configmap 객체를 통해 도입됩니다. Go 바이너리, 셸 또는 Python 스크립트를 통해 가상 머신 인스턴스화 전에 libvirt XML을 업데이트할 수 있는 옵션을 제공합니다. 예를 들어, 다음 configmap 정의 스니펫은 가상 머신의 XML을 수정하는 onDefineDomain 후크를 도입합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: sidecar-sev
data:
my_script.py: |
#!/usr/bin/env python3
...
os = root.find('os')
os_loader = os.find('loader')
if os_loader is None:
os_loader = ET.Element('loader')
os.append(os_loader)
os_loader.text = "/usr/share/edk2/ovmf/OVMF.amdsev.fd"
os_loader.set('type', 'rom')
os_loader.set('stateless', 'yes')
os_loader.attrib.pop('readonly', None)
os_loader.attrib.pop('secure', None)
for nvram in os.findall('nvram'):
os.remove(nvram)요약하자면, 이 명령은 기본 펌웨어 OVMF_CODE.secboot.fd를 SNP 지원 펌웨어인 OVMF.amdsev.fd로 대체합니다. 또한 SEV-SNP 게스트를 실행하는 데 필요한 다음 줄의 일부 기본 옵션도 변경합니다. 또한 libvirt가 SEV-SNP 게스트를 생성할 수 있도록 launchSecurity 유형으로 sev-snp를 추가합니다. 다음 코드 블록은 이를 구현합니다.
launch_security = root.find('launchSecurity')
if launch_security is None:
launch_security = ET.Element('launchSecurity')
root.append(launch_security)
launch_security.set('type', 'sev-snp')
cbitpos = launch_security.find('cbitpos')
if cbitpos is None:
cbitpos = ET.Element('cbitpos')
launch_security.append(cbitpos)
cbitpos.text = '51'
...마지막으로, 가상 머신이 시작되기 전에 변경 사항이 적용되도록 VM yaml에 후크 사이드카 어노테이션을 업데이트합니다. 가상 머신이 생성될 때 호출되는 onDefineDomain 후크 경로에 주목하세요.
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
labels:
kubevirt.io/os: linux
name: sev-vm2
spec:
...
architecture: amd64
running: true
template:
metadata:
annotations:
hooks.kubevirt.io/hookSidecars: '[{"args": ["--version", "v1alpha2"],
"configMap": {"name": "sidecar-sev", "key": "my_script.py", "hookPath": "/usr/bin/onDefineDomain"}}]'
spec:
domain:
...사이드카 수정 외에도 수정된 Hyper Converged Cluster Operator (HCO) 구성 도 사용합니다 . HCO 연산자는 OpenShift Virtualization의 진입점이자 단일 진실 소스 역할을 합니다. 또한 virt-launcher 및 virt-install 이미지를 사용자 지정 버전으로 업데이트합니다. 업데이트된 HCO 구성은 후크 사이드카 와 WorkloadEncryptionSEV 기능 게이트를 활성화하는 데에도 사용됩니다. 후크 사이드카 기능 게이트는 앞서 설명한 사이드카 사용자 지정을 적용하는 데 필요하지만, WorkloadEncryptionSEV 는 /dev/sev 를 virt-launcher 포드에 노출하여 SEV-SNP 지원 게스트를 구성할 수 있도록 해야 합니다.
증명은 기밀 컴퓨팅 환경을 검증합니다.
증명은 게스트가 신뢰할 수 있는 실행 환경에서 실행되고 있는지 검증하는 데 필수적인 도구입니다. 이 프로세스의 일환으로 게스트 환경은 하드웨어에서 신뢰성 증거를 가져와 사용자 요구 사항에 따라 로컬 또는 원격 증명 서버를 통해 검증합니다. 그림 4는 증명의 개념을 보여줍니다.

이 프로세스에서 가상 머신 소유자는 가상 머신 환경에서 수동으로 또는 미리 구축된 논리를 통해 증명 보고서를 가져오라는 요청을 시작합니다.
보고서는 일반적으로 두 부분으로 구성됩니다.
- 하드웨어 엔클레이브의 신뢰성을 입증할 수 있는 증거입니다. 이는 기밀 컴퓨팅 하드웨어에서 생성되며, 하드웨어 정보 및 버전, 펌웨어 버전, 메모리 암호화와 같은 하드웨어 특성 등 하드웨어 식별 정보를 나타냅니다.
- 선택적으로, 소프트웨어가 변조 방지 기능을 갖추고 있음을 증명할 수 있는 증거(예: 부트 이미지 측정).
검증자는 프로세서 제조업체로부터 하드웨어 보고서의 유효성에 대한 보증을 받거나, 소프트웨어 측정값을 알려진 기준값과 비교하는 등의 방법으로 증거 토큰을 검증할 수 있습니다. 결과에 따라 가상 머신 소유자는 실행을 계속할지 또는 중단할지 결정할 수 있습니다.
TEE 종속 시스템 부팅 정책
증명은 다양한 형태로 적용됩니다. 이 문서에서는 가상 머신(VM) 소유자가 가상 머신 부팅 흐름을 제어하고 시스템 증명을 통해 해당 환경이 실제로 신뢰할 수 있는 실행 환경(TEE)임을 입증할 수 있는 경우에만 부팅을 허용하는 예를 살펴봅니다. VM 소유자는 원격 증명 서버를 사용하여 이러한 제어를 수행할 수 있습니다.
증명 데모를 위해 Trustee를 참조합니다. Trustee는 아래에 설명된 대로 기밀 컴퓨팅 환경을 증명하는 데 필요한 다양한 필수 구성 요소를 제공하는 오픈 소스 원격 증명 서버입니다.
- Key Broker Service (KBS): KBS는 원격 증명 및 비밀 전달을 지원하도록 설계된 서버로, RATS 증명 모델 의 신뢰 당사자 에 해당합니다 .
- Attestation Service (AS): AS는 하드웨어 증거를 검증하는 외부 구성 요소인 보증인과 참조 값 제공자 서비스(RVPS)와 상호 작용하여 TEE 증거를 검증합니다.
- RVPS: 이 구성 요소는 소프트웨어 및 하드웨어 TEE 증거에 대한 참조 값을 제공합니다. 예를 들어, RVPS는 프로세서 펌웨어의 허용 가능한 펌웨어 버전이나 중요 소프트웨어의 메시지 다이제스트를 제공할 수 있습니다.
- Trustee-attester : 수탁자-증명자는 증명을 위한 클라이언트 측 엔드포인트 역할을 합니다. 수탁자 서버의 구성 요소와는 분리되어 있지만, 수탁자 서버와 통신하여 클라이언트 증거를 제공하고 증명 성공 시 게스트 비밀을 가져옵니다.
그림 5의 PoC 흐름도는 플랫폼의 신원을 검증하고 가상 머신 부팅을 제어하기 위해 원격 증명을 통합한 방법을 보여줍니다.

증명에는 증거 기반 정책 결정을 가능하게 하는 두 가지 주요 구성 요소가 있습니다. 첫째, 증명자(attester)는 하드웨어 증거를 수집하는 구성 요소를 의미합니다. 일반적으로 이는 신뢰할 수 있는 실행 환경(TEE)을 생성하는 시스템 내에서 로컬로 실행됩니다. 둘째, 해당 증거를 수집하고 검증자( verifier ) 를 통해 검증한 후 정책 결정을 내리는 신뢰 당사자(relying party) 입니다.
이 섹션에서는 증명 사례를 설명하고 증명의 주요 구성 요소가 수행하는 역할을 알아보겠습니다.
- 시스템이 켜지고 커널이 부팅되면 initrd가 필요한 모듈을 로드하고 루트 볼륨을 마운트하려고 시도합니다.
- 사용자 지정 initrd에는 루트 볼륨이 암호화된 경우, trustee-attester 바이너리를 호출하여 원격 trustee 서버에서 복호화 키를 가져오는 로직이 내장되어 있습니다. 또한, 사용자 지정 initrd는 게스트가 신뢰 당사자와 통신할 수 있도록 네트워킹을 활성화합니다.
- 이 시나리오에서는 수탁자-증명자 바이너리가 증명자 역할을 합니다. 수탁자 서버에 증명 요청을 전송합니다.
- 수탁 서버가 이 요청에 이의를 제기하면 수탁 증명자는 기밀 컴퓨팅 환경에서 제공된 하드웨어에 대한 로컬 증명을 수행합니다.
- 그런 다음 수탁자-증명자는 검증을 위해 증명 결과를 수탁자 서버로 전송합니다.
- 증거를 검증하고 로드된 정책을 준수하는지 확인한 후, 수탁 서버는 토큰 형태로 수탁-증명자 구성 요소에 결과를 전달합니다. 예를 들어, 정책은 특정 펌웨어 버전이나 특정 CPU 모델을 확인할 수 있습니다.
- 수탁자-증명자는 키 요청을 보냅니다. 토큰은 또한 이 요청이 수탁자-서버에 의해 인증되었음을 나타내기 위해 다시 전송됩니다.
- 트러스티 서버는 수신된 요청을 처리하고 결과를 반환합니다. 올바른 키가 수신되면 루트 볼륨이 복호화되고 시스템 부팅이 계속됩니다.
- 키가 수신되지 않거나 잘못된 키가 수신되면 시스템 부팅이 실패합니다.
요약하자면, 우리는 증명 기능을 갖춘 SEV-SNP 지원 기밀 가상 머신을 성공적으로 실행하기 위해 다음과 같은 수정을 제안합니다.
- 호스트 구성 요소 : 이러한 구성 요소에는 QEMU, libvirt 및 OVMF와 같은 virt-launcher 이미지에 포함된 가상화 스택의 추가 부분과 함께 SEV-SNP 기능을 지원하는 호스트 커널이 포함됩니다.
- 게스트 구성 요소 : 게스트 환경에는 하드웨어에서 제공하는 격리 기능을 효과적으로 사용할 수 있도록 SEV-SNP를 활성화해야 하는 게스트 커널이 포함됩니다. 게스트에는 기본 기밀 컴퓨팅 하드웨어의 증명을 요청할 수 있는 사용자 영역 프로그램도 포함되어 있습니다.
- 증명 구성 요소 : 증명을 위해 하드웨어에서 생성된 증명 보고서를 검증하고 가상 머신에 대한 비밀 정보를 저장하고 공개하는 이미 구성된 서비스를 사용합니다. 이 논의에서는 트러스티 증명 서버를 사용합니다 .
사용 사례
OpenShift Virtualization에서 기밀 컴퓨팅을 위한 다음과 같은 배포 시나리오를 제공합니다.
- 멀티 테넌트 환경에서는 일반적으로 IT 부서가 인프라를 소유하고 재무 부서와 같은 다른 부서가 이를 활용합니다. 재무 부서가 소유한 데이터는 기밀 컴퓨팅을 지원하는 OpenShift Virtualization을 통해 기밀로 유지될 수 있습니다.
- 관련 예로, 타사 인프라는 컴퓨팅 하드웨어를 소유한 외부 기관을 포함합니다. 기밀 컴퓨팅을 지원하는 OpenShift Virtualization의 기능을 통해 조직은 타사 소유자를 반드시 신뢰하지 않고도 해당 인프라 상에서 기밀 워크로드를 실행할 수 있습니다.
PoC 작업을 강조하기 위해 기본적인 기밀 컴퓨팅 개념을 소개하고, 게스트에서의 메모리 암호화와 무결성을 보여주며, 가상 머신 부팅 중의 증명 시나리오를 보여주는 데모 비디오를 제작했습니다 .
미래의 작업
이 글에서는 OpenShift 가상화 환경에서 실행되는 게스트에 기밀 컴퓨팅 기능을 노출하는 개념을 탐구하는 개념 증명 설계에 대한 간략한 요약을 제시했습니다. 또한, 수탁자 증명 서버를 활용하여 하드웨어 기반 신뢰 실행 엔클레이브를 검증하는 데 있어 증명의 중요성을 강조하는 예시를 시연했습니다.
첫 번째 단계로 Kubevirt에 SEV-SNP 기능 지원을 통합하여 후크 사이드카 메커니즘을 완전히 없애는 작업이 이미 진행 중입니다 . 앞으로는 증명을 개선하고 AI 및 엣지 워크로드를 위한 기밀 컴퓨팅을 지원하는 GPU 지원과 같은 더 복잡한 시나리오를 지원하는 방법을 모색하기 위해 더 많은 개념 증명 및 논문을 개발할 계획입니다.
관련 작업으로는 Red Hat Enterprise Linux 이미지 빌더 도구 나 RHEL용 이미지 모드 와 같은 유틸리티를 통해 구성 가능한 가상 머신 이미지를 만드는 작업 과 전반적인 아키텍처의 보안을 유지하기 위해 다양한 소프트웨어 부분의 배치를 평가하는 작업도 있습니다.