Plugin komputasi rahasia untuk VM Rahasia

Azure Kubernetes Service (AKS) menyediakan plugin untuk mesin virtual (VM) komputasi rahasia Azure. Plugin, confcom, adalah set daemon. Plugin hanya berjalan untuk VM rahasia Software Guard Extensions (SGX) Intel di kluster AKS. Plugin ini terdaftar di tingkat kluster AKS. Anda dapat menggunakan plugin untuk mengelola node rahasia dengan mudah. Aktifkan plugin di kluster AKS Anda sebelum memulai.

Plugin Perangkat Intel SGX untuk AKS

Plugin Perangkat SGX mengimplementasikan antarmuka plugin perangkat Kubernetes untuk memori Enclave Page Cache (EPC). Akibatnya, plugin ini menjadikan memori EPC sebagai jenis sumber daya lain di Kubernetes. Pengguna dapat menentukan batasan pada EPC seperti halnya sumber daya lainnya. Terlepas dari fungsi penjadwalan, plugin perangkat membantu menetapkan izin driver perangkat SGX ke kontainer beban kerja rahasia. Implementasi sampel penyebaran berbasis memori EPC (kubernetes.azure.com/sgx_epc_mem_in_MiB) tersedia.

PSW dengan pembantu kutipan SGX

Aplikasi enklave yang melakukan pengesahan jarak jauh perlu membuat kuotasi. Kuotasi tersebut memberikan bukti kriptografi identitas dan status aplikasi, serta lingkungan host enklave. Pembuatan kuotasi bergantung pada komponen perangkat lunak tepercaya tertentu dari Intel, yang merupakan bagian dari Komponen Perangkat Lunak Platform SGX (PSW/DCAP). PSW ini dikemas sebagai set daemon yang berjalan per node. Anda dapat menggunakan PSW saat meminta kutipan pengesahan dari aplikasi enklave. Menggunakan layanan yang disediakan AKS membantu menjaga kompatibilitas antara PSW dan komponen SW lainnya di host dengan lebih baik. Baca detail fitur di bawah ini.

Aplikasi enklave yang melakukan pengesahan jarak jauh memerlukan kuotasi yang dibuat. Kuotasi ini memberikan bukti kriptografi dari identitas aplikasi, status, dan lingkungan yang berjalan. Proses pembuatan kuotasi memerlukan komponen perangkat lunak tepercaya yang merupakan bagian dari PSW Intel.

Gambaran Umum

Catatan

Fitur ini hanya diperlukan untuk VM DCsv2/DCsv3 yang menggunakan perangkat keras Intel SGX khusus.

Intel mendukung dua mode pengesahan untuk menjalankan pembuatan kuotasi. Untuk cara memilih jenis mana, lihat [perbedaan jenis pengesahan] (#attestation-jenis-perbedaan).

  • in-proc: menghosting komponen perangkat lunak tepercaya di dalam proses aplikasi enklave. Metode ini berguna saat Anda melakukan pengesahan lokal (antara 2 aplikasi enklave dalam satu simpul VM)

  • out-of-proc: menghosting komponen perangkat lunak tepercaya di luar aplikasi enklave. Ini adalah metode yang disukai saat melakukan pengesahan jarak jauh.

Aplikasi SGX dibangun menggunakan Open Enclave SDK secara default menggunakan mode pengesahan in-proc. Aplikasi berbasis SGX mendukung out-of-proc dan membutuhkan hosting tambahan. Aplikasi ini mengekspos komponen yang diperlukan seperti Architectural Enclave Service Manager (AESM), di luar aplikasi.

Sangat disarankan untuk menggunakan fitur ini. Fitur ini meningkatkan waktu kerja untuk aplikasi enklave Anda selama pembaruan Platform Intel atau pembaruan driver DCAP.

Perbedaan jenis pengesahan

Tidak ada pembaruan yang diperlukan untuk komponen pembuatan kuotasi PSW untuk setiap aplikasi dalam kontainer.

Dengan out-of-proc, pemilik kontainer tidak perlu mengelola pembaruan di dalam kontainer mereka. Sebaliknya, pemilik kontainer mengandalkan antarmuka yang disediakan yang memanggil layanan terpusat di luar kontainer.

Untuk out-of-proc, tidak ada kekhawatiran kegagalan karena komponen PSW yang kedaluarsa. Pembuatan kuotasi melibatkan komponen SW tepercaya - Quoting Enclave (QE) & Provisioning Certificate Enclave (PCE), yang merupakan bagian dari basis komputasi tepercaya (TCB). Komponen SW ini harus menggunakan versi yang terbaru untuk menjaga persyaratan pengesahan. Penyedia mengelola pembaruan untuk komponen ini. Pelanggan tidak perlu berurusan dengan kegagalan pengesahan karena komponen SW tepercaya yang kedaluwarsa di dalam kontainer mereka.

Out-of-proc lebih baik menggunakan memori EPC. Dalam mode pengesahan in-proc, setiap aplikasi enklave membuat instans salinan QE dan PCE untuk pengesahan jarak jauh. Dengan out-of-proc, kontainer tidak menghosting enklave tersebut, dan tidak menggunakan memori enklave dari kuota kontainer.

Ada juga perlindungan terhadap penegakan Kernel. Ketika driver SGX dialirkan ke kernel Linux, enklave memiliki hak istimewa yang lebih tinggi. Hak istimewa ini memungkinkan enklave untuk memanggil PCE, yang memecah aplikasi enklave yang berjalan dalam mode in-proc. Secara default, enklave tidak mendapatkan izin ini. Memberikan hak istimewa ini pada aplikasi enklave memerlukan perubahan pada proses penginstalan aplikasi. Penyedia layanan yang menangani permintaan out-of-proc memastikan layanan diinstal dengan hak istimewa ini.

Anda tidak perlu memeriksa kompatibilitas mundur dengan PSW dan DCAP. Penyedia memvalidasi pembaruan ke komponen pembuatan kuotasi PSW untuk kompatibilitas mundur. Langkah ini menangani masalah kompatibilitas di awal dan mengatasinya sebelum menyebarkan pembaruan untuk beban kerja rahasia.

Pengesahan out-of-proc untuk beban kerja rahasia

Model pengesahan out-of-proc bekerja untuk beban kerja rahasia. Pemohon kuotasi dan pembuatan kuotasi dijalankan secara terpisah, tetapi pada mesin fisik yang sama. Pembuatan kuotasi terjadi secara terpusat dan melayani permintaan QUOTES dari semua entitas. Tentukan antarmuka dengan benar dan buat antarmuka dapat ditemukan bagi entitas mana pun untuk meminta tanda kutip.

Diagram of quote requestor and quote generation interface.

Model abstrak berlaku untuk skenario beban kerja rahasia. Model ini menggunakan layanan AESM yang sudah tersedia. AESM disimpan dalam kontainer dan disebarkan sebagai set daemon di seluruh kluster Kubernetes. Kube akan menjamin satu instans dari kontainer layanan AESM, yang dibungkus dalam pod, untuk disebarkan pada setiap node agen. Kumpulan daemon SGX Quote yang baru memiliki ketergantungan pada set daemon sgx-device-plugin, karena kontainer layanan AESM akan meminta memori EPC dari sgx-device-plugin untuk meluncurkan enklave QE dan PCE.

Setiap kontainer harus memilih untuk menggunakan pembuatan kuotasi out-of-proc dengan mengatur variabel lingkungan SGX_AESM_ADDR=1 selama pembuatan. Kontainer juga harus menyertakan paket libsgx-quote-ex, yang mengarahkan permintaan ke soket domain Unix default

Aplikasi masih dapat menggunakan pengesahan in-proc seperti sebelumnya. Namun, Anda tidak dapat secara bersamaan menggunakan in-proc dan out-of-proc dalam satu aplikasi. Infrastruktur out-of-proc tersedia secara default dan menghabiskan sumber daya.

Catatan

Jika Anda menggunakan perangkat lunak pembungkus Intel SGX (OSS/ISV) untuk menjalankan kontainer yang tidak dimodifikasi, interaksi pengesahan dengan perangkat keras biasanya ditangani untuk aplikasi tingkat yang lebih tinggi. Silakan merujuk ke implementasi pengesahan per penyedia.

Implementasi sampel

Secara default, layanan ini tidak diaktifkan untuk Kluster AKS Anda dengan addon "confcom". Harap perbarui addon dengan perintah di bawah ini

az aks addon update --addon confcom --name " YourAKSClusterName " --resource-group "YourResourceGroup " --enable-sgxquotehelper

Setelah layanan aktif, gunakan sampel docker di bawah ini untuk aplikasi berbasis Open Enclave untuk memvalidasi alur. Tetapkan variabel lingkungan SGX_AESM_ADDR=1 di file Docker. Atau, tetapkan variabel dalam file penyebaran. Ikuti sampel ini untuk file Docker dan detail penyebaran YAML.

Catatan

Paket libsgx-quote-ex dari Intel harus dikemas dalam kontainer aplikasi agar pengesahan out-of-proc berfungsi dengan baik. Instruksi di bawah ini memiliki detailnya.

# 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

Sebagai gantinya, tetapkan mode pengesahan out-of-proc dalam file YAML penyebaran sebagai berikut:

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

Penyebaran harus berhasil dan memungkinkan aplikasi Anda melakukan pengesahan jarak jauh menggunakan layanan SGX Quote Helper.

Langkah berikutnya