Distribuera ett AKS-kluster med konfidentiella containrar och en standardprincip
I den här artikeln använder du Azure CLI för att distribuera ett AKS-kluster (Azure Kubernetes Service) och konfigurera konfidentiella containrar (förhandsversion) med en standardsäkerhetsprincip. Sedan distribuerar du ett program som en konfidentiell container. Mer information finns i översikten över KONFIDENTIELLA AKS-containrar.
I allmänhet innebär det följande steg att komma igång med KONFIDENTIELLA AKS-containrar.
- Distribuera eller uppgradera ett AKS-kluster med hjälp av Azure CLI
- Lägg till en anteckning i yaml-poddmanifestet för att markera podden som en konfidentiell container
- Lägga till en säkerhetsprincip i yaml-poddmanifestet
- Aktivera tillämpning av säkerhetsprincipen
- Distribuera ditt program i konfidentiell databehandling
Förutsättningar
Azure CLI version 2.44.1 eller senare. Kör
az --version
för att hitta versionen och köraz upgrade
för att uppgradera versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.Azure CLI-tillägget
aks-preview
version 0.5.169 eller senare.Azure
confcom
CLI-tillägget för konfidentiell container 0.3.3 eller senare.confcom
krävs för att generera en säkerhetsprincip.Registrera funktionen
Preview
i din Azure-prenumeration.AKS stöder konfidentiella containrar (förhandsversion) på version 1.25.0 och senare.
En arbetsbelastningsidentitet och en federerad identitetsautentiseringsuppgift. Autentiseringsuppgifterna för arbetsbelastningsidentitet ger Kubernetes-program åtkomst till Azure-resurser på ett säkert sätt med ett Microsoft Entra-ID baserat på kommenterade tjänstkonton. Om du inte är bekant med Microsoft Entra-arbetsbelastnings-ID kan du läsa översikten över Microsoft Entra-arbetsbelastnings-ID och granska hur arbetsbelastningsidentitet fungerar med AKS.
Den identitet som du använder för att skapa klustret har lämpliga minimibehörigheter. Mer information om åtkomst och identitet för AKS finns i Åtkomst- och identitetsalternativ för Azure Kubernetes Service (AKS).
Om du vill hantera ett Kubernetes-kluster använder du Kubernetes-kommandoradsklienten kubectl. Azure Cloud Shell levereras med
kubectl
. Du kan installera kubectl lokalt med kommandot az aks install-cli .Konfidentiella containrar på AKS tillhandahåller en öppen källkod container för attestering och säker nyckelutgivning. Sidovagnen integreras med en nyckelhanteringstjänst (KMS) (KMS), till exempel Azure Key Vault, för att frigöra en nyckel till containergruppen när valideringen har slutförts. Det är valfritt att distribuera en Hanterad HSM för Azure Key Vault (maskinvarusäkerhetsmodul) men rekommenderas för att stödja integritet och attestering på containernivå. Se Etablera och aktivera en hanterad HSM för att distribuera Managed HSM.
Installera Azure CLI-tillägget aks-preview
Viktigt!
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Kör följande kommando för att installera aks-preview-tillägget:
az extension add --name aks-preview
Kör följande kommando för att uppdatera till den senaste versionen av tillägget som släpptes:
az extension update --name aks-preview
Installera Azure CLI-tillägget för confcom
Kör följande kommando för att installera confcom-tillägget:
az extension add --name confcom
Kör följande kommando för att uppdatera till den senaste versionen av tillägget som släpptes:
az extension update --name confcom
Registrera funktionsflaggan KataCcIsolationPreview
Registrera funktionsflaggan KataCcIsolationPreview
med kommandot az feature register , som du ser i följande exempel:
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Det tar några minuter för statusen att visa Registrerad. Kontrollera registreringsstatusen med kommandot az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
När statusen visar Registrerad uppdaterar du registreringen av Resursprovidern Microsoft.ContainerService med hjälp av kommandot az provider register :
az provider register --namespace "Microsoft.ContainerService"
Distribuera ett nytt kluster
Skapa ett AKS-kluster med kommandot az aks create och ange följande parametrar:
- --os-sku: AzureLinux. Endast Azure Linux os-sku stöder den här funktionen i den här förhandsversionen.
- --node-vm-size: Alla Virtuella Azure-datorer som är en virtuell dator i generation 2 och som har stöd för kapslad virtualisering fungerar. Till exempel Standard_DC8as_cc_v5 virtuella datorer.
- --enable-workload-identity: Gör det möjligt att skapa ett Microsoft Entra-arbetsbelastnings-ID som gör att poddar kan använda en Kubernetes-identitet.
- --enable-oidc-issuer: Aktiverar OpenID Connect-utfärdare (OIDC). Det gör att ett Microsoft Entra-ID eller annan plattform för identitets- och åtkomsthantering för molnleverantörer kan identifiera API-serverns offentliga signeringsnycklar.
I följande exempel uppdateras klustret med namnet myAKSCluster och en enda systemnodpool skapas i 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
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret. Klustret som skapades i föregående steg har en enda nodpool. I nästa steg lägger vi till en andra nodpool i klustret.
När klustret är klart hämtar du autentiseringsuppgifterna för klustret med kommandot az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Lägg till en användarnodpool i myAKSCluster med två noder i nodepool2 i myResourceGroup med kommandot az aks nodepool add. Ange följande parametrar:
- --workload-runtime: Ange KataCcIsolation för att aktivera funktionen Konfidentiella containrar i nodpoolen. Med den här parametern ska dessa andra parametrar uppfylla följande krav. Annars misslyckas kommandot och rapporterar ett problem med motsvarande parametrar.
- --os-sku: AzureLinux. Endast Azure Linux os-sku stöder den här funktionen i den här förhandsversionen.
- --node-vm-size: Alla Virtuella Azure-datorer som är en virtuell dator i generation 2 och som har stöd för kapslad virtualisering fungerar. Till exempel Standard_DC8as_cc_v5 virtuella datorer.
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
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.
Distribuera till ett befintligt kluster
Om du vill använda den här funktionen med ett befintligt AKS-kluster måste följande krav uppfyllas:
- Följ stegen för att registrera funktionsflaggan KataCcIsolationPreview .
- Kontrollera att klustret kör Kubernetes version 1.25.0 och senare.
- Aktivera arbetsbelastningsidentitet i klustret om det inte redan är det.
Använd följande kommando för att aktivera konfidentiella containrar (förhandsversion) genom att skapa en nodpool som värd för den.
Lägg till en nodpool i AKS-klustret med kommandot az aks nodepool add . Ange följande parametrar:
- --resource-group: Ange namnet på en befintlig resursgrupp för att skapa AKS-klustret i.
- --cluster-name: Ange ett unikt namn för AKS-klustret, till exempel myAKSCluster.
- --name: Ange ett unikt namn för klusternodpoolen, till exempel nodepool2.
- --workload-runtime: Ange KataCcIsolation för att aktivera funktionen i nodpoolen. Tillsammans med parametern
--workload-runtime
ska dessa andra parametrar uppfylla följande krav. Annars misslyckas kommandot och rapporterar ett problem med motsvarande parametrar. - --os-sku: AzureLinux. Endast Azure Linux os-sku stöder den här funktionen i den här förhandsversionen.
- --node-vm-size: Alla Virtuella Azure-datorer som är en virtuell dator i generation 2 och som har stöd för kapslad virtualisering fungerar. Till exempel Standard_DC8as_cc_v5 virtuella datorer.
I följande exempel läggs en användarnodpool till i myAKSCluster med två noder i nodepool2 i 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
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.
Kör kommandot az aks update för att aktivera konfidentiella containrar (förhandsversion) i klustret.
az aks update --name myAKSCluster --resource-group myResourceGroup
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.
När klustret är klart hämtar du autentiseringsuppgifterna för klustret med kommandot az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Konfigurera container
Innan du konfigurerar åtkomst till Azure Key Vault och hemligheten och distribuerar ett program som en konfidentiell container måste du slutföra konfigurationen av arbetsbelastningsidentiteten.
Utför följande steg som beskrivs i artikeln Distribuera och konfigurera arbetsbelastningsidentitet för att konfigurera arbetsbelastningsidentiteten:
- Hämta url:en för OIDC-utfärdaren
- Skapa en hanterad identitet
- Skapa Kubernetes-tjänstkonto
- Upprätta federerade identitetsautentiseringsuppgifter
Viktigt!
Du måste ange miljövariablerna från avsnittet Exportera miljövariabler i artikeln Distribuera och konfigurera arbetsbelastningsidentitet för att fortsätta slutföra den här självstudien. Kom ihåg att ange variabeln SERVICE_ACCOUNT_NAMESPACE
till kafka
och köra kommandot kubectl create namespace kafka
innan du konfigurerar arbetsbelastningsidentiteten.
Distribuera ett betrott program med kata-cc och attesteringscontainer
Följande steg konfigurerar kryptering från slutpunkt till slutpunkt för Kafka-meddelanden med hjälp av krypteringsnycklar som hanteras av Azure Managed Hardware Security Modules (mHSM). Nyckeln släpps bara när Kafka-konsumenten körs i en konfidentiell container med en Azure-attesteringscontainer för hemlig etablering som matas in i podden.
Den här konfigurationen baseras på följande fyra komponenter:
- Kafka-kluster: Ett enkelt Kafka-kluster som distribueras i Kafka-namnområdet i klustret.
- Kafka-producent: En Kafka-producent som körs som en vanilj-Kubernetes-podd som skickar krypterade användarkonfigurerade meddelanden med hjälp av en offentlig nyckel till ett Kafka-ämne.
- Kafka Consumer: En Kafka-konsumentpodd som körs med kata-cc-körningen, utrustad med en container för säker nyckelfrisättning för att hämta den privata nyckeln för dekryptering av Kafka-meddelanden och återge meddelandena till webbgränssnittet.
För den här förhandsversionen rekommenderar vi att du i test- och utvärderingssyfte antingen skapar eller använder en befintlig Azure Key Vault Premium-nivåresurs för att lagra nycklar i en maskinvarusäkerhetsmodul (HSM). Vi rekommenderar inte att du använder ditt nyckelvalv för produktion. Om du inte har något Azure Key Vault läser du Skapa ett nyckelvalv med Azure CLI.
Ge den hanterade identitet som du skapade tidigare och ditt konto åtkomst till nyckelvalvet. Tilldela båda identiteterna Key Vault Crypto Officer - och Key Vault Crypto User Azure RBAC-roller.
Kommentar
Den hanterade identiteten är det värde som du tilldelar variabeln
USER_ASSIGNED_IDENTITY_NAME
.Om du vill lägga till rolltilldelningar måste du ha
Microsoft.Authorization/roleAssignments/write
ochMicrosoft.Authorization/roleAssignments/delete
behörigheter, till exempel Key Vault Data Access Administrator, User Access Administrator eller Owner.Du måste använda Key Vault Premium SKU för att stödja HSM-skyddade nycklar.
Kör följande kommando för att ange omfånget:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
Kör följande kommando för att tilldela rollen Key Vault Crypto Officer .
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Kör följande kommando för att tilldela key vault crypto-användarrollen.
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Installera Kafka-klustret i kafka-namnområdet genom att köra följande kommando:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
Kör följande kommando för att tillämpa klustrets
kafka
CR-fil.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
Förbered RSA-krypterings-/dekrypteringsnyckeln med bash-skriptet för arbetsbelastningen från GitHub. Spara filen som
setup-key.sh
.MAA_ENDPOINT
Ange miljövariabeln med FQDN för attest-URI genom att köra följande kommando.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
Kontrollera om FQDN för attest-URI:n är i rätt format (MAA_ENDPOINT bör inte innehålla prefixet "https://"):
echo $MAA_ENDPOINT
Kommentar
Information om hur du konfigurerar Microsoft Azure Attestation finns i Snabbstart: Konfigurera Azure Attestation med Azure CLI.
Kopiera följande YAML-manifest och spara det som
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
Kommentar
Uppdatera värdet för poddmiljövariabeln
SkrClientAKVEndpoint
så att det matchar URL:en för ditt Azure Key Vault, exklusive protokollvärdethttps://
. Det aktuella värdets platshållarvärde ärmyKeyVault.vault.azure.net
. Uppdatera värdet för poddmiljövariabelnSkrClientMAAEndpoint
med värdetMAA_ENDPOINT
. Du hittar värdetMAA_ENDPOINT
för genom att köra kommandotecho $MAA_ENDPOINT
eller kommandotaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-
.Generera säkerhetsprincipen för Kafka-konsument-YAML-manifestet och hämta hashen för säkerhetsprincipen som lagras i variabeln
WORKLOAD_MEASUREMENT
genom att köra följande kommando:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
Om du vill generera ett Asymmetriskt RSA-nyckelpar (offentliga och privata nycklar) kör du skriptet
setup-key.sh
med hjälp av följande kommando. Värdet<Azure Key Vault URL>
ska vara<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>
Kommentar
Envionment-variabeln
MANAGED_IDENTITY
krävs av bash-skriptetsetup-key.sh
.Den offentliga nyckeln sparas som
kafka-encryption-demo-pub.pem
när bash-skriptet har körts.
Viktigt!
Om du får felet
ForbiddenByRbac
kan du behöva vänta upp till 24 timmar eftersom serverdelstjänsterna för hanterade identiteter har en cache per resurs-URI i upp till 24 timmar. Se även: Felsöka Azure RBAC.Kontrollera att nycklarna har laddats upp till nyckelvalvet genom att köra följande kommandon:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o table
Kopiera följande YAML-manifest och spara det som
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
Kommentar
Uppdatera värdet som börjar med
-----BEGIN PUBLIC KEY-----
och slutar med-----END PUBLIC KEY-----
strängar med innehålletkafka-encryption-demo-pub.pem
som skapades i föregående steg.Distribuera YAML-manifesten
consumer
ochproducer
med de filer som du sparade tidigare.kubectl apply -f consumer.yaml
kubectl apply -f producer.yaml
Hämta IP-adressen för webbtjänsten med hjälp av följande kommando:
kubectl get svc consumer -n kafka
Kopiera och klistra in konsumenttjänstens externa IP-adress i webbläsaren och observera det dekrypterade meddelandet.
Följande exempel liknar kommandots utdata:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential Computing
Du bör också försöka köra konsumenten som en vanlig Kubernetes-podd genom att ta bort specifikationen
skr container
ochkata-cc runtime class
. Eftersom du inte kör konsumenten med kata-cc runtime-klassen behöver du inte längre principen.Ta bort hela principen och observera meddelandena igen i webbläsaren när du har distribuerat om arbetsbelastningen. Meddelanden visas som base64-kodad chiffertext eftersom den privata krypteringsnyckeln inte kan hämtas. Det går inte att hämta nyckeln eftersom konsumenten inte längre körs i en konfidentiell miljö och
skr container
saknas, vilket förhindrar dekryptering av meddelanden.
Rensa
När du är klar med utvärderingen av den här funktionen rensar du dina onödiga resurser för att undvika Azure-avgifter. Om du har distribuerat ett nytt kluster som en del av utvärderingen eller testningen kan du ta bort klustret med kommandot az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Om du har aktiverat Konfidentiella containrar (förhandsversion) i ett befintligt kluster kan du ta bort poddarna med kommandot kubectl delete pod .
kubectl delete pod pod-name
Nästa steg
- Läs mer om Azure Dedicated-värdar för noder med ditt AKS-kluster för att använda maskinvaruisolering och kontroll över azure-plattformsunderhållshändelser.
Azure Kubernetes Service