기밀 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 견적 도우미를 사용하는 PSW

원격 증명을 수행하는 Enclave 애플리케이션은 견적을 생성해야 합니다. 따옴표는 enclave의 호스트 환경과 함께 애플리케이션의 ID 및 상태에 대한 암호화 증명을 제공합니다. 견적 생성은 SGX 플랫폼 소프트웨어 구성 요소(PSW/DCAP)의 일부인 Intel의 신뢰할 수 있는 특정 소프트웨어 구성 요소를 사용합니다. 이 PSW는 노드당 실행되는 디먼 집합으로 패키지되어 있습니다. enclave 앱에서 증명 견적을 요청할 때 PSW를 사용할 수 있습니다. AKS 제공 서비스를 사용하면 PSW와 호스트의 다른 SW 구성 요소 간의 호환성을 더 잘 유지할 수 있습니다. 아래 기능 세부 정보를 읽어보세요.

원격 증명을 수행하는 Enclave 애플리케이션에는 생성된 견적이 필요합니다. 이 인용문은 애플리케이션의 ID, 상태 및 실행 환경에 대한 암호화 증명을 제공합니다. 이 세대에는 Intel PSW의 일부인 신뢰할 수 있는 소프트웨어 구성 요소가 필요합니다.

개요

참고

이 기능은 특수한 Intel SGX 하드웨어를 사용하는 DCsv2/DCsv3 VM에만 필요합니다.

Intel은 따옴표 생성을 실행하는 두 가지 증명 모드를 지원합니다. 형식을 선택하는 방법은 [증명 형식 차이](#attestation-type-differences)를 참조하세요.

  • in-proc: enclave 애플리케이션 프로세스 내에서 신뢰할 수 있는 소프트웨어 구성 요소를 호스트합니다. 이 방법은 로컬 증명을 수행할 때 유용합니다(단일 VM 노드에서 2개 enclave 앱 사이).

  • out-of-proc: enclave 애플리케이션 외부에서 신뢰할 수 있는 소프트웨어 구성 요소를 호스팅합니다. 원격 증명을 수행할 때 기본 설정 방법입니다.

SGX 애플리케이션은 기본적으로 프로시저 내 증명 모드를 사용하여 Open Enclave SDK를 사용하여 빌드됩니다. SGX 기반 애플리케이션은 out-of-proc를 허용하며 추가 호스팅이 필요합니다. 이러한 애플리케이션은 애플리케이션 외부의 AESM(아키텍처 Enclave Service Manager)과 같은 필수 구성 요소를 노출합니다.

이 기능을 사용하는 것이 좋습니다. 이 기능은 Intel Platform 업데이트 또는 DCAP 드라이버 업데이트 중에 Enclave 앱의 작동 시간을 향상시킵니다.

증명 유형 차이

컨테이너화된 각 애플리케이션에는 PSW의 Quote 생성 구성 요소에 대한 업데이트가 필요하지 않습니다.

out-of-proc를 사용하면 컨테이너 소유자는 컨테이너 내에서 업데이트를 관리할 필요가 없습니다. 대신 컨테이너 소유자는 컨테이너 외부에서 중앙 집중식 서비스를 호출하는 제공된 인터페이스를 사용합니다.

아웃 오브 프로시브의 경우 오래된 PSW 구성 요소로 인해 오류가 발생하지 않을 수 있습니다. 견적 생성에는 신뢰할 수 있는 TCB(컴퓨팅 기반)의 일부인 신뢰할 수 있는 SW 구성 요소인 QE(Quoting Enclave) & 프로비저닝 인증서 Enclave(PCE)가 포함됩니다. 증명 요구 사항을 유지하려면 이러한 SW 구성 요소가 최신 상태여야 합니다. 공급자가 이러한 구성 요소에 대한 업데이트를 관리합니다. 고객은 컨테이너 내에서 신뢰할 수 있는 최신 SW 구성 요소로 인해 증명 오류를 처리할 필요가 없습니다.

Out-of-proc는 EPC 메모리를 더 잘 사용합니다. 프로시저 내 증명 모드에서 각 enclave 애플리케이션은 원격 증명을 위해 QE 및 PCE의 복사본을 인스턴스화합니다. out-of-proc를 사용하면 컨테이너는 해당 enclave를 호스트하지 않으며 컨테이너 할당량의 enclave 메모리를 소비하지 않습니다.

커널 적용에 대한 보호 기능도 있습니다. SGX 드라이버가 Linux 커널로 스트리밍되면 enclave에 더 높은 권한이 있습니다. 이 권한을 통해 enclave는 PCE를 호출할 수 있으며, 이로 인해 프로시저 모드에서 실행되는 enclave 애플리케이션이 중단됩니다. 기본적으로 enclave에는 이 권한이 부여되지 않습니다. 이 권한을 enclave 애플리케이션에 부여하려면 애플리케이션 설치 프로세스를 변경해야 합니다. out-of-proc 요청을 처리하는 서비스의 공급자는 서비스가 이 권한으로 설치되어 있는지 확인합니다.

PSW 및 DCAP와의 이전 버전과의 호환성을 확인할 필요가 없습니다. 공급자는 이전 버전과의 호환성을 위해 PSW의 견적 생성 구성 요소에 대한 업데이트의 유효성을 검사합니다. 이 단계에서는 기밀 워크로드에 대한 업데이트를 배포하기 전에 호환성 문제를 미리 처리하고 해결합니다.

기밀 워크로드에 대한 프로시전 외 증명

out-of-proc 증명 모델은 기밀 워크로드에 대해 작동합니다. 견적 요청자와 견적 생성은 별도로 실행되지만 동일한 물리적 컴퓨터에서 실행됩니다. 견적 생성은 중앙 집중식 방식으로 발생하며 모든 엔터티의 QUOTES에 대한 요청을 제공합니다. 인터페이스를 올바르게 정의하고 엔터티가 따옴표를 요청할 수 있도록 인터페이스를 검색할 수 있도록 합니다.

Diagram of quote requestor and quote generation interface.

추상 모델은 기밀 워크로드 시나리오에 적용됩니다. 이 모델은 이미 사용 가능한 AESM 서비스를 사용합니다. AESM은 Kubernetes 클러스터 전체에서 디먼 집합으로 컨테이너화되고 배포됩니다. Kubernetes는 Pod로 래핑된 AESM 서비스 컨테이너의 단일 인스턴스가 각 에이전트 노드에 배포되도록 보장합니다. AESM 서비스 컨테이너는 QE 및 PCE enclave를 시작하기 위해 EPC 메모리 sgx-device-plugin 를 요청하므로 새 SGX Quote 디먼 집합은 디먼 집합에 종속됩니다sgx-device-plugin.

각 컨테이너는 만드는 동안 환경 변수 SGX_AESM_ADDR=1 를 설정하여 out-of-proc 견적 생성을 사용하도록 옵트인해야 합니다. 컨테이너에는 요청을 기본 Unix 도메인 소켓으로 지정하는 패키지 libsgx-quote-ex도 포함되어야 합니다.

애플리케이션은 여전히 이전과 같이 프로시전 증명을 사용할 수 있습니다. 그러나 애플리케이션 내에서 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 샘플을 사용하여 흐름의 유효성을 검사합니다. SGX_AESM_ADDR=1 Docker 파일에서 환경 변수를 설정합니다. 또는 배포 파일에서 변수를 설정합니다. Docker 파일 및 배포 YAML 세부 정보는 이 샘플을 따릅니다.

참고

프로시브 아웃 증명이 제대로 작동하려면 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/remote_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 파일에서 프로시저 외 증명 모드를 설정합니다.

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

다음 단계