Wtyczka poufnego przetwarzania dla poufnych maszyn wirtualnych
Usługa Azure Kubernetes Service (AKS) udostępnia wtyczkę dla maszyn wirtualnych do przetwarzania poufnego platformy Azure. Wtyczka , confcom
jest zestawem demona. Wtyczka działa tylko dla poufnych maszyn wirtualnych intel Software Guard (SGX) w klastrze usługi AKS. Ta wtyczka jest zarejestrowana na poziomie klastra usługi AKS. Wtyczka umożliwia łatwe zarządzanie węzłami poufnymi. Przed rozpoczęciem włącz wtyczkę w klastrze usługi AKS.
Wtyczka urządzenia Intel SGX dla usługi AKS
Wtyczka SGX Device implementuje interfejs wtyczki urządzenia Kubernetes dla pamięci pamięci podręcznej stron enklawy (EPC). W efekcie ta wtyczka sprawia, że pamięć EPC jest innym typem zasobu na platformie Kubernetes. Użytkownicy mogą określać limity dotyczące EPC tak samo jak inne zasoby. Oprócz funkcji planowania wtyczka urządzenia pomaga przypisać uprawnienia sterowników urządzeń SGX do poufnych kontenerów obciążeń. Dostępna jest przykładowa implementacja wdrożenia opartego na pamięci EPC (kubernetes.azure.com/sgx_epc_mem_in_MiB
).
PSW z pomocnikiem cudzysłowu SGX
Aplikacje enklawy, które wykonują zdalne zaświadczanie, muszą wygenerować ofertę. Cytat zawiera kryptograficzny dowód tożsamości i stanu aplikacji wraz ze środowiskiem hosta enklawy. Generowanie oferty opiera się na niektórych zaufanych składnikach oprogramowania firmy Intel, które są częścią składników oprogramowania SGX Platform (PSW/DCAP). Ten psW jest spakowany jako zestaw demona, który działa na węzeł. Możesz użyć programu PSW podczas żądania oferty zaświadczania z aplikacji enklawy. Korzystanie z usługi AKS zapewnia lepszą zgodność między serwerem PSW i innymi składnikami sw na hoście. Przeczytaj poniższe szczegóły funkcji.
Aplikacje enklawy, które wykonują zdalne zaświadczanie, wymagają wygenerowanego cudzysłowu. Ten cytat zawiera kryptograficzny dowód tożsamości, stanu i uruchomionego środowiska aplikacji. Generowanie wymaga zaufanych składników oprogramowania, które są częścią psW firmy Intel.
Omówienie
Uwaga
Ta funkcja jest wymagana tylko w przypadku maszyn wirtualnych DCsv2/DCsv3 korzystających z wyspecjalizowanego sprzętu Intel SGX.
Intel obsługuje dwa tryby zaświadczania w celu uruchomienia generowania cudzysłowu. Aby dowiedzieć się, jaki typ należy wybrać, zobacz [różnice typu zaświadczania] (#attestation-różnice typu).
in-proc: hostuje zaufane składniki oprogramowania wewnątrz procesu aplikacji enklawy. Ta metoda jest przydatna podczas wykonywania lokalnego zaświadczania (między 2 aplikacjami enklawy w jednym węźle maszyny wirtualnej)
out-of-proc: hostuje zaufane składniki oprogramowania poza aplikacją enklawy. Jest to preferowana metoda podczas przeprowadzania zdalnego zaświadczania.
Aplikacje SGX są tworzone przy użyciu zestawu SDK open enklawy domyślnie używać trybu zaświadczania w proc. Aplikacje oparte na SGX umożliwiają poza proc i wymagają dodatkowego hostingu. Te aplikacje uwidaczniają wymagane składniki, takie jak Architektura Enklawy Service Manager (AESM), poza aplikacją.
Zdecydowanie zaleca się korzystanie z tej funkcji. Ta funkcja zwiększa czas pracy aplikacji enklawy podczas aktualizacji platformy Intel lub aktualizacji sterowników DCAP.
Różnice typu zaświadczania
Nie są wymagane żadne aktualizacje dla składników generowania cudzysłowów PSW dla każdej konteneryzowanej aplikacji.
Dzięki użyciu funkcji out-of-proc właściciele kontenerów nie muszą zarządzać aktualizacjami w kontenerze. Właściciele kontenerów zamiast tego korzystają z udostępnionego interfejsu, który wywołuje scentralizowaną usługę poza kontenerem.
W przypadku nieaktualnych składników PSW nie ma problemu z awariami. Generowanie cudzysłowu obejmuje zaufane składniki SW — cytowanie enklawy (QE) i aprowizacji enklawy certyfikatu (PCE), które są częścią zaufanej bazy obliczeniowej (TCB). Te składniki sw muszą być aktualne, aby zachować wymagania dotyczące zaświadczania. Dostawca zarządza aktualizacjami tych składników. Klienci nigdy nie muszą radzić sobie z błędami zaświadczania z powodu nieaktualnych zaufanych składników SW w kontenerze.
Funkcja out-of-proc lepiej używa pamięci EPC. W trybie zaświadczania w proc każda aplikacja enklawy tworzy wystąpienie kopii QE i PCE na potrzeby zdalnego zaświadczania. W przypadku braku wartości proc kontener nie hostuje tych enklaw i nie korzysta z pamięci enklawy z limitu przydziału kontenera.
Istnieją również zabezpieczenia przed wymuszaniem jądra. Gdy sterownik SGX jest przesyłany strumieniowo do jądra systemu Linux, enklawa ma wyższe uprawnienia. To uprawnienie umożliwia enklawie wywoływanie PCE, która przerywa działanie aplikacji enklawy działającej w trybie w proc. Domyślnie enklawy nie uzyskują tego uprawnienia. Przyznanie tego uprawnienia aplikacji enklawy wymaga zmian w procesie instalacji aplikacji. Dostawca usługi, która obsługuje żądania out-of-proc, upewnia się, że usługa jest zainstalowana z tym uprawnieniem.
Nie musisz sprawdzać zgodności z poprzednimi wersjami z psW i DCAP. Dostawca weryfikuje aktualizacje składników generowania cudzysłowów psW w celu zapewnienia zgodności z poprzednimi wersjami. Ten krok obsługuje problemy ze zgodnością z góry i rozwiązuje je przed wdrożeniem aktualizacji dla poufnych obciążeń.
Zaświadczenie poza proc dla poufnych obciążeń
Model zaświadczania poza proc działa w przypadku poufnych obciążeń. Żądającego cudzysłowu i generowania cudzysłowu są wykonywane oddzielnie, ale na tej samej maszynie fizycznej. Generowanie cudzysłowu odbywa się w scentralizowany sposób i obsługuje żądania ofert ze wszystkich jednostek. Poprawnie zdefiniuj interfejs i umożliwia odnajdywanie interfejsu dla dowolnej jednostki w celu żądania cudzysłowów.
Model abstrakcyjny ma zastosowanie do scenariuszy obciążeń poufnych. Ten model używa już dostępnej usługi AESM. Narzędzie AESM jest konteneryzowane i wdrażane jako demon ustawiony w klastrze Kubernetes. Platforma Kubernetes gwarantuje wdrożenie pojedynczego wystąpienia kontenera usługi AESM opakowanego w zasobniku w każdym węźle agenta. Nowy zestaw demona cytatu SGX ma zależność od sgx-device-plugin
zestawu demona, ponieważ kontener usługi AESM zażąda pamięci EPC z sgx-device-plugin
na potrzeby uruchamiania enklaw QE i PCE.
Każdy kontener musi wyrazić zgodę na użycie generowania cudzysłowów poza proc, ustawiając zmienną środowiskową SGX_AESM_ADDR=1
podczas tworzenia. Kontener musi również zawierać pakiet libsgx-quote-ex
, który kieruje żądanie do domyślnego gniazda domeny systemu Unix
Aplikacja nadal może używać zaświadczania in-proc, tak jak wcześniej. Jednak nie można jednocześnie używać zarówno w proc, jak i out-of-proc w aplikacji. Infrastruktura out-of-proc jest domyślnie dostępna i zużywa zasoby.
Uwaga
Jeśli używasz oprogramowania otoki Intel SGX (OSS/ISV) do uruchamiania niezmodyfikowanych kontenerów, interakcja zaświadczania ze sprzętem jest zwykle obsługiwana dla aplikacji wyższego poziomu. Zapoznaj się z implementacją zaświadczania dla każdego dostawcy.
Przykładowa implementacja
Domyślnie ta usługa nie jest włączona dla klastra usługi AKS z dodatkiem "confcom". Zaktualizuj dodatek za pomocą poniższego polecenia
az aks addon update --addon confcom --name " YourAKSClusterName " --resource-group "YourResourceGroup " --enable-sgxquotehelper
Po uruchomieniu usługi użyj poniższego przykładu platformy Docker dla aplikacji opartej na enklawie Open, aby zweryfikować przepływ. Ustaw zmienną SGX_AESM_ADDR=1
środowiskową w pliku platformy Docker. Możesz też ustawić zmienną w pliku wdrożenia. Postępuj zgodnie z tym przykładem, aby uzyskać szczegółowe informacje o pliku platformy Docker i wdrożeniu YAML.
Uwaga
Pakiet libsgx-quote-ex firmy Intel musi być spakowany w kontenerze aplikacji, aby zaświadczenie poza proc działało prawidłowo. Poniższe instrukcje zawierają szczegółowe informacje.
# 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
Zamiast tego ustaw tryb zaświadczania poza proc w pliku YAML wdrożenia w następujący sposób:
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
Wdrożenie powinno zakończyć się pomyślnie i umożliwić aplikacjom zdalne zaświadczanie przy użyciu usługi pomocnika oferty SGX.