다음을 통해 공유


기밀 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 도우미 서비스를 사용하여 원격 증명을 수행할 수 있도록 허용해야 합니다.

다음 단계