기밀 VM용 기밀 컴퓨팅 플러그인
AKS(Azure Kubernetes Service)는 Azure 기밀 컴퓨팅 VM(가상 머신)에 대한 플러그인을 제공합니다. 플러그인 confcom
은 디먼 집합입니다. 플러그인은 AKS 클러스터의 Intel SGX(Software Guard Extensions) 기밀 VM에 대해서만 실행됩니다. 이 플러그인은 AKS 클러스터 수준에서 등록됩니다. 플러그인을 사용하여 기밀 노드를 쉽게 관리할 수 있습니다. 시작하기 전에 AKS 클러스터에서 플러그인하도록 설정합니다.
AKS용 Intel SGX 디바이스 플러그인
SGX 디바이스 플러그인은 EPC(Enclave Page Cache) 메모리에 대해 Kubernetes 디바이스 플러그인 인터페이스를 구현합니다. 실제로 이 플러그인은 EPC 메모리를 Kubernetes의 또 다른 리소스 종류로 만듭니다. 사용자는 다른 리소스와 마찬가지로 EPC에 대한 제한을 지정할 수 있습니다. 디바이스 플러그 인은 예약 기능 외에도 SGX 디바이스 드라이버 권한을 기밀 워크로드 컨테이너에 할당하는 데 도움이 됩니다. EPC 메모리 기반 배포(kubernetes.azure.com/sgx_epc_mem_in_MiB
)의 샘플 구현을 사용할 수 있습니다.
SGX Quote 도우미 기능
원격 증명을 수행하는 enclave 애플리케이션은 Quote를 생성해야 합니다. Quote는 enclave의 호스트 환경과 함께 애플리케이션의 ID 및 상태에 대한 암호화 증명을 제공합니다. Quote 생성에는 SGX 플랫폼 소프트웨어 구성 요소(PSW/DCAP)의 일부인 Intel의 신뢰할 수 있는 특정 소프트웨어 구성 요소가 필요합니다. 이 PSW는 노드당 실행되는 디먼 집합으로 패키지되어 있습니다. enclave 앱에서 증명 Quote를 요청할 때 PSW를 사용할 수 있습니다. AKS에서 제공하는 서비스를 사용하면 호스트의 PSW와 다른 SW 구성 요소 간의 호환성을 더 효율적으로 유지할 수 있습니다. 아래 기능 세부 정보를 읽어보세요.
원격 증명을 수행하는 enclave 애플리케이션에는 생성된 Quote가 필요합니다. 이 견적은 애플리케이션의 ID, 상태 및 실행 환경에 대한 암호화 증명을 제공합니다. 세대에는 Intel PSW의 일부인 신뢰할 수 있는 소프트웨어 구성 요소가 필요합니다.
개요
참고 항목
이 기능은 특수한 Intel SGX 하드웨어를 사용하는 DCsv2/DCsv3 VM에만 필요합니다.
Intel은 quote 생성을 실행하는 두 가지 증명 모드를 지원합니다. 유형을 선택하는 방법은 [증명 유형 차이]\(#attestation-type-differences\)를 참조하세요.
in-proc: enclave 애플리케이션 프로세스 내부에서 신뢰할 수 있는 소프트웨어 구성 요소를 호스팅합니다. 이 메서드는 로컬 증명을 수행할 때 유용합니다(단일 VM 노드의 enclave 앱 2개 사이).
out-of-proc: enclave 애플리케이션 외부에서 신뢰할 수 있는 소프트웨어 구성 요소를 호스팅합니다. 원격 증명을 수행할 때 선호되는 방법입니다.
Open Enclave SDK를 사용하여 빌드된 SGX 애플리케이션은 기본적으로 in-proc 증명 모드를 사용합니다. SGX 기반 애플리케이션은 out-of-proc를 허용하며 추가 호스팅이 필요합니다. 이 애플리케이션은 애플리케이션 외부에 AESM(Advanced Encryption Standard Manager)과 같은 필수 구성 요소를 노출해야 합니다.
이 기능을 사용하는 것이 좋습니다. Intel 플랫폼 업데이트 또는 DCAP 드라이버 업데이트 중에 enclave 앱의 가동 시간이 향상되므로 이 기능을 활용하는 것이 매우 좋습니다.
증명 유형 차이
컨테이너화된 각 애플리케이션에는 PSW의 Quote 생성 구성 요소에 대한 업데이트가 필요하지 않습니다.
out-of-proc 모드를 사용하면 컨테이너 소유자가 컨테이너 내에서 업데이트를 관리할 필요가 없습니다. 대신 컨테이너 소유자는 컨테이너 외부에서 중앙 서비스를 호출하는 공급자 인터페이스를 사용합니다.
Out-of-proc의 경우 만료된 PSW 구성 요소로 인해 실패가 발생하지 않습니다. quote 생성에는 신뢰할 수 있는 SW 구성 요소, 즉 TCB(신뢰할 수 있는 컴퓨팅 기반)의 일부인 QE(Quoting Enclave) 및 PCE(Provisioning Certificate Enclave)가 포함됩니다. 증명 요구 사항을 유지하려면 이러한 SW 구성 요소가 최신 상태여야 합니다. 공급자가 이러한 구성 요소에 대한 업데이트를 관리합니다. 고객은 컨테이너 내에서 신뢰할 수 있는 만료된 SW 구성 요소로 인해 증명 실패를 처리할 필요가 없습니다.
Out-of-proc는 EPC 메모리를 더 잘 사용합니다. in-proc 증명 모드에서 각 enclave 애플리케이션은 원격 증명을 위해 QE 및 PCE의 복사본을 인스턴스화해야 합니다. out-of-proc 모드를 사용하면 컨테이너에서 이러한 enclave를 호스팅할 필요가 없으며 컨테이너 할당량에서 enclave 메모리를 사용하지 않습니다.
커널 적용에 대한 보호 기능도 있습니다. SGX 드라이버가 Linux 커널로 업스트림되면 enclave는 더 높은 권한을 갖습니다. 이 권한을 통해 enclave에서 PCE를 호출할 수 있습니다. 이 경우 in-proc 모드에서 실행되는 enclave 애플리케이션은 중단됩니다. 기본적으로 enclave에는 이 권한이 부여되지 않습니다. 이 권한을 enclave 애플리케이션에 부여하려면 애플리케이션 설치 프로세스를 변경해야 합니다. 서비스 공급자는 이 권한을 사용하여 서비스가 설치되는지 확인하므로 이 작업은 out-of-proc 모델에서 쉽게 처리됩니다.
따라서 사용자가 이전 PSW 및 DCAP 버전과의 호환성을 확인할 필요가 없습니다. 공급자는 이전 버전과의 호환성에 대한 PSW의 quote 생성 구성 요소 업데이트의 유효성을 검사합니다. 이 단계는 호환성 문제를 미리 처리하고 기밀 워크로드에 대한 업데이트를 배포하기 전에 해결할 수 있습니다.
기밀 워크로드에 대한 Out-of-proc 증명
out-of-proc 증명 모델은 기밀 워크로드에서 작동합니다. Quote 요청자 및 Quote 생성은 개별적으로 실행되지만 동일한 물리적 시스템에서 실행됩니다. quote 생성은 중앙 집중식으로 수행되며, 모든 엔터티로부터 QUOTE 요청을 처리합니다. 인터페이스를 올바르게 정의하고 인터페이스를 검색 가능하게 만들어 엔터티가 quote를 요청할 수 있도록 합니다.
추상 모델은 기밀 워크로드 시나리오에 적용됩니다. 이 모델은 이미 사용 가능한 AESM 서비스를 사용합니다. AESM은 컨테이너화되고 Kubernetes 클러스터에서 디먼 집합으로 배포됩니다. Kubernetes는 Pod로 래핑된 AESM 서비스 컨테이너의 단일 인스턴스가 각 에이전트 노드에 배포되도록 보장합니다. AESM 서비스 컨테이너에서 QE 및 PCE enclave를 시작하기 위해 sgx-device-plugin
에서 EPC 메모리를 요청하므로 새 SGX Quote 디먼 집합은 sgx-device-plugin
디먼 집합에 종속됩니다.
각 컨테이너는 만드는 동안 SGX_AESM_ADDR=1
환경 변수를 설정하여 out-of-proc quote 생성을 사용하도록 옵트인해야 합니다. 또한 컨테이너에는 요청을 기본 Unix 도메인 소켓으로 전달하는 libsgx-quote-ex
패키지가 포함되어야 합니다.
애플리케이션은 여전히 이전과 같이 in-proc 증명을 사용할 수 있습니다. 그러나 애플리케이션 내에서 in-proc 및 out-of-proc를 동시에 사용할 수는 없습니다. out-of-proc 인프라는 기본적으로 사용할 수 있으며 리소스를 소비합니다.
참고 항목
Intel SGX 래퍼 소프트웨어(OSS/ISV)를 사용하여 수정되지 않은 컨테이너를 실행하는 경우 하드웨어와의 증명 상호 작용은 일반적으로 상위 수준 앱에 대해 처리됩니다. 공급자별 증명 구현을 참조하세요.
샘플 구현
기본적으로 이 서비스는 "confcom" 추가 기능이 있는 AKS 클러스터에 대해 사용하도록 설정되지 않습니다. 아래 명령으로 추가 기능을 업데이트하세요.
az aks addon update --addon confcom --name " YourAKSClusterName " --resource-group "YourResourceGroup " --enable-sgxquotehelper
서비스가 시작되면 Open Enclave 기반 애플리케이션에 대해 아래 Docker 샘플을 사용하여 흐름의 유효성을 검사합니다. Docker 파일에서 SGX_AESM_ADDR=1
환경 변수를 설정합니다. 또는 배포 파일에서 변수를 설정합니다. Docker 파일 및 배포 YAML 세부 정보는 이 샘플을 따릅니다.
참고 항목
out-of-proc 증명이 제대로 작동하려면 Intel의 libsgx-quote-ex 패키지를 애플리케이션 컨테이너에 패키지해야 합니다. 아래 지침에는 세부 정보가 있습니다.
# Refer to Intel_SGX_Installation_Guide_Linux for detail
FROM ubuntu:18.04 as sgx_base
RUN apt-get update && apt-get install -y \
wget \
gnupg
# Add the repository to sources, and add the key to the list of
# trusted keys used by the apt to authenticate packages
RUN echo "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main" | tee /etc/apt/sources.list.d/intel-sgx.list \
&& wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add -
# Add Microsoft repo for az-dcap-client
RUN echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main" | tee /etc/apt/sources.list.d/msprod.list \
&& wget -qO - https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
FROM sgx_base as sgx_sample
RUN apt-get update && apt-get install -y \
clang-7 \
libssl-dev \
gdb \
libprotobuf10 \
libsgx-dcap-ql \
libsgx-quote-ex \
az-dcap-client \
open-enclave
WORKDIR /opt/openenclave/share/openenclave/samples/attestation
RUN . /opt/openenclave/share/openenclave/openenclaverc \
&& make build
# this sets the flag for out of proc attestation mode, alternatively you can set this flag on the deployment files
ENV SGX_AESM_ADDR=1
CMD make run
대신 다음과 같이 배포 YAML 파일에서 out-of-proc 증명 모드를 설정합니다.
apiVersion: batch/v1
kind: Job
metadata:
name: sgx-test
spec:
template:
spec:
containers:
- name: sgxtest
image: <registry>/<repository>:<version>
env:
- name: SGX_AESM_ADDR
value: 1
resources:
limits:
kubernetes.azure.com/sgx_epc_mem_in_MiB: 10
volumeMounts:
- name: var-run-aesmd
mountPath: /var/run/aesmd
restartPolicy: "Never"
volumes:
- name: var-run-aesmd
hostPath:
path: /var/run/aesmd
배포가 성공하고 앱이 SGX Quote 도우미 서비스를 사용하여 원격 증명을 수행할 수 있도록 허용해야 합니다.