빠른 시작: Azure CLI를 사용하여 기밀 컴퓨팅 Intel SGX 에이전트 노드가 있는 AKS 클러스터 배포

이 빠른 시작에서는 Azure CLI를 사용하여 Enclave 인식(DCsv2/DCSv3) VM 노드가 있는 AKS(Azure Kubernetes Service) 클러스터를 배포합니다. 그런 다음, enclave에서 간단한 Hello World 애플리케이션을 실행합니다. Azure Portal에서 클러스터를 프로비전하고 기밀 컴퓨팅 노드를 추가할 수도 있지만, 이 빠른 시작에서는 Azure CLI에 대해 집중적으로 설명합니다.

AKS는 개발자 또는 클러스터 운영자가 클러스터를 신속하게 배포 및 관리할 수 있게 해주는 관리되는 Kubernetes 서비스입니다. 자세히 알아보려면 AKS 소개AKS 기밀 노드 개요를 참조하세요.

기밀 컴퓨팅 노드의 기능은 다음과 같습니다.

  • Linux 컨테이너를 지원하는 Linux 작업자 노드
  • Ubuntu 18.04 VM 노드를 사용하는 2세대 VM(가상 머신)
  • EPC(암호화된 페이지 캐시 메모리)를 활용하는 기밀성 보호 enclave에서 컨테이너를 실행하는 데 도움이 되는 Intel SGX 지원 CPU. 자세한 내용은 Azure 기밀 컴퓨팅 FAQ를 참조하세요.
  • 기밀 컴퓨팅 노드에 미리 설치된 Intel SGX DCAP 드라이버. 자세한 내용은 Azure 기밀 컴퓨팅 FAQ를 참조하세요.

참고

DCsv2/DCsv3 VM은 주체 지역 가용성인 특수 하드웨어를 사용합니다. 자세한 내용은 사용 가능한 SKU 및 지원되는 지역을 참조하세요.

필수 구성 요소

이 빠른 시작에는 다음이 필요합니다.

  • 활성화된 Azure 구독. Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

  • Azure CLI 버전 2.0.64 이상이 배포 머신에 설치되고 구성되어 있어야 합니다.

    az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드가 필요한 경우, Azure CLI 설치를 참조하세요.

  • 구독에서 사용할 수 있는 최소 8개의 DCsv2/DCSv3/DCdsv3 코어.

    기본적으로 Azure 구독에 대한 Intel SGX VM 크기에 대해 미리 할당된 할당량은 없습니다. 다음 지침에 따라 구독에 대한 VM 코어 할당량을 요청해야 합니다.

enclave 인식 기밀 컴퓨팅 노드 및 Intel SGX 추가 기능을 사용하여 AKS 클러스터 만들기

다음 지침을 사용하여 Intel SGX 추가 기능을 사용하도록 설정된 AKS 클러스터를 만들고, 클러스터에 노드 풀을 추가하고, hello world enclave 애플리케이션으로 만든 항목을 확인합니다.

시스템 노드 풀을 사용하여 AKS 클러스터 만들기

참고

앞서 나열된 필수 조건을 충족하는 AKS 클러스터가 이미 있는 경우 다음 클러스터 섹션으로 건너뛰어 기밀 컴퓨팅 노드 풀을 추가합니다.

먼저, az group create 명령을 사용하여 클러스터에 대한 리소스 그룹을 만듭니다. 다음 예제에서는 eastus2 지역에 myResourceGroup이라는 리소스 그룹을 만듭니다.

az group create --name myResourceGroup --location eastus2

이제 az aks create 명령을 사용하여 기밀 컴퓨팅 추가 항목이 사용하도록 설정된 AKS 클러스터를 만듭니다.

az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom

위의 명령은 비 기밀 컴퓨팅 노드의 시스템 노드 풀이 있는 새 AKS 클러스터를 배포합니다. 시스템 노드 풀에는 기밀 컴퓨팅 Intel SGX 노드를 사용하지 않는 것이 좋습니다.

기밀 컴퓨팅 기능이 있는 사용자 노드 풀을 AKS 클러스터에 추가

다음 명령을 실행하여 세 개의 노드가 있는 Standard_DC4s_v3 크기의 사용자 노드 풀을 AKS 클러스터에 추가합니다. 지원되는 DCsv2/DCsv3 SKU 및 지역 목록에서 다른 더 큰 크기의 SKU를 선택할 수 있습니다.

az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2

명령을 실행한 후에는 기밀 컴퓨팅 추가 기능 DaemonSets(SGX 디바이스 플러그 인)를 사용하여 DCsv3이 있는 새 노드 풀을 표시해야 합니다.

노드 풀 및 추가 기능 확인

az aks get-credentials 명령을 사용하여 AKS 클러스터의 자격 증명을 가져옵니다.

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

kubectl get pods 명령을 사용하여 노드가 제대로 생성되었고 SGX 관련 DaemonSet가 DCsv2 노드 풀에서 실행 중인지 확인합니다.

$ kubectl get pods --all-namespaces

kube-system     sgx-device-plugin-xxxx     1/1     Running

출력이 이전 코드와 일치하면 이제 AKS 클러스터에서 기밀 애플리케이션을 실행할 준비가 된 것입니다.

이 빠른 시작의 격리된 enclave 애플리케이션에서 Hello World 배포 섹션으로 이동하여 enclave에서 앱을 테스트할 수 있습니다. 또는 다음 지침에 따라 AKS에 노드 풀을 추가합니다. (AKS는 SGX 노드 풀 및 비-SGX 노드 풀 혼합을 지원합니다.)

기존 AKS 클러스터에 기밀 컴퓨팅 노드 풀 추가

이 섹션에서는 이 빠른 시작의 앞부분에 나열된 필수 조건을 충족하는 AKS 클러스터를 이미 실행하고 있다고 가정합니다.

기존 클러스터에서 기밀 컴퓨팅 AKS 추가 기능 사용

다음 명령을 실행하여 기밀 컴퓨팅 추가 기능을 사용하도록 설정합니다.

az aks enable-addons --addons confcom --name MyManagedCluster --resource-group MyResourceGroup 

클러스터에 DCsv3 사용자 노드 풀 추가

참고

기밀 컴퓨팅 기능을 사용하려면 기존 AKS 클러스터에 하나 이상의 DCsv2/DCsv3 VM SKU 기반 노드 풀이 있어야 합니다. 기밀 컴퓨팅을 위한 DCs-v2/Dcs-v3 VM SKU에 대한 자세한 내용은 사용 가능한 SKU 및 지원되는 지역을 참조하세요.

다음 명령을 실행하여 노드 풀을 만듭니다.

az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-count 2 --node-vm-size Standard_DC4s_v3

이름이 confcompool1인 새 노드 풀이 생성되었는지 확인합니다.

az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup

DaemonSet가 기밀 노드 풀에서 실행되고 있는지 확인

기존 AKS 클러스터에 로그인하여 다음 확인을 수행합니다.

kubectl get nodes

출력에 AKS 클러스터에 새로 추가된 confcompool1 풀이 표시됩니다. 다른 DaemonSet가 표시될 수도 있습니다.

$ kubectl get pods --all-namespaces

kube-system     sgx-device-plugin-xxxx     1/1     Running

출력이 이전 코드와 일치하면 이제 AKS 클러스터에서 기밀 애플리케이션을 실행할 준비가 된 것입니다.

격리된 enclave 애플리케이션에서 Hello World 배포

이제 테스트 애플리케이션을 배포할 준비가 되었습니다.

hello-world-enclave.yaml이라는 파일을 만들고, 다음 YAML 매니페스트를 붙여넣습니다. Open Enclave 프로젝트에서 이 애플리케이션 예제 코드를 찾을 수 있습니다. 이 배포에서는 사용자가 confcom 추가 항목을 배포했다고 가정합니다.

참고

다음 예제에서는 Docker 허브에서 공용 컨테이너 이미지를 가져옵니다. 익명의 끌어오기 요청을 하는 대신 Docker Hub 계정을 사용하여 인증하도록 끌어오기 비밀을 설정하는 것이 좋습니다. 공용 콘텐츠를 사용할 때 신뢰성을 향상시키려면 개인 Azure Container Registry에서 이미지를 가져오고 관리하세요. 공용 이미지 사용에 대해 자세히 알아봅니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: sgx-test
  labels:
    app: sgx-test
spec:
  template:
    metadata:
      labels:
        app: sgx-test
    spec:
      containers:
      - name: sgxtest
        image: oeciteam/sgx-test:1.0
        resources:
          limits:
            sgx.intel.com/epc: 5Mi # This limit will automatically place the job into a confidential computing node and mount the required driver volumes. sgx limit setting needs "confcom" AKS Addon as referenced above. 
      restartPolicy: Never
  backoffLimit: 0

또는 아래와 같이 컨테이너 배포에 대한 노드 풀 선택 배포를 수행할 수도 있습니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: sgx-test
spec:
  template:
    metadata:
      labels:
        app: sgx-test
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: agentpool
                operator: In
                values:
                - acc # this is the name of your confidential computing nodel pool
                - acc_second # this is the name of your confidential computing nodel pool
      containers:
      - name: sgx-test
        image: oeciteam/oe-helloworld:1.0
        resources:
          limits:
            kubernetes.azure.com/sgx_epc_mem_in_MiB: 10
          requests:
            kubernetes.azure.com/sgx_epc_mem_in_MiB: 10
      restartPolicy: "Never"
  backoffLimit: 0

이제 다음 예제 출력과 같이 kubectl apply 명령을 사용하여 보안 enclave에서 열 샘플 작업을 만듭니다.

$ kubectl apply -f hello-world-enclave.yaml

job "sgx-test" created

다음 명령을 실행하여 워크로드에서 신뢰할 수 있는 실행 환경(enclave)을 성공적으로 만들었는지 확인할 수 있습니다.

$ kubectl get jobs -l app=sgx-test

NAME       COMPLETIONS   DURATION   AGE
sgx-test   1/1           1s         23s
$ kubectl get pods -l app=sgx-test

NAME             READY   STATUS      RESTARTS   AGE
sgx-test-rchvg   0/1     Completed   0          25s
$ kubectl logs -l app=sgx-test

Hello world from the enclave
Enclave called into host to print: Hello World!

리소스 정리

이 빠른 시작에서 만든 기밀 컴퓨팅 노드 풀을 제거하려면 다음 명령을 사용합니다.

az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup

AKS 클러스터를 삭제하려면 다음 명령을 사용합니다.

az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster

다음 단계