Een AKS-cluster implementeren met vertrouwelijke containers en een standaardbeleid
In dit artikel gebruikt u de Azure CLI om een AKS-cluster (Azure Kubernetes Service) te implementeren en vertrouwelijke containers (preview) te configureren met een standaardbeveiligingsbeleid. Vervolgens implementeert u een toepassing als een vertrouwelijke container. Lees het overzicht van vertrouwelijke AKS-containers voor meer informatie.
Over het algemeen zijn de volgende stappen nodig om aan de slag te gaan met vertrouwelijke AKS-containers.
- Een AKS-cluster implementeren of upgraden met behulp van de Azure CLI
- Een aantekening toevoegen aan uw YAML-manifest voor pods om de pod te markeren als een vertrouwelijke container
- Een beveiligingsbeleid toevoegen aan uw YAML-manifest voor pods
- Afdwingen van het beveiligingsbeleid inschakelen
- Uw toepassing implementeren in Confidential Computing
Vereisten
Azure CLI versie 2.44.1 of hoger. Voer
az --version
deze uit om de versie te vinden en voer deze uitaz upgrade
om de versie te upgraden. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.De
aks-preview
Azure CLI-extensie versie 0.5.169 of hoger.De
confcom
Azure CLI-extensie Confidential Container 0.3.3 of hoger.confcom
is vereist om een beveiligingsbeleid te genereren.Registreer de
Preview
functie in uw Azure-abonnement.AKS ondersteunt Vertrouwelijke containers (preview) op versie 1.25.0 en hoger.
Een workloadidentiteit en een federatieve identiteitsreferentie. Met de identiteitsreferenties van de workload kunnen Kubernetes-toepassingen veilig toegang krijgen tot Azure-resources met een Microsoft Entra-id op basis van geannoteerde serviceaccounts. Als u niet bekend bent met Microsoft Entra Workload-ID, raadpleegt u het Microsoft Entra Workload-ID overzicht en bekijkt u hoe workloadidentiteit werkt met AKS.
De identiteit die u gebruikt om uw cluster te maken, heeft de juiste minimale machtigingen. Zie Toegangs- en identiteitsopties voor Azure Kubernetes Service (AKS) voor meer informatie over toegang en identiteit voor AKS.
Gebruik de Kubernetes-opdrachtregelclient kubectl om een Kubernetes-cluster te beheren. Azure Cloud Shell wordt geleverd met
kubectl
. U kunt kubectl lokaal installeren met behulp van de opdracht az aks install-cli .Vertrouwelijke containers op AKS bieden een open source sidecar-container voor attestation en beveiligde sleutelrelease. De sidecar kan worden geïntegreerd met een KMS (Key Management Service), zoals Azure Key Vault, voor het vrijgeven van een sleutel aan de containergroep nadat de validatie is voltooid. Het implementeren van een door Azure Key Vault beheerde HSM (Hardware Security Module) is optioneel, maar wordt aanbevolen om integriteit en attestation op containerniveau te ondersteunen. Zie Een beheerde HSM inrichten en activeren om beheerde HSM te implementeren.
De Azure CLI-extensie aks-preview installeren
Belangrijk
AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:
Voer de volgende opdracht uit om de aks-preview-extensie te installeren:
az extension add --name aks-preview
Voer de volgende opdracht uit om bij te werken naar de nieuwste versie van de extensie die is uitgebracht:
az extension update --name aks-preview
De Confcom Azure CLI-extensie installeren
Voer de volgende opdracht uit om de confcom-extensie te installeren:
az extension add --name confcom
Voer de volgende opdracht uit om bij te werken naar de nieuwste versie van de extensie die is uitgebracht:
az extension update --name confcom
De kataCcIsolationPreview-functievlag registreren
Registreer de KataCcIsolationPreview
functievlag met behulp van de opdracht az feature register , zoals wordt weergegeven in het volgende voorbeeld:
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven. Controleer de registratiestatus met behulp van de opdracht az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Wanneer de status Geregistreerd is, vernieuwt u de registratie van de Resourceprovider Microsoft.ContainerService met behulp van de opdracht az provider register:
az provider register --namespace "Microsoft.ContainerService"
Een nieuw cluster implementeren
Maak een AKS-cluster met behulp van de opdracht az aks create en geef de volgende parameters op:
- --os-sku: AzureLinux. Alleen de Besturingssysteem-sku van Azure Linux ondersteunt deze functie in deze preview-versie.
- --node-vm-size: elke Azure-VM-grootte die een vm van de tweede generatie is en ondersteuning biedt voor geneste virtualisatie werkt. Bijvoorbeeld Standard_DC8as_cc_v5 VM's.
- --enable-workload-identity: maakt het mogelijk om een Microsoft Entra Workload-ID pods in staat te stellen een Kubernetes-identiteit te gebruiken.
- --enable-oidc-issuer: hiermee schakelt u OIDC-verlener (OpenID Connect) in. Hiermee kan een Microsoft Entra-id of een ander identiteits- en toegangsbeheerplatform van de cloudprovider de mogelijkheid krijgen om de openbare ondertekeningssleutels van de API-server te detecteren.
In het volgende voorbeeld wordt het cluster met de naam myAKSCluster bijgewerkt en wordt één systeemknooppuntgroep gemaakt in 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
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling. Het cluster dat in de vorige stap is gemaakt, heeft één knooppuntgroep. In de volgende stap voegen we een tweede knooppuntgroep toe aan het cluster.
Wanneer het cluster klaar is, haalt u de clusterreferenties op met behulp van de opdracht az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Voeg een gebruikersknooppuntgroep toe aan myAKSCluster met twee knooppunten in nodepool2 in myResourceGroup met behulp van de opdracht az aks nodepool add. Geef de volgende parameters op:
- --workload-runtime: Geef KataCcIsolation op om de functie Vertrouwelijke containers in te schakelen in de knooppuntgroep. Met deze parameter voldoen deze andere parameters aan de volgende vereisten. Anders mislukt de opdracht en rapporteert deze een probleem met de bijbehorende parameters.
- --os-sku: AzureLinux. Alleen de Besturingssysteem-sku van Azure Linux ondersteunt deze functie in deze preview-versie.
- --node-vm-size: elke Azure-VM-grootte die een vm van de tweede generatie is en ondersteuning biedt voor geneste virtualisatie werkt. Bijvoorbeeld Standard_DC8as_cc_v5 VM's.
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
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Implementeren in een bestaand cluster
Als u deze functie wilt gebruiken met een bestaand AKS-cluster, moet aan de volgende vereisten worden voldaan:
- Volg de stappen om de kataCcIsolationPreview-functievlag te registreren.
- Controleer of op het cluster Kubernetes versie 1.25.0 en hoger wordt uitgevoerd.
- Schakel de workloadidentiteit in het cluster in als dit nog niet is gebeurd.
Gebruik de volgende opdracht om Vertrouwelijke containers (preview) in te schakelen door een knooppuntgroep te maken om deze te hosten.
Voeg een knooppuntgroep toe aan uw AKS-cluster met behulp van de opdracht az aks nodepool add . Geef de volgende parameters op:
- --resource-group: Voer de naam in van een bestaande resourcegroep waarin u het AKS-cluster wilt maken.
- --clusternaam: Voer een unieke naam in voor het AKS-cluster, zoals myAKSCluster.
- --name: Voer een unieke naam in voor uw clusterknooppuntgroep, zoals nodepool2.
- --workload-runtime: Geef KataCcIsolation op om de functie in te schakelen in de knooppuntgroep. Naast de
--workload-runtime
parameter voldoen deze andere parameters aan de volgende vereisten. Anders mislukt de opdracht en rapporteert deze een probleem met de bijbehorende parameters. - --os-sku: AzureLinux. Alleen de Besturingssysteem-sku van Azure Linux ondersteunt deze functie in deze preview-versie.
- --node-vm-size: elke Azure-VM-grootte die een vm van de tweede generatie is en ondersteuning biedt voor geneste virtualisatie werkt. Bijvoorbeeld Standard_DC8as_cc_v5 VM's.
In het volgende voorbeeld wordt een gebruikersknooppuntgroep toegevoegd aan myAKSCluster met twee knooppunten in nodepool2 in de 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
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Voer de opdracht az aks update uit om Confidential Containers (preview) in te schakelen op het cluster.
az aks update --name myAKSCluster --resource-group myResourceGroup
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Wanneer het cluster klaar is, haalt u de clusterreferenties op met behulp van de opdracht az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Container configureren
Voordat u de toegang tot De Azure Key Vault en het geheim configureert en een toepassing implementeert als een vertrouwelijke container, moet u de configuratie van de workloadidentiteit voltooien.
Als u de workloadidentiteit wilt configureren, moet u de volgende stappen uitvoeren die worden beschreven in het artikel Workloadidentiteit implementeren en configureren :
- De URL van de OIDC-verlener ophalen
- Een beheerde identiteit maken
- Kubernetes-serviceaccount maken
- Federatieve identiteitsreferenties instellen
Belangrijk
U moet de omgevingsvariabelen instellen in de sectie Omgevingsvariabelen exporteren in het artikel Workloadidentiteit implementeren en configureren om door te gaan met het voltooien van deze zelfstudie. Vergeet niet om de variabele SERVICE_ACCOUNT_NAMESPACE
in te kafka
stellen op en voer de opdracht kubectl create namespace kafka
uit voordat u de workloadidentiteit configureert.
Een vertrouwde toepassing implementeren met kata-cc en attestation-container
Met de volgende stappen configureert u end-to-end-versleuteling voor Kafka-berichten met behulp van versleutelingssleutels die worden beheerd door Azure Managed Hardware Security Modules (mHSM). De sleutel wordt alleen vrijgegeven wanneer de Kafka-consument wordt uitgevoerd in een vertrouwelijke container met een Azure Attestation-geheime inrichtingscontainer die is geïnjecteerd in de pod.
Deze configuratie is gebaseerd op de volgende vier onderdelen:
- Kafka-cluster: een eenvoudig Kafka-cluster dat is geïmplementeerd in de Kafka-naamruimte op het cluster.
- Kafka Producer: een Kafka-producent die wordt uitgevoerd als een vanille Kubernetes-pod waarmee versleutelde door de gebruiker geconfigureerde berichten worden verzonden met behulp van een openbare sleutel naar een Kafka-onderwerp.
- Kafka Consumer: een Kafka-consumentenpod die wordt uitgevoerd met de kata-cc-runtime, uitgerust met een beveiligde sleutelreleasecontainer om de persoonlijke sleutel op te halen voor het ontsleutelen van Kafka-berichten en de berichten weer te geven aan de webgebruikersinterface.
Voor deze preview-versie wordt u aangeraden voor test- en evaluatiedoeleinden om een bestaande Azure Key Vault Premium-laagresource te maken of te gebruiken ter ondersteuning van het opslaan van sleutels in een HSM (Hardware Security Module). Het wordt afgeraden om uw productiesleutelkluis te gebruiken. Als u geen Azure Key Vault hebt, raadpleegt u Een sleutelkluis maken met behulp van de Azure CLI.
Verdeel de beheerde identiteit die u eerder hebt gemaakt en uw account toegang tot de sleutelkluis. Wijs beide identiteiten toe aan de Key Vault Crypto Officer en Key Vault Crypto User Azure RBAC-rollen.
Notitie
De beheerde identiteit is de waarde die u aan de
USER_ASSIGNED_IDENTITY_NAME
variabele toewijst.Als u roltoewijzingen wilt toevoegen, moet u beschikken
Microsoft.Authorization/roleAssignments/write
over enMicrosoft.Authorization/roleAssignments/delete
machtigingen, zoals Key Vault Data Access Administrator, Administrator voor gebruikerstoegang of Eigenaar.U moet de Key Vault Premium-SKU gebruiken om met HSM beveiligde sleutels te ondersteunen.
Voer de volgende opdracht uit om het bereik in te stellen:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
Voer de volgende opdracht uit om de rol Key Vault Crypto Officer toe te wijzen.
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Voer de volgende opdracht uit om de cryptogebruikersrol Key Vault toe te wijzen.
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Installeer het Kafka-cluster in de kafka-naamruimte door de volgende opdracht uit te voeren:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
Voer de volgende opdracht uit om het
kafka
CR-clusterbestand toe te passen.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
Bereid de RSA-versleutelings-/ontsleutelingssleutel voor met behulp van het bash-script voor de workload van GitHub. Sla het bestand op als
setup-key.sh
.Stel de
MAA_ENDPOINT
omgevingsvariabele in met de FQDN-naam van attest-URI door de volgende opdracht uit te voeren.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
Controleer of de FQDN van attest-URI de juiste indeling heeft (de MAA_ENDPOINT mag het voorvoegsel 'https://' niet bevatten):
echo $MAA_ENDPOINT
Notitie
Als u Microsoft Azure Attestation wilt instellen, raadpleegt u de quickstart: Azure Attestation instellen met Azure CLI.
Kopieer het volgende YAML-manifest en sla het op als
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
Notitie
Werk de waarde voor de omgevingsvariabele
SkrClientAKVEndpoint
van de pod bij zodat deze overeenkomt met de URL van uw Azure Key Vault, met uitzondering van de protocolwaardehttps://
. De tijdelijke aanduiding voor de huidige waarde ismyKeyVault.vault.azure.net
. Werk de waarde voor de omgevingsvariabeleSkrClientMAAEndpoint
van de pod bij met de waarde vanMAA_ENDPOINT
. U kunt de waarde vinden vanMAA_ENDPOINT
door de opdrachtecho $MAA_ENDPOINT
of de opdrachtaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-
uit te voeren.Genereer het beveiligingsbeleid voor het YAML-manifest van de Kafka-consument en haal de hash op van het beveiligingsbeleid dat is opgeslagen in de
WORKLOAD_MEASUREMENT
variabele door de volgende opdracht uit te voeren:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
Als u een RSA asymmetrisch sleutelpaar (openbare en persoonlijke sleutels) wilt genereren, voert u het
setup-key.sh
script uit met behulp van de volgende opdracht. De<Azure Key Vault URL>
waarde moet zijn<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>
Notitie
De envionment-variabele
MANAGED_IDENTITY
is vereist door het bash-scriptsetup-key.sh
.De openbare sleutel wordt opgeslagen als
kafka-encryption-demo-pub.pem
na het uitvoeren van het bash-script.
Belangrijk
Als u de fout
ForbiddenByRbac
krijgt, moet u mogelijk maximaal 24 uur wachten, omdat de back-endservices voor beheerde identiteiten gedurende maximaal 24 uur een cache per resource-URI onderhouden. Zie ook: Problemen met Azure RBAC oplossen.Voer de volgende opdrachten uit om te controleren of de sleutels zijn geüpload naar de sleutelkluis:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o table
Kopieer het volgende YAML-manifest en sla het op als
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
Notitie
Werk de waarde bij die begint met en eindigt met
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
tekenreeksen met de inhoud waaruitkafka-encryption-demo-pub.pem
u in de vorige stap hebt gemaakt.Implementeer de
consumer
enproducer
YAML-manifesten met behulp van de bestanden die u eerder hebt opgeslagen.kubectl apply -f consumer.yaml
kubectl apply -f producer.yaml
Haal het IP-adres van de webservice op met behulp van de volgende opdracht:
kubectl get svc consumer -n kafka
Kopieer en plak het externe IP-adres van de consumentenservice in uw browser en bekijk het ontsleutelde bericht.
Het volgende voorbeeld lijkt op de uitvoer van de opdracht:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential Computing
U moet ook proberen om de consument als een gewone Kubernetes-pod uit te voeren door de
skr container
enkata-cc runtime class
specificatie te verwijderen. Omdat u de consument niet uitvoert met kata-cc-runtimeklasse, hebt u het beleid niet meer nodig.Verwijder het hele beleid en bekijk de berichten opnieuw in de browser nadat u de workload opnieuw hebt geïmplementeerd. Berichten worden weergegeven als met base64 gecodeerde coderingstekst omdat de persoonlijke versleutelingssleutel niet kan worden opgehaald. De sleutel kan niet worden opgehaald omdat de consument niet meer wordt uitgevoerd in een vertrouwelijke omgeving en de
skr container
sleutel ontbreekt, waardoor de ontsleuteling van berichten wordt voorkomen.
Opschonen
Wanneer u klaar bent met het evalueren van deze functie, moet u uw onnodige resources opschonen om Azure-kosten te voorkomen. Als u een nieuw cluster hebt geïmplementeerd als onderdeel van uw evaluatie of test, kunt u het cluster verwijderen met behulp van de opdracht az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Als u Vertrouwelijke containers (preview) hebt ingeschakeld op een bestaand cluster, kunt u de pod(s) verwijderen met behulp van de opdracht kubectl delete pod .
kubectl delete pod pod-name
Volgende stappen
- Meer informatie over Azure Dedicated-hosts voor knooppunten met uw AKS-cluster voor het gebruik van hardware-isolatie en controle over onderhoudsgebeurtenissen van het Azure-platform.
Azure Kubernetes Service