Plugin für vertrauliche Datenverarbeitung für vertrauliche VMs

Azure Kubernetes Service (AKS) bietet ein Plugin für virtuelle Maschinen (VMs) für vertrauliche Datenverarbeitung in Azure. Das Plugin, confcom, ist ein Daemon-Set. Das Plugin läuft nur für Intel Software Guard Extensions (SGX) vertrauliche VMs in einem AKS-Cluster. Dieses Plugin wird auf der Ebene des AKS-Clusters registriert. Sie können das Plugin verwenden, um vertrauliche Knoten einfach zu verwalten. Aktivieren Sie das Plugin auf Ihrem AKS-Cluster, bevor Sie beginnen.

Intel SGX-Geräte-Plugin für AKS

Das SGX-Geräte-Plugin implementiert die Kubernetes-Geräte-Plugin-Schnittstelle für Enklave-Page-Cache (EPC)-Speicher. Dieses Plugin macht den EPC-Speicher zu einem weiteren Ressourcentyp in Kubernetes. Nutzer können für EPC wie für andere Ressourcen Grenzen festlegen. Neben der Planungsfunktion ermöglicht das Geräte-Plug-In auch die Zuweisung von SGX-Gerätetreiberberechtigungen für vertrauliche Workloadcontainer. Eine Beispielimplementierung des speicherbasierten EPC-Einsatzes (kubernetes.azure.com/sgx_epc_mem_in_MiB) ist verfügbar.

PSW mit SGX-Angebotshilfsprogramm

Enklave-Anwendungen, die eine Fernbescheinigung durchführen, müssen ein Angebot erstellen. Das Zitat liefert einen kryptografischen Beweis für die Identität und den Zustand der Anwendung sowie für die Host-Umgebung der Enklave. Die Angebotserstellung stützt sich auf bestimmte vertrauenswürdige Softwarekomponenten von Intel, die Teil der SGX Platform Software Components (PSW/DCAP) sind. Diese Plattformsoftwarekomponenten werden als DaemonSet verpackt, das pro Knoten ausgeführt wird. Sie können PSW verwenden, wenn Sie ein Nachweisangebot von Enklave-Apps anfordern. Die Verwendung des von AKS bereitgestellten Dienstes trägt dazu bei, die Kompatibilität zwischen dem PSW und anderen SW-Komponenten im Host besser zu gewährleisten. Lesen Sie die Details der Funktion unten.

Enklave-Anwendungen, die eine Fernbescheinigung durchführen, benötigen ein generiertes Angebot. Dieses Zitat liefert einen kryptografischen Beweis für die Identität, den Zustand und die Betriebsumgebung der Anwendung. Die Generation erfordert vertrauenswürdige Softwarekomponenten, die Teil der PSW von Intel sind.

Überblick

Hinweis

Diese Funktion ist nur für DCsv2/DCsv3-VMs erforderlich, die spezielle Intel SGX-Hardware verwenden.

Intel unterstützt zwei Bescheinigungsmodi, um die Angebotserstellung durchzuführen. Für die Wahl des Typs siehe die [Nachweistypenunterschiede] (#attestation-type-differences).

  • In-Proc: Die vertrauenswürdigen Softwarekomponenten werden innerhalb des Enclave-Anwendungsprozesses gehostet. Diese Methode ist nützlich, wenn Sie einen lokalen Nachweis durchführen (zwischen zwei Enclave-Apps in einem einzelnen VM-Knoten).

  • Out-of-Proc: Die vertrauenswürdigen Softwarekomponenten werden außerhalb der Enklavenanwendung gehostet. Dies ist eine bevorzugte Methode beim Durchführen eines Remotenachweises.

Für mit dem Open Enclave-SDK erstellte SGX-Anwendungen wird standardmäßig der In-Proc-Nachweismodus verwendet. SGX-basierte Anwendungen erlauben out-of-proc und erfordern zusätzliches Hosting. Diese Anwendungen stellen die erforderlichen Komponenten, wie den Architectural Enclave Service Manager (AESM), außerhalb der Anwendung zur Verfügung.

Es wird dringend empfohlen, diese Funktion zu nutzen. Diese Funktion erhöht die Betriebszeit Ihrer Enklave-Anwendungen während Intel Platform Updates oder DCAP-Treiber-Updates.

Unterschiede in der Bescheinigungsart

Für die Komponenten zur Angebotserstellung von PSW für die einzelnen Containeranwendungen sind keine Updates erforderlich.

Bei „Out-of-Proc“ müssen Containerbesitzer keine Updates in ihrem Container verwalten. Containerbesitzer verlassen sich stattdessen auf die bereitgestellte Schnittstelle, die den zentralisierten Dienst außerhalb des Containers aufruft.

Bei „Out-of-Proc“ sind keine Fehler aufgrund veralteter PSW-Komponenten zu befürchten. Die Angebotserstellung umfasst auch die vertrauenswürdigen Softwarekomponenten (Quoting Enclave (QE) und Provisioning Certificate Enclave (PCE)), die Teil der vertrauenswürdigen Computerbasis (Trusted Computing Base, TCB) sind. Diese Softwarekomponenten müssen auf dem neuesten Stand sein, um die Nachweisanforderungen zu erfüllen. Der Anbieter verwaltet die Updates für diese Komponenten. Die Kunden müssen sich nicht mit Zertifikatsfehlern aufgrund veralteter vertrauenswürdiger SW-Komponenten in ihrem Container herumschlagen.

Out-of-proc verwendet besser den EPC-Speicher. Im In-Proc-Bescheinigungsmodus instanziiert jede Enklave-Anwendung die Kopie von QE und PCE für die Fernbescheinigung. Bei out-of-proc hostet der Container diese Enklaven nicht und verbraucht auch keinen Enklaven-Speicher aus dem Container-Kontingent.

Es gibt auch Schutzmaßnahmen gegen die Durchsetzung des Kernels. Wenn der SGX-Treiber in den Linux-Kernel gestreamt wird, hat eine Enklave höhere Privilegien. Dieses Privileg erlaubt es der Enklave, PCE aufzurufen, wodurch die Enklave-Anwendung, die im In-Proc-Modus läuft, unterbrochen wird. Standardmäßig wird Enklaven diese Berechtigung nicht gewährt. Zum Gewähren dieser Berechtigung für eine Enklavenanwendung muss der Prozess für die Anwendungsinstallation geändert werden. Der Anbieter des Dienstes, der Out-of-Proc-Anfragen bearbeitet, stellt sicher, dass der Dienst mit diesem Recht installiert ist.

Sie müssen nicht auf Abwärtskompatibilität mit PSW und DCAP achten. Der Anbieter validiert Aktualisierungen der PSW-Komponenten zur Angebotserstellung auf Abwärtskompatibilität. Dieser Schritt behandelt Kompatibilitätsprobleme im Vorfeld und behebt sie, bevor Updates für vertrauliche Workloads bereitgestellt werden.

Out-of-proc-Bescheinigung für vertrauliche Workloads

Das Modell der Out-of-Proc-Bescheinigung eignet sich für vertrauliche Workloads. Die Angebotsanforderung und die Angebotserstellung werden getrennt voneinander, aber auf demselben physischen Rechner ausgeführt. Die Angebotserstellung erfolgt zentral und bedient Anfragen nach Angeboten von allen Unternehmen. Definieren Sie die Schnittstelle ordnungsgemäß, und machen Sie die Schnittstelle für jede Einrichtung auffindbar, um Angebote anzufordern.

Diagram of quote requestor and quote generation interface.

Das abstrakte Modell gilt für vertrauliche Arbeitslastszenarien. Dieses Modell verwendet den bereits verfügbaren AESM-Dienst. AESM ist containerisiert und wird als Daemon-Set im Kubernetes-Cluster bereitgestellt. Durch Kubernetes wird garantiert, dass auf jedem Agent-Knoten eine einzelne Instanz eines AESM-Dienstcontainers (umschlossen von einem Pod) bereitgestellt wird. Der neue SGX-Quote-Dämonensatz ist vom sgx-device-plugin-Dämonensatz abhängig, da der AESM-Dienstcontainer EPC-Speicher von sgx-device-plugin anfordern würde, um QE- und PCE-Enklaven zu starten.

Jeder Container muss sich für die Verwendung der Out-of-Proc-Quote-Erzeugung entscheiden, indem er bei der Erstellung die Umgebungsvariable SGX_AESM_ADDR=1 setzt. Der Container muss auch das Paket libsgx-quote-ex enthalten, das die Anfrage an den Standard-Unix-Domain-Socket weiterleitet

Eine Anwendung kann nach wie vor die In-Proc-Bescheinigung verwenden. Sie können jedoch nicht gleichzeitig in-proc und out-of-proc in einer Anwendung verwenden. Die Out-of-Proc-Infrastruktur ist standardmäßig verfügbar und verbraucht Ressourcen.

Hinweis

Wenn Sie eine Intel SGX Wrapper-Software (OSS/ISV) verwenden, um Ihre nicht geänderten Container auszuführen, wird die Nachweisinteraktion mit Hardware in der Regel für Ihre Apps auf höherer Ebene behandelt. Weitere Informationen finden Sie in der Nachweisimplementierung des jeweiligen Anbieters.

Beispielimplementierung

Standardmäßig ist dieser Dienst für Ihren AKS-Cluster mit dem Add-On „confcom“ nicht aktiviert. Aktualisieren Sie das Add-On mit dem folgenden Befehl.

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

Sobald der Dienst eingerichtet ist, verwenden Sie das folgende Docker-Beispiel für eine Open Enclave-basierte Anwendung, um den Fluss zu überprüfen. Setzen Sie die Umgebungsvariable SGX_AESM_ADDR=1 in der Docker-Datei. Oder Sie setzen die Variable in der Bereitstellungsdatei. Folgen Sie diesem Beispiel für die Details der Docker-Datei und der YAML-Bereitstellung.

Hinweis

Das Paket libsgx-quote-ex von Intel muss in den Anwendungscontainer gepackt werden, damit die Out-of-Proc-Attestierung richtig funktioniert. Die nachstehenden Anweisungen zeigen die Details.

# 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

Stattdessen setzen Sie den Out-of-Proc-Attestierungsmodus in der Deployment-YAML-Datei wie folgt:

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

Die Bereitstellung sollte erfolgreich sein und es Ihren Apps ermöglichen, mit dem SGX Quote Helper-Dienst einen Remotenachweis durchzuführen.

Nächste Schritte