Wdrażanie klastra usługi AKS przy użyciu kontenerów poufnych i zasad domyślnych
W tym artykule użyjesz interfejsu wiersza polecenia platformy Azure do wdrożenia klastra usługi Azure Kubernetes Service (AKS) i skonfigurowania kontenerów poufnych (wersja zapoznawcza) przy użyciu domyślnych zasad zabezpieczeń. Następnie należy wdrożyć aplikację jako kontener Poufne. Aby dowiedzieć się więcej, przeczytaj omówienie kontenerów poufnych usługi AKS.
Ogólnie rzecz biorąc, wprowadzenie do kontenerów poufnych usługi AKS obejmuje następujące kroki.
- Wdrażanie lub uaktualnianie klastra usługi AKS przy użyciu interfejsu wiersza polecenia platformy Azure
- Dodawanie adnotacji do manifestu YAML zasobnika w celu oznaczenia zasobnika jako kontenera poufnego
- Dodawanie zasad zabezpieczeń do manifestu YAML zasobnika
- Włączanie wymuszania zasad zabezpieczeń
- Wdrażanie aplikacji w przetwarzaniu poufnym
Wymagania wstępne
Interfejs wiersza polecenia platformy Azure w wersji 2.44.1 lub nowszej. Uruchom polecenie
az --version
, aby znaleźć wersję i uruchomić polecenieaz upgrade
, aby uaktualnić wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.Rozszerzenie interfejsu
aks-preview
wiersza polecenia platformy Azure w wersji 0.5.169 lub nowszej.Poufne
confcom
rozszerzenie interfejsu wiersza polecenia platformy Azure kontenera 0.3.3 lub nowszego.confcom
jest wymagane do wygenerowania zasad zabezpieczeń.Zarejestruj funkcję w subskrypcji platformy
Preview
Azure.Usługa AKS obsługuje poufne kontenery (wersja zapoznawcza) w wersji 1.25.0 lub nowszej.
Tożsamość obciążenia i poświadczenia tożsamości federacyjnej. Poświadczenie tożsamości obciążenia umożliwia aplikacjom Kubernetes bezpieczny dostęp do zasobów platformy Azure przy użyciu identyfikatora Entra firmy Microsoft na podstawie kont usługi z adnotacjami. Jeśli nie znasz Tożsamość obciążeń Microsoft Entra, zapoznaj się z omówieniem Tożsamość obciążeń Microsoft Entra i zobacz, jak działa tożsamość obciążenia z usługą AKS.
Tożsamość używana do utworzenia klastra ma odpowiednie minimalne uprawnienia. Aby uzyskać więcej informacji na temat dostępu i tożsamości dla usługi AKS, zobacz Opcje dostępu i tożsamości dla usługi Azure Kubernetes Service (AKS).
Aby zarządzać klastrem Kubernetes, użyj narzędzia kubectl klienta wiersza polecenia Kubernetes. Usługa Azure Cloud Shell jest dostarczana z usługą
kubectl
. Narzędzie kubectl można zainstalować lokalnie przy użyciu polecenia az aks install-cli .Poufne kontenery w usłudze AKS zapewniają kontener typu open source przyczepki na potrzeby zaświadczania i bezpiecznego wydania klucza. Przyczepka integruje się z usługa zarządzania kluczami (KMS), na przykład azure Key Vault, w celu wydania klucza do grupy kontenerów po zakończeniu walidacji. Wdrażanie zarządzanego modułu HSM usługi Azure Key Vault (sprzętowego modułu zabezpieczeń) jest opcjonalne, ale zalecane do obsługi integralności i zaświadczania na poziomie kontenera. Zobacz Aprowizuj i aktywuj zarządzany moduł HSM w celu wdrożenia zarządzanego modułu HSM.
Instalowanie rozszerzenia interfejsu wiersza polecenia platformy Azure w wersji zapoznawczej usługi aks
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Aby zainstalować rozszerzenie aks-preview, uruchom następujące polecenie:
az extension add --name aks-preview
Uruchom następujące polecenie, aby zaktualizować do najnowszej wersji wydanego rozszerzenia:
az extension update --name aks-preview
Instalowanie rozszerzenia interfejsu wiersza polecenia platformy Azure platformy Confcom
Aby zainstalować rozszerzenie confcom, uruchom następujące polecenie:
az extension add --name confcom
Uruchom następujące polecenie, aby zaktualizować do najnowszej wersji wydanego rozszerzenia:
az extension update --name confcom
Rejestrowanie flagi funkcji KataCcIsolationPreview
Zarejestruj flagę KataCcIsolationPreview
funkcji przy użyciu polecenia az feature register , jak pokazano w poniższym przykładzie:
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Wyświetlenie stanu Zarejestrowane trwa kilka minut. Sprawdź stan rejestracji przy użyciu polecenia az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService , używając polecenia az provider register :
az provider register --namespace "Microsoft.ContainerService"
Wdrażanie nowego klastra
Utwórz klaster usługi AKS przy użyciu polecenia az aks create i określ następujące parametry:
- --os-sku: AzureLinux. W tej wersji zapoznawczej ta funkcja obsługuje tylko jednostkę os-sku systemu Linux platformy Azure.
- --node-vm-size: dowolny rozmiar maszyny wirtualnej platformy Azure, który jest maszyną wirtualną generacji 2 i obsługuje wirtualizację zagnieżdżonych, działa. Na przykład Standard_DC8as_cc_v5 maszyny wirtualne.
- --enable-workload-identity: umożliwia utworzenie Tożsamość obciążeń Microsoft Entra umożliwienie zasobnikom korzystania z tożsamości Kubernetes.
- --enable-oidc-issuer: włącza wystawcę OpenID Connect (OIDC). Umożliwia to firmie Microsoft Entra ID lub innej platformie zarządzania tożsamościami i dostępem dostawcy usług w chmurze możliwość odnajdywania publicznych kluczy podpisywania serwera interfejsu API.
Poniższy przykład aktualizuje klaster o nazwie myAKSCluster i tworzy jedną pulę węzłów systemowych w grupie myResourceGroup:
az aks create --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <1.25.0 and above> --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON. Klaster utworzony w poprzednim kroku ma jedną pulę węzłów. W następnym kroku dodamy drugą pulę węzłów do klastra.
Gdy klaster jest gotowy, pobierz poświadczenia klastra przy użyciu polecenia az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Dodaj pulę węzłów użytkownika do grupy myAKSCluster z dwoma węzłami w puli nodepool2 w grupie myResourceGroup przy użyciu polecenia az aks nodepool add. Określ następujące parametry:
- --workload-runtime: określ kataCcIsolation , aby włączyć funkcję Poufne kontenery w puli węzłów. W przypadku tego parametru te inne parametry spełniają następujące wymagania. W przeciwnym razie polecenie kończy się niepowodzeniem i zgłasza problem z odpowiednimi parametrami.
- --os-sku: AzureLinux. W tej wersji zapoznawczej ta funkcja obsługuje tylko jednostkę os-sku systemu Linux platformy Azure.
- --node-vm-size: dowolny rozmiar maszyny wirtualnej platformy Azure, który jest maszyną wirtualną generacji 2 i obsługuje wirtualizację zagnieżdżonych, działa. Na przykład Standard_DC8as_cc_v5 maszyny wirtualne.
az aks nodepool add --resource-group myResourceGroup --name nodepool2 --cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --workload-runtime KataCcIsolation
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Wdrażanie w istniejącym klastrze
Aby korzystać z tej funkcji z istniejącym klastrem usługi AKS, należy spełnić następujące wymagania:
- Wykonaj kroki, aby zarejestrować flagę funkcji KataCcIsolationPreview .
- Sprawdź, czy klaster korzysta z platformy Kubernetes w wersji 1.25.0 lub nowszej.
- Włącz tożsamość obciążenia w klastrze, jeśli jeszcze nie jest.
Użyj następującego polecenia, aby włączyć kontenery poufne (wersja zapoznawcza), tworząc pulę węzłów do hostowania.
Dodaj pulę węzłów do klastra usługi AKS przy użyciu polecenia az aks nodepool add . Określ następujące parametry:
- --resource-group: wprowadź nazwę istniejącej grupy zasobów, w ramach których ma zostać utworzony klaster usługi AKS.
- --cluster-name: wprowadź unikatową nazwę klastra usługi AKS, taką jak myAKSCluster.
- --name: wprowadź unikatową nazwę puli węzłów klastrów, na przykład nodepool2.
- --workload-runtime: określ kataCcIsolation , aby włączyć funkcję w puli węzłów. Wraz z parametrem
--workload-runtime
te inne parametry spełniają następujące wymagania. W przeciwnym razie polecenie kończy się niepowodzeniem i zgłasza problem z odpowiednimi parametrami. - --os-sku: AzureLinux. W tej wersji zapoznawczej ta funkcja obsługuje tylko jednostkę os-sku systemu Linux platformy Azure.
- --node-vm-size: dowolny rozmiar maszyny wirtualnej platformy Azure, który jest maszyną wirtualną generacji 2 i obsługuje wirtualizację zagnieżdżonych, działa. Na przykład Standard_DC8as_cc_v5 maszyny wirtualne.
Poniższy przykład dodaje pulę węzłów użytkownika do obiektu myAKSCluster z dwoma węzłami w puli węzłów2 w grupie myResourceGroup:
az aks nodepool add --resource-group myResourceGroup --name nodepool2 –-cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --workload-runtime KataCcIsolation
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Uruchom polecenie az aks update, aby włączyć kontenery poufne (wersja zapoznawcza) w klastrze.
az aks update --name myAKSCluster --resource-group myResourceGroup
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Gdy klaster jest gotowy, pobierz poświadczenia klastra przy użyciu polecenia az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Konfigurowanie kontenera
Przed skonfigurowaniem dostępu do usługi Azure Key Vault i wpisu tajnego oraz wdrożenie aplikacji jako kontenera poufnego należy ukończyć konfigurację tożsamości obciążenia.
Aby skonfigurować tożsamość obciążenia, wykonaj następujące kroki opisane w artykule Wdrażanie i konfigurowanie tożsamości obciążenia:
- Pobieranie adresu URL wystawcy OIDC
- Tworzenie tożsamości zarządzanej
- Tworzenie konta usługi Kubernetes
- Ustanawianie poświadczeń tożsamości federacyjnej
Ważne
Aby kontynuować pracę z tym samouczkiem, musisz ustawić zmienne środowiskowe w sekcji Eksportowanie zmiennych środowiskowych w artykule Wdrażanie i konfigurowanie tożsamości obciążenia. Pamiętaj, aby ustawić zmienną SERVICE_ACCOUNT_NAMESPACE
na kafka
, i wykonać polecenie kubectl create namespace kafka
przed skonfigurowaniem tożsamości obciążenia.
Wdrażanie zaufanej aplikacji przy użyciu kontenera kata-cc i zaświadczania
Poniższe kroki umożliwiają skonfigurowanie kompleksowego szyfrowania komunikatów platformy Kafka przy użyciu kluczy szyfrowania zarządzanych przez moduły zabezpieczeń sprzętowych platformy Azure (mHSM). Klucz jest zwalniany tylko wtedy, gdy użytkownik platformy Kafka działa w kontenerze poufnym za pomocą kontenera aprowizacji wpisu tajnego zaświadczania platformy Azure wprowadzonego do zasobnika.
Ta konfiguracja jest oparta na następujących czterech składnikach:
- Klaster Kafka: prosty klaster kafka wdrożony w przestrzeni nazw platformy Kafka w klastrze.
- Producent platformy Kafka: producent platformy Kafka działający jako zasobnik platformy Kubernetes, który wysyła zaszyfrowane komunikaty skonfigurowane przez użytkownika przy użyciu klucza publicznego do tematu platformy Kafka.
- Użytkownik platformy Kafka: zasobnik klienta platformy Kafka uruchomiony ze środowiskiem uruchomieniowym kata-cc wyposażony w kontener bezpiecznego wydania klucza w celu pobrania klucza prywatnego na potrzeby odszyfrowywania komunikatów platformy Kafka i renderowania komunikatów w internetowym interfejsie użytkownika.
W tej wersji zapoznawczej zalecamy przeprowadzenie testów i oceny, aby utworzyć lub użyć istniejącego zasobu warstwy Premium usługi Azure Key Vault do obsługi przechowywania kluczy w sprzętowym module zabezpieczeń (HSM). Nie zalecamy korzystania z magazynu kluczy produkcyjnych. Jeśli nie masz usługi Azure Key Vault, zobacz Tworzenie magazynu kluczy przy użyciu interfejsu wiersza polecenia platformy Azure.
Udziel utworzonej wcześniej tożsamości zarządzanej oraz twojemu kontu dostępu do magazynu kluczy. Przypisz obie tożsamości role kryptograficznych usługi Key Vault i kryptograficznego użytkownika usługi Key Vault na podstawie ról RBAC platformy Azure.
Uwaga
Tożsamość zarządzana to wartość przypisana do zmiennej
USER_ASSIGNED_IDENTITY_NAME
.Aby dodać przypisania ról, musisz mieć
Microsoft.Authorization/roleAssignments/write
uprawnienia iMicrosoft.Authorization/roleAssignments/delete
, takie jak administrator dostępu do danych usługi Key Vault, administrator dostępu użytkowników lub właściciel.Aby obsługiwać klucze chronione przez moduł HSM, należy użyć jednostki SKU Premium usługi Key Vault.
Uruchom następujące polecenie, aby ustawić zakres:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
Uruchom następujące polecenie, aby przypisać rolę administratora kryptograficznego usługi Key Vault.
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Uruchom następujące polecenie, aby przypisać rolę użytkownika kryptograficznego usługi Key Vault.
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Zainstaluj klaster Kafka w przestrzeni nazw platformy Kafka, uruchamiając następujące polecenie:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
Uruchom następujące polecenie, aby zastosować plik CR klastra
kafka
.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
Przygotuj klucz szyfrowania/odszyfrowywania RSA przy użyciu skryptu powłoki Bash dla obciążenia z usługi GitHub. Zapisz plik jako
setup-key.sh
.Ustaw zmienną
MAA_ENDPOINT
środowiskową przy użyciu nazwy FQDN identyfikatora URI zaświadczenia, uruchamiając następujące polecenie.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
Sprawdź, czy nazwa FQDN identyfikatora URI zaświadczenia ma poprawny format (MAA_ENDPOINT nie powinien zawierać prefiksu "https://"):
echo $MAA_ENDPOINT
Uwaga
Aby skonfigurować zaświadczenie platformy Microsoft Azure, zobacz Szybki start: konfigurowanie zaświadczania platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure.
Skopiuj następujący manifest YAML i zapisz go jako
consumer.yaml
.apiVersion: v1 kind: Pod metadata: name: kafka-golang-consumer namespace: kafka labels: azure.workload.identity/use: "true" app.kubernetes.io/name: kafka-golang-consumer spec: serviceAccountName: workload-identity-sa runtimeClassName: kata-cc-isolation containers: - image: "mcr.microsoft.com/aci/skr:2.7" imagePullPolicy: Always name: skr env: - name: SkrSideCarArgs value: ewogICAgImNlcnRjYWNoZSI6IHsKCQkiZW5kcG9pbnRfdHlwZSI6ICJMb2NhbFRISU0iLAoJCSJlbmRwb2ludCI6ICIxNjkuMjU0LjE2OS4yNTQvbWV0YWRhdGEvVEhJTS9hbWQvY2VydGlmaWNhdGlvbiIKCX0gIAp9 command: - /bin/skr volumeMounts: - mountPath: /opt/confidential-containers/share/kata-containers/reference-info-base64 name: endor-loc - image: "mcr.microsoft.com/acc/samples/kafka/consumer:1.0" imagePullPolicy: Always name: kafka-golang-consumer env: - name: SkrClientKID value: kafka-encryption-demo - name: SkrClientMAAEndpoint value: sharedeus2.eus2.test.attest.azure.net - name: SkrClientAKVEndpoint value: "myKeyVault.vault.azure.net" - name: TOPIC value: kafka-demo-topic command: - /consume ports: - containerPort: 3333 name: kafka-consumer resources: limits: memory: 1Gi cpu: 200m volumes: - name: endor-loc hostPath: path: /opt/confidential-containers/share/kata-containers/reference-info-base64 --- apiVersion: v1 kind: Service metadata: name: consumer namespace: kafka spec: type: LoadBalancer selector: app.kubernetes.io/name: kafka-golang-consumer ports: - protocol: TCP port: 80 targetPort: kafka-consumer
Uwaga
Zaktualizuj wartość zmiennej
SkrClientAKVEndpoint
środowiskowej zasobnika, aby odpowiadała adresowi URL usługi Azure Key Vault, z wyłączeniem wartościhttps://
protokołu . Bieżąca wartość symbolu zastępczego tomyKeyVault.vault.azure.net
. Zaktualizuj wartość zmiennejSkrClientMAAEndpoint
środowiskowej zasobnika przy użyciu wartościMAA_ENDPOINT
. Wartość można znaleźćMAA_ENDPOINT
, uruchamiając polecenieecho $MAA_ENDPOINT
lub polecenieaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-
.Wygeneruj zasady zabezpieczeń dla manifestu YAML odbiorcy platformy Kafka i uzyskaj skrót zasad zabezpieczeń przechowywanych w zmiennej
WORKLOAD_MEASUREMENT
, uruchamiając następujące polecenie:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
Aby wygenerować parę kluczy asymetrycznych RSA (kluczy publicznych i prywatnych), uruchom
setup-key.sh
skrypt przy użyciu następującego polecenia. Wartość powinna być następująca<Azure Key Vault URL>
:<your-unique-keyvault-name>.vault.azure.net
export MANAGED_IDENTITY=${USER_ASSIGNED_CLIENT_ID} bash setup-key.sh "kafka-encryption-demo" <Azure Key Vault URL>
Uwaga
Zmienna
MANAGED_IDENTITY
środowiska jest wymagana przez skryptsetup-key.sh
powłoki bash .Klucz publiczny zostanie zapisany po
kafka-encryption-demo-pub.pem
wykonaniu skryptu powłoki bash.
Ważne
Jeśli wystąpi błąd
ForbiddenByRbac
, może być konieczne odczekanie do 24 godzin, ponieważ usługi zaplecza dla tożsamości zarządzanych utrzymują pamięć podręczną na identyfikator URI zasobu przez maksymalnie 24 godziny. Zobacz też: Rozwiązywanie problemów z kontrolą dostępu opartą na rolach platformy Azure.Aby sprawdzić, czy klucze zostały pomyślnie przekazane do magazynu kluczy, uruchom następujące polecenia:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o table
Skopiuj następujący manifest YAML i zapisz go jako
producer.yaml
.apiVersion: v1 kind: Pod metadata: name: kafka-producer namespace: kafka spec: containers: - image: "mcr.microsoft.com/acc/samples/kafka/producer:1.0" name: kafka-producer command: - /produce env: - name: TOPIC value: kafka-demo-topic - name: MSG value: "Azure Confidential Computing" - name: PUBKEY value: |- -----BEGIN PUBLIC KEY----- MIIBojAN***AE= -----END PUBLIC KEY----- resources: limits: memory: 1Gi cpu: 200m
Uwaga
Zaktualizuj wartość rozpoczynającą się od i kończącą
-----END PUBLIC KEY-----
się-----BEGIN PUBLIC KEY-----
ciągami zawartością, zkafka-encryption-demo-pub.pem
której utworzono w poprzednim kroku.consumer
Wdróż manifesty YAML iproducer
przy użyciu zapisanych wcześniej plików.kubectl apply -f consumer.yaml
kubectl apply -f producer.yaml
Pobierz adres IP usługi internetowej przy użyciu następującego polecenia:
kubectl get svc consumer -n kafka
Skopiuj i wklej zewnętrzny adres IP usługi konsumenta w przeglądarce i obserwuj odszyfrowany komunikat.
Poniższy przykład przypomina dane wyjściowe polecenia:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential Computing
Należy również podjąć próbę uruchomienia konsumenta jako zwykłego zasobnika Kubernetes, usuwając specyfikację
skr container
ikata-cc runtime class
. Ponieważ nie uruchamiasz konsumenta z klasą środowiska uruchomieniowego kata-cc, nie potrzebujesz już zasad.Usuń wszystkie zasady i ponownie obserwuj komunikaty w przeglądarce po ponownym uruchomieniu obciążenia. Komunikaty są wyświetlane jako szyfrowany algorytmem base64, ponieważ nie można pobrać prywatnego klucza szyfrowania. Nie można pobrać klucza, ponieważ użytkownik nie jest już uruchomiony w środowisku poufnym i brakuje go
skr container
, uniemożliwiając odszyfrowywanie komunikatów.
Czyszczenie
Po zakończeniu oceny tej funkcji, aby uniknąć opłat za platformę Azure, wyczyść niepotrzebne zasoby. Jeśli w ramach oceny lub testowania wdrożono nowy klaster, możesz usunąć klaster przy użyciu polecenia az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Jeśli włączono kontenery poufne (wersja zapoznawcza) w istniejącym klastrze, możesz usunąć zasobniki przy użyciu polecenia kubectl delete pod .
kubectl delete pod pod-name
Następne kroki
- Dowiedz się więcej o dedykowanych hostach platformy Azure dla węzłów z klastrem usługi AKS w celu korzystania z izolacji sprzętowej i kontroli nad zdarzeniami konserwacji platformy Azure.
Azure Kubernetes Service