Bezpieczne wydanie klucza zabezpieczeń za pomocą kontenerów poufnych w usłudze Azure Container Instance (ACI)
Przepływ bezpiecznego wydania klucza (SKR) za pomocą usługi Azure Key Vault (AKV) z poufnymi usługami kontenerowymi można implementować na kilka sposobów. Poufne kontenery uruchamiają system gościa z obsługą udostępniania urządzenia AMD SEV-SNP przez jądro Linuxa, które korzysta z oprogramowania układowego w systemie gościa oraz z niezbędnych poprawek związanych z Hyper-V, co określamy jako bezpośredni rozruch systemu Linux (DLB). Ta platforma nie korzysta z maszyn wirtualnych vTPM i HCL opartych na poufnych maszynach wirtualnych z obsługą protokołu AMD SEV-SNP. W tym dokumencie koncepcyjnym założono, że planujesz uruchamiać kontenery w usłudze Azure Container Support, wybierając jednostkę SKU poufnego przetwarzania
- Kontener pomocnika samochodu bocznego dostarczony przez platformę Azure
- Własna implementacja z Twoją aplikacją kontenerową
Kontener pomocniczy typu side-car dostarczony przez platformę Azure
Projekt GitHub open source "confidential side-cars" zawiera szczegółowe informacje na temat budowy tego kontenera oraz jakie parametry/zmienne środowiskowe są potrzebne do przygotowania i uruchomienia tego kontenera typu side-car. Obecna implementacja modułu pomocniczego udostępnia różne interfejsy API REST protokołu HTTP, których może użyć podstawowy kontener aplikacji do pobrania klucza z usługi AKV (Azure Key Vault). Integracja za pośrednictwem usługi Microsoft Azure Attestation (MAA) jest już wbudowana. Można znaleźć szczegóły kroków przygotowania do uruchomienia dodatkowego kontenera SKR tutaj.
Główna aplikacja kontenera aplikacji może wywoływać punkty końcowe internetowego interfejsu API samochodu bocznego zgodnie z definicją w poniższym przykładzie. Sidecar działa w tej samej grupie kontenerów i jest lokalnym punktem końcowym dla twojego kontenera aplikacji. Szczegółowe informacje o interfejsie API można znaleźć tutaj
Metoda key/release
POST oczekuje JSON w następującym formacie:
{
"maa_endpoint": "<maa endpoint>", //https://learn.microsoft.com/en-us/azure/attestation/quickstart-portal#attestation-provider
"akv_endpoint": "<akv endpoint>", //AKV URI
"kid": "<key identifier>" //key name,
"access_token": "optional aad token if the command will run in a resource without proper managed identity assigned"
}
W przypadku sukcesu, odpowiedź dla metody POST zawiera nagłówek StatusOK
oraz ładunek w następującym formacie:
{
"key": "<key in JSON Web Key format>"
}
Odpowiedź metody POST w przypadku błędu zawiera nagłówek StatusForbidden
oraz ładunek w następującym formacie:
{
"error": "<error message>"
}
Implementacja niestandardowa z aplikacją kontenerową
Aby wykonać niestandardową aplikację kontenerową, która rozszerza możliwości usługi Azure Key Vault (AKV) — Bezpieczne Wydanie Klucza i Zaświadczanie platformy Microsoft Azure (MAA), użyj poniższego jako przykładowego przepływu wysokiego poziomu. Łatwe podejście polega na przejrzeniu bieżącego kodu implementacji sidecar w tym projekcie GitHub.
- Krok 1. Konfigurowanie usługi AKV przy użyciu klucza możliwego do wyeksportowania i dołączanie polityki wydania. Więcej tutaj
- Krok 2. Konfigurowanie tożsamości zarządzanej przy użyciu identyfikatora Entra firmy Microsoft i dołączanie go do usługi AKV. Więcej tutaj
- Krok 3. Wdróż aplikację kontenera z wymaganymi parametrami w usłudze ACI, konfigurując zasady wymuszania poufnego przetwarzania. Więcej tutaj
- Krok 4. W tym kroku aplikacja pobierze raport sprzętowy RAW AMD SEV-SNP, wykonując wywołanie IOCTL Linux Socket. Do wykonania tego działania nie jest potrzebna biblioteka zaświadczania gościa. Więcej informacji na temat istniejącej implementacji samochodu bocznego
- Krok 5. Pobieranie łańcucha certyfikatów AMD SEV-SNP dla grupy kontenerów. Te certyfikaty są dostarczane z punktu końcowego IMDS hosta Azure. Więcej tutaj
- Krok 6. Wysyłanie raportu sprzętowego SNP RAW i szczegółów certyfikatu do usługi MAA w celu weryfikacji i zwrotu oświadczeń. Więcej tutaj
- Krok 7. Wysyłanie tokenu MAA i tokenu tożsamości zarządzanej wygenerowanego przez usługę ACI do usługi AKV na potrzeby wydania klucza. Więcej tutaj
Po pomyślnym pobraniu klucza z usługi AKV można użyć klucza do odszyfrowywania zestawów danych lub zaszyfrowania danych wychodzących ze środowiska poufnego kontenera.
Źródła
Usługa ACI z wdrożeniami kontenerów poufnych
Implementacja Side-Car z szyfrowanym pobieraniem i odszyfrowywaniem blobów za pomocą klucza SKR AKV
AKV SKR z poufnymi maszynami wirtualnymi AMD SEV-SNP