Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 automatycznie wygenerowanych zasad zabezpieczeń. Następnie należy wdrożyć aplikację jako kontener poufny. Aby dowiedzieć się więcej, przeczytaj omówienie poufnych kontenerów AKS.
Ogólnie rzecz biorąc, rozpoczęcie pracy z kontenerami poufnymi usługi AKS obejmuje następujące kroki.
- Wdrażanie lub uaktualnianie klastra usługi AKS przy użyciu interfejsu wiersza polecenia platformy Azure
- Dodaj adnotację do manifestu YAML zasobnika, aby go oznaczyć jako korzystający z poufnych kontenerów.
- Dodaj zasadę zabezpieczeń do manifestu YAML podu
- Wdrażaj aplikację w przetwarzaniu poufnym
Ważne
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 Linux 2.0 platformy Azure został zamrożony w wersji 202512.06.0. Od 31 marca 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, zobacz [Wycofywanie] pul węzłów Azure Linux 2.0 w usłudze AKS.
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 CLI platformy
aks-previewAzure w wersji 0.5.169 lub nowszej.Rozszerzenie Kontenera Poufnego interfejsu wiersza polecenia Azure w wersji 0.3.3 lub nowszej.
confcomjest wymagane do wygenerowania zasad zabezpieczeń.Zarejestruj funkcję w subskrypcji platformy
PreviewAzure.Usługa AKS obsługuje poufne kontenery (wersja zapoznawcza) w wersji 1.25.0 lub nowszej.
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 Microsoft Entra Workload ID, zapoznaj się z omówieniem Microsoft Entra Workload ID 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. 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 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 aks-preview dla Azure CLI
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:
Aby zainstalować rozszerzenie aks-preview, uruchom następujące polecenie:
az extension add --name aks-preview
Uruchom następujące polecenie, aby zaktualizować rozszerzenie do najnowszej wersji:
az extension update --name aks-preview
Zainstaluj rozszerzenie Confcom dla interfejsu wiersza polecenia Azure
Aby zainstalować rozszerzenie confcom, uruchom następujące polecenie:
az extension add --name confcom
Uruchom następujące polecenie, aby zaktualizować rozszerzenie do najnowszej wersji:
az extension update --name confcom
Zarejestruj flagę funkcji KataCcIsolationPreview
Zarejestruj flagę funkcji KataCcIsolationPreview 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
Przy użyciu polecenia az aks create utwórz klaster AKS i 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: dowolny rozmiar maszyny wirtualnej platformy Azure, obsługujący podrzędne maszyny wirtualne chronione przez protokół AMD SEV-SNP. Na przykład Standard_DC8as_cc_v5 maszyny wirtualne.
- --enable-workload-identity: umożliwia utworzenie Identyfikatora obciążenia Microsoft Entra, co pozwala zasobnikom na korzystanie 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.
- --workload-runtime: określ KataCcIsolation, aby włączyć funkcję Poufne Kontenery w puli węzłów.
az aks create --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <1.25.0 and above> --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 wykonane i zwróci informacje o klastrze w formacie JSON.
Gdy klaster jest gotowy, użyj polecenia az aks get-credentials do pobrania poświadczeń klastra.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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ść dla obciążenia w klastrze, jeśli nie jest jeszcze włączona.
Aby włączyć poufne kontenery (wersja zapoznawcza), utwórz pulę węzłów do ich hostowania, używając następującego polecenia.
Dodaj pulę węzłów do klastra usługi AKS, używając komendy 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-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: dowolny rozmiar maszyny wirtualnej platformy Azure, który obsługuje maszyny wirtualne podrzędne chronione przez protokół AMD SEV-SNP, działa. 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 włączyć poufne kontenery (wersja próbna) w klastrze.
az aks update --name myAKSCluster --resource-group myResourceGroupPo kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Gdy klaster jest gotowy, użyj polecenia az aks get-credentials do pobrania poświadczeń klastra.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Konfigurowanie kontenera
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ć 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.
Rozmieść zaufaną aplikację przy użyciu kata-cc i kontenera uwierzytelniającego
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 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 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.
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
Zmienna środowiska
MANAGED_IDENTITYjest wymagana przez skrypt bashsetup-key.sh.Klucz publiczny zostanie zapisany jako
kafka-encryption-demo-pub.pempo 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 utrzymują pamięć podręczną dla każdej tożsamości zarządzanej na podstawie 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 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.
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 Confidential Containers (wersja zapoznawcza) w istniejącym klastrze, możesz usunąć pody przy użyciu 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.