Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule użyjesz Azure CLI do wdrożenia klastra Azure Kubernetes Service (AKS) i skonfigurowania kontenerów poufnych (wersja zapoznawcza) z automatycznie wygenerowanymi zasadami zabezpieczeń. Następnie należy wdrożyć aplikację jako kontener poufny. Aby dowiedzieć się więcej, przeczytaj omówienie kontenerów poufnych usługi AKS.
Ogólnie rzecz biorąc, rozpoczęcie pracy z kontenerami poufnymi w usłudze AKS obejmuje następujące kroki.
- Wdróż lub uaktualnij klaster usługi AKS przy użyciu Azure CLI.
- Dodaj adnotację do manifestu YAML Poda, aby oznaczyć go jako używający kontenerów poufnych.
- Dodaj zasady zabezpieczeń do manifestu YAML zasobnika.
- Wdróż aplikację w przetwarzaniu poufnym.
Ważne
Począwszy od 30 listopada 2025 r., usługa Azure Kubernetes Service (AKS) nie obsługuje już ani nie zapewnia aktualizacji zabezpieczeń dla systemu Azure Linux 2.0. Obraz węzła systemu Azure Linux 2.0 jest zamrożony w wydaniu202512.06.0. Od 31 października 2026 r. obrazy węzłów zostaną usunięte i nie będzie można skalować pul węzłów. Przeprowadź migrację do obsługiwanej wersji systemu Linux platformy Azure, uaktualniając pule węzłów do obsługiwanej wersji rozwiązania Kubernetes lub migrując do systemu osSku AzureLinux3. Aby uzyskać więcej informacji, zapoznaj się z zgłoszeniem dotyczącym wycofania na GitHubie i ogłoszeniem o wycofaniu aktualizacji platformy Azure. Aby być na bieżąco z ogłoszeniami i aktualizacjami, śledź notatki o wydaniu AKS.
Wymagania wstępne
- Najnowsza wersja interfejsu wiersza polecenia platformy Azure. 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. - Najnowsza wersja rozszerzenia Azure CLI.
- Najnowsza wersja rozszerzenia Azure CLI
confcomConfidential Container.confcomjest wymagane do wygenerowania zasad zabezpieczeń. - Tożsamość obciążenia obliczeniowego i poświadczenie federacyjnej tożsamości. 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 Workload Identity 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 wiersza polecenia Kubernetes kubectl. Usługa Azure Cloud Shell jest dostarczana z usługą
kubectl. Można zainstalowaćkubectllokalnie za pomocą poleceniaaz aks install-cli. - Poufne kontenery w usłudze AKS zapewniają kontener typu open source sidecar na potrzeby uwierzytelniania 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 Przygotuj i aktywuj zarządzany HSM, aby wdrożyć zarządzany HSM.
Zainstaluj rozszerzenie Azure CLI aks-preview
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi, po uprzednim wyrażeniu zgody na ich użycie. 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 wsparciem technicznym na zasadzie najlepszych starań. 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:
Uruchom następujące polecenie, aby zainstalować
aks-previewrozszerzenie:az extension add --name aks-previewUruchom następujące polecenie, aby zaktualizować rozszerzenie do najnowszej wersji:
az extension update --name aks-preview
Zainstaluj rozszerzenie Azure CLI confcom
Uruchom następujące polecenie, aby zainstalować
confcomrozszerzenie:az extension add --name confcomUruchom następujące polecenie, aby zaktualizować rozszerzenie do najnowszej wersji:
az extension update --name confcom
Zarejestruj flagę funkcji KataCcIsolationPreview
Wykonaj polecenie
az feature register, aby zarejestrować flagę funkcjiKataCcIsolationPreview, jak pokazano w poniższym przykładzie:az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"Poczekaj kilka minut na wyświetlenie stanu Zarejestrowane. Uruchom polecenie ,
az feature showaby sprawdzić stan rejestracji:az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"Gdy stan to Zarejestrowano, uruchom polecenie
az provider register, aby odświeżyć rejestrację dostawcy zasobów Microsoft.ContainerService:az provider register --namespace "Microsoft.ContainerService"
Tworzenie klastra z włączonymi kontenerami poufnymi
Utwórz klaster usługi AKS za pomocą polecenia
az aks create. Określ następujące parametry:- --os-sku: AzureLinux. Tylko os-sku systemu Linux na platformie Azure obsługuje tę funkcję w tej wersji zapoznawczej.
- --node-vm-size: odpowiedni będzie każdy rozmiar maszyny wirtualnej platformy Azure, który obsługuje wirtualizację zagnieżdżoną dla podrzędnych maszyn wirtualnych chronionych przez AMD SEV-SNP. Na przykład Standard_DC8as_cc_v5 maszyny wirtualne.
- --enable-workload-identity: Włącza tworzenie identyfikatora Tożsamość obciążeń Microsoft Entra, aby zasobniki mogły korzystać z tożsamości Kubernetes.
- --enable-oidc-issuer: włącza wystawcę OpenID Connect (OIDC). Umożliwia platformie Microsoft Entra ID lub innej platformie zarządzania tożsamością i dostępem dostawcy chmury wykrywanie publicznych kluczy używanych do podpisywania przez serwer interfejsu API.
- --workload-runtime: Ustaw KataCcIsolation, aby włączyć funkcję kontenerów poufnych w puli węzłów.
az aks create --resource-group myResourceGroup --name myAKSCluster --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolation --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keysPo kilku minutach polecenie zostanie zakończone i zwróci informacje w formacie JSON dotyczące klastra.
Gdy klaster będzie gotowy, pobierz poświadczenia klastra za pomocą polecenia
az aks get-credentials.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Włącz kontenery poufne 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ć
KataCcIsolationPreviewflagę funkcji. - Włącz tożsamość dla obciążenia w klastrze, jeśli nie jest jeszcze włączona.
Dodaj pulę węzłów z włączoną obsługą poufnych kontenerów
Użyj następującego polecenia, aby włączyć kontenery poufne (wersja zapoznawcza), tworząc pulę węzłów do ich obsługi.
Dodaj pulę węzłów do klastra AKS za pomocą 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 klastra, na przykład nodepool2.
-
--workload-runtime: określ KataCcIsolation, aby włączyć funkcję w puli węzłów. Wraz z parametrem
--workload-runtimete 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. Tylko os-sku systemu Linux na platformie Azure obsługuje tę funkcję w tej wersji zapoznawczej.
- --node-vm-size: odpowiedni będzie każdy rozmiar maszyny wirtualnej platformy Azure, który obsługuje wirtualizację zagnieżdżoną dla podrzędnych maszyn wirtualnych chronionych przez AMD SEV-SNP. Na przykład Standard_DC8as_cc_v5 maszyny wirtualne.
Poniższy przykład dodaje pulę węzłów użytkownika do myAKSCluster z dwoma węzłami w nodepool2 w myResourceGroup:
az aks nodepool add --resource-group myResourceGroup --name nodepool2 --cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolationPo kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Uruchom polecenie
az aks update, aby zsynchronizować konfigurację klastra po dodaniu puli węzłów poufnych kontenerów.az aks update --name myAKSCluster --resource-group myResourceGroupPo kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Gdy klaster będzie gotowy, pobierz poświadczenia klastra za pomocą polecenia
az aks get-credentials.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Wdrażanie i konfigurowanie tożsamości obciążenia
Przed skonfigurowaniem dostępu do usługi Azure Key Vault i tajemnicy oraz wdrożeniem aplikacji jako kontenera Poufny, 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:
- Pobierz adres 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ć ten samouczek, ustaw zmienne środowiskowe w sekcji Eksportowanie zmiennych środowiskowych w artykule Wdrażanie i konfigurowanie tożsamości obciążenia . Ustaw zmienną SERVICE_ACCOUNT_NAMESPACE na kafka, a następnie uruchom polecenie kubectl create namespace kafka przed skonfigurowaniem tożsamości obciążenia.
Rozmieść zaufaną aplikację przy użyciu kata-cc i kontenera uwierzytelniającego
Poniższe kroki umożliwiają skonfigurowanie szyfrowania end-to-end dla komunikatów Kafka przy użyciu kluczy szyfrowania zarządzanych przez Azure Managed Hardware Security Modules (Managed HSM). Klucz jest udostępniany tylko wtedy, gdy konsument Kafka działa w ramach Confidential Container, z kontenerem aprowizacji wpisów tajnych poświadczania Azure wstrzykniętym do poda.
Ta konfiguracja jest oparta na następujących trzech składnikach:
- Klaster Kafka: prosty klaster Kafka wdrożony w przestrzeni nazw Kafka w ramach klastra.
- 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, który działa ze środowiskiem uruchomieniowym kata-cc, pobiera klucz prywatny z kontenera bezpiecznego wydania klucza w celu odszyfrowania komunikatów platformy Kafka i renderuje komunikaty 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.
Przyznaj utworzonej wcześniej tożsamości zarządzanej oraz twojemu kontu dostęp do magazynu kluczy. Przypisz obie tożsamościom role Key Vault Crypto Officer i Key Vault Crypto User w ramach 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ć uprawnienia
Microsoft.Authorization/roleAssignments/writeiMicrosoft.Authorization/roleAssignments/delete, takie jak Administrator dostępu do danych 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_SCOPEUruchom 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_SCOPEZainstaluj klaster Kafka w przestrzeni nazw platformy Kafka, uruchamiając następujące polecenie:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafkaUruchom następujące polecenie, aby zastosować plik CR klastra
kafka.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafkaPrzygotuj klucz szyfrowania/odszyfrowywania RSA przy użyciu skryptu powłoki Bash dla obciążenia zadań z 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 pełna nazwa domeny (FQDN) dla URI zaświadczenia ma poprawny format (MAA_ENDPOINT nie powinien zawierać prefiksu "https://"):
echo $MAA_ENDPOINTUwaga
Aby skonfigurować zaświadczanie Microsoft Azure, zobacz Szybki przewodnik: konfigurowanie zaświadczania Microsoft Azure za pomocą Azure CLI.
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-consumerUwaga
Zaktualizuj wartość zmiennej środowiskowej
SkrClientAKVEndpointdla pod, aby odpowiadała adresowi URL usługi Azure Key Vault, pomijając wartośćhttps://protokołu. Bieżąca wartość symbolu zastępczego tomyKeyVault.vault.azure.net. Zaktualizuj wartość zmiennej środowiskowej zasobnikaSkrClientMAAEndpointna wartośćMAA_ENDPOINT. Wartość można znaleźćMAA_ENDPOINT, uruchamiając polecenieecho $MAA_ENDPOINTlub 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.shskrypt przy użyciu następującego polecenia. Wartość powinna być następująca<Azure Key Vault URL>:<your-unique-keyvault-name>.vault.azure.netexport MANAGED_IDENTITY=${USER_ASSIGNED_CLIENT_ID} bash setup-key.sh "kafka-encryption-demo" <Azure Key Vault URL>Uwaga
Skrypt powłoki bash
setup-key.shwymaga zmiennej środowiskowejMANAGED_IDENTITY.Klucz publiczny zostanie zapisany jako
kafka-encryption-demo-pub.pempo wykonaniu skryptu powłoki bash.
Ważne
Jeśli wystąpi błąd
ForbiddenByRbac, poczekaj do 24 godzin. Usługi zaplecza buforują dane dla tożsamości zarządzanych osobno dla każdego identyfikatora URI zasobu przez okres do 24 godzin. Aby uzyskać więcej informacji, zobacz sekcję Rozwiązywanie problemów z Azure RBAC.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 tableSkopiuj 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: 200mUwaga
Zaktualizuj wartość, która rozpoczyna się od ciągu
-----BEGIN PUBLIC KEY-----i kończy ciągiem-----END PUBLIC KEY-----, korzystając z zawartości zkafka-encryption-demo-pub.pem, która została utworzona w poprzednim kroku.consumerWdróż manifesty YAML iproducerprzy użyciu zapisanych wcześniej plików.kubectl apply -f consumer.yamlkubectl apply -f producer.yamlPobierz adres IP usługi internetowej przy użyciu następującego polecenia:
kubectl get svc consumer -n kafkaSkopiuj 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 ComputingNależy również podjąć próbę uruchomienia konsumenta jako zwykłego zasobnika Kubernetes, usuwając specyfikację
skr containerikata-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 szyfrogramy zakodowane w base64, ponieważ nie można pobrać prywatnego klucza szyfrowania. Nie można pobrać klucza, ponieważ konsument nie działa już w środowisku poufnym, a
skr containerjest brakującym elementem, co uniemożliwia odszyfrowywanie komunikatów.
Uprzątnij zasoby
Po zakończeniu oceny tej funkcji wyczyść niepotrzebne zasoby, aby uniknąć Azure opłat. Jeśli nowy klaster został wdrożony w ramach oceny lub testowania, możesz usunąć klaster przy użyciu az aks delete polecenia .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Jeśli w istniejącym klastrze włączono kontenery poufne (wersja zapoznawcza), możesz usunąć zasobniki za pomocą polecenia kubectl delete pod.
kubectl delete pod <pod-name>
Następne kroki
Dowiedz się więcej o Azure Dedicated hosts dla węzłów z klastrem AKS, aby korzystać z izolacji sprzętowej i kontroli nad zdarzeniami konserwacyjnymi platformy Azure.