Nasazení clusteru AKS s důvěrnými kontejnery a výchozími zásadami
V tomto článku pomocí Azure CLI nasadíte cluster Azure Kubernetes Service (AKS) a nakonfigurujete důvěrné kontejnery (Preview) pomocí výchozích zásad zabezpečení. Pak nasadíte aplikaci jako kontejner Důvěrné. Další informace najdete v přehledu důvěrných kontejnerů AKS.
Obecně platí, že začínáme s důvěrnými kontejnery AKS zahrnuje následující kroky.
- Nasazení nebo upgrade clusteru AKS pomocí Azure CLI
- Přidání poznámky do manifestu YAML podu a označení podu jako důvěrného kontejneru
- Přidání zásad zabezpečení do manifestu YAML podu
- Povolení vynucování zásad zabezpečení
- Nasazení aplikace v důvěrném výpočetním prostředí
Požadavky
Azure CLI verze 2.44.1 nebo novější. Spuštěním příkazu vyhledejte
az --version
verzi a spusťteaz upgrade
upgrade verze. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.Rozšíření
aks-preview
Azure CLI verze 0.5.169 nebo novější.Rozšíření
confcom
Azure CLI pro důvěrné kontejnery 0.3.3 nebo novějšíconfcom
k vygenerování zásad zabezpečení se vyžaduje.Preview
Zaregistrujte funkci ve svém předplatném Azure.AKS podporuje důvěrné kontejnery (Preview) ve verzi 1.25.0 a vyšší.
Identita úlohy a přihlašovací údaje federované identity. Přihlašovací údaje identity úloh umožňují aplikacím Kubernetes zabezpečený přístup k prostředkům Azure pomocí ID Microsoft Entra založeného na účtech služby s poznámkami. Pokud ID úloh Microsoft Entra neznáte, projděte si přehled ID úloh Microsoft Entra a podívejte se, jak identita úloh funguje s AKS.
Identita, kterou používáte k vytvoření clusteru, má odpovídající minimální oprávnění. Další informace o přístupu a identitě pro AKS najdete v tématu Možnosti přístupu a identit pro Službu Azure Kubernetes Service (AKS).
Ke správě clusteru Kubernetes použijte klient příkazového řádku Kubernetes kubectl. Součástí azure Cloud Shellu je
kubectl
. Kubectl můžete nainstalovat místně pomocí příkazu az aks install-cli .Důvěrné kontejnery v AKS poskytují opensourcový kontejner sajdkáře pro ověření identity a bezpečné vydání klíče. Sajdkár se integruje s Služba správy klíčů (KMS), jako je Azure Key Vault, pro uvolnění klíče do skupiny kontejnerů po dokončení ověření. Nasazení spravovaného HSM služby Azure Key Vault (modul hardwarového zabezpečení) je volitelné, ale doporučuje se podporovat integritu a ověření identity na úrovni kontejneru. Viz Zřízení a aktivace spravovaného HSM pro nasazení spravovaného HSM.
Instalace rozšíření Azure CLI aks-Preview
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Pokud chcete nainstalovat rozšíření aks-preview, spusťte následující příkaz:
az extension add --name aks-preview
Spuštěním následujícího příkazu aktualizujte nejnovější verzi vydaného rozšíření:
az extension update --name aks-preview
Instalace rozšíření Azure CLI pro confcom
Pokud chcete nainstalovat rozšíření confcom, spusťte následující příkaz:
az extension add --name confcom
Spuštěním následujícího příkazu aktualizujte nejnovější verzi vydaného rozšíření:
az extension update --name confcom
Registrace příznaku funkce KataCcIsolationPreview
KataCcIsolationPreview
Příznak funkce zaregistrujte pomocí příkazu az feature register, jak je znázorněno v následujícím příkladu:
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Zobrazení stavu Zaregistrované trvá několik minut. Pomocí příkazu az feature show ověřte stav registrace:
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Pokud se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí příkazu az provider register :
az provider register --namespace "Microsoft.ContainerService"
Nasazení nového clusteru
Vytvořte cluster AKS pomocí příkazu az aks create a zadejte následující parametry:
- --os-sku: AzureLinux. Tuto funkci v této verzi Preview podporuje pouze skladová položka Azure Linuxu.
- --node-vm-size: Jakákoli velikost virtuálního počítače Azure, která je virtuální počítač 2. generace a podporuje vnořené virtualizace, funguje. Například Standard_DC8as_cc_v5 virtuální počítače.
- --enable-workload-identity: Umožňuje vytvořit ID úloh Microsoft Entra umožňující pody používat identitu Kubernetes.
- --enable-oidc-issuer: Povolí vystavitele OpenID Connect (OIDC). Umožňuje microsoft Entra ID nebo jinou platformu správy přístupu a identity poskytovatele cloudu zjistit veřejné podpisové klíče serveru rozhraní API.
Následující příklad aktualizuje cluster s názvem myAKSCluster a vytvoří jeden fond systémových uzlů v 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 několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON. Cluster vytvořený v předchozím kroku má jeden fond uzlů. V dalším kroku přidáme do clusteru druhý fond uzlů.
Jakmile je cluster připravený, získejte přihlašovací údaje clusteru pomocí příkazu az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Přidejte fond uzlů uživatele do myAKSCluster se dvěma uzly v nodepool2 v myResourceGroup pomocí příkazu az aks nodepool add . Zadejte následující parametry:
- --workload-runtime: Zadejte KataCcIsolation , aby se ve fondu uzlů povolila funkce Důvěrné kontejnery. S tímto parametrem musí tyto další parametry splňovat následující požadavky. Jinak příkaz selže a nahlásí problém s odpovídajícími parametry.
- --os-sku: AzureLinux. Tuto funkci v této verzi Preview podporuje pouze skladová položka Azure Linuxu.
- --node-vm-size: Jakákoli velikost virtuálního počítače Azure, která je virtuální počítač 2. generace a podporuje vnořené virtualizace, funguje. Například Standard_DC8as_cc_v5 virtuální počítače.
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 několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Nasazení do existujícího clusteru
Pokud chcete tuto funkci použít se stávajícím clusterem AKS, musí být splněny následující požadavky:
- Podle pokynů zaregistrujte příznak funkce KataCcIsolationPreview .
- Ověřte, že cluster používá Kubernetes verze 1.25.0 a vyšší.
- Pokud ještě není, povolte identitu úloh v clusteru.
Pomocí následujícího příkazu povolte důvěrné kontejnery (Preview) vytvořením fondu uzlů, který ho bude hostovat.
Přidejte do clusteru AKS fond uzlů pomocí příkazu az aks nodepool add . Zadejte následující parametry:
- --resource-group: Zadejte název existující skupiny prostředků, ve které chcete vytvořit cluster AKS.
- --cluster-name: Zadejte jedinečný název clusteru AKS, například myAKSCluster.
- --name: Zadejte jedinečný název fondu uzlů clusterů, například nodepool2.
- --workload-runtime: Zadejte KataCcIsolation , aby se funkce povolila ve fondu uzlů. Spolu s parametrem
--workload-runtime
musí tyto další parametry splňovat následující požadavky. Jinak příkaz selže a nahlásí problém s odpovídajícími parametry. - --os-sku: AzureLinux. Tuto funkci v této verzi Preview podporuje pouze skladová položka Azure Linuxu.
- --node-vm-size: Jakákoli velikost virtuálního počítače Azure, která je virtuální počítač 2. generace a podporuje vnořené virtualizace, funguje. Například Standard_DC8as_cc_v5 virtuální počítače.
Následující příklad přidá fond uzlů uživatele do myAKSCluster se dvěma uzly v nodepool2 v 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 několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Spuštěním příkazu az aks update povolte důvěrné kontejnery (Preview) v clusteru.
az aks update --name myAKSCluster --resource-group myResourceGroup
Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Jakmile je cluster připravený, získejte přihlašovací údaje clusteru pomocí příkazu az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Konfigurace kontejneru
Než nakonfigurujete přístup ke službě Azure Key Vault a tajnému kódu a nasadíte aplikaci jako důvěrný kontejner, musíte dokončit konfiguraci identity úlohy.
Pokud chcete nakonfigurovat identitu úlohy, proveďte následující kroky popsané v článku Nasazení a konfigurace identity úlohy:
- Načtení adresy URL vystavitele OIDC
- Vytvoření spravované identity
- Vytvoření účtu služby Kubernetes
- Vytvoření přihlašovacích údajů federované identity
Důležité
Abyste mohli pokračovat v tomto kurzu, musíte nastavit proměnné prostředí z části Export proměnných prostředí v článku Nasazení a konfigurace identity úlohy. Nezapomeňte nastavit proměnnou SERVICE_ACCOUNT_NAMESPACE
na kafka
a před konfigurací identity úlohy spustit příkaz kubectl create namespace kafka
.
Nasazení důvěryhodné aplikace s využitím kata-cc a kontejneru ověření identity
Následující kroky nakonfigurují komplexní šifrování zpráv Kafka pomocí šifrovacích klíčů spravovaných moduly mHSM (Managed Hardware Security Modules ). Klíč se uvolní jenom v okamžiku, kdy se příjemce Kafka spustí v rámci důvěrného kontejneru s kontejnerem zřizování tajných kódů ověření identity Azure vloženým do podu.
Tato konfigurace je založená na následujících čtyřech komponentách:
- Cluster Kafka: Jednoduchý cluster Kafka nasazený v oboru názvů Kafka v clusteru.
- Producent Kafka: Producent Kafka spuštěný jako pod Kubernetes vanilla, který odesílá šifrované uživatelem nakonfigurované zprávy pomocí veřejného klíče do tématu Kafka.
- Kafka Consumer: Pod příjemce Kafka spuštěný s modulem runtime kata-cc vybavený kontejnerem verze zabezpečeného klíče pro načtení privátního klíče pro dešifrování zpráv Kafka a vykreslení zpráv do webového uživatelského rozhraní.
Pro tuto verzi Preview doporučujeme pro účely testování a vyhodnocení vytvořit nebo použít existující prostředek úrovně Premium služby Azure Key Vault k podpoře ukládání klíčů v modulu hardwarového zabezpečení (HSM). Nedoporučujeme používat váš trezor produkčních klíčů. Pokud nemáte Azure Key Vault, přečtěte si téma Vytvoření trezoru klíčů pomocí Azure CLI.
Udělte spravované identitě, kterou jste vytvořili dříve, a vašemu účtu přístup k trezoru klíčů. Přiřaďte kryptografický důstojník služby Key Vault i role Azure RBAC pro kryptografické služby Key Vault.
Poznámka:
Spravovaná identita je hodnota, kterou přiřadíte proměnné
USER_ASSIGNED_IDENTITY_NAME
.Pokud chcete přidat přiřazení rolí, musíte mít
Microsoft.Authorization/roleAssignments/write
aMicrosoft.Authorization/roleAssignments/delete
mít oprávnění, jako je správce přístupu k datům služby Key Vault, správce uživatelských přístupů nebo vlastník.Pro podporu klíčů chráněných HSM musíte použít skladovou položku Služby Key Vault Premium.
Spuštěním následujícího příkazu nastavte obor:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
Spuštěním následujícího příkazu přiřaďte roli kryptografického důstojníka služby Key Vault.
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Spuštěním následujícího příkazu přiřaďte roli uživatele kryptografických služeb Key Vault.
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Spuštěním následujícího příkazu nainstalujte cluster Kafka do oboru názvů Kafka:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
Spuštěním následujícího příkazu použijte soubor CR clusteru
kafka
.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
Připravte šifrovací/dešifrovací klíč RSA pomocí skriptu Bash pro úlohu z GitHubu. Uložte soubor jako
setup-key.sh
.Nastavte proměnnou
MAA_ENDPOINT
prostředí pomocí plně kvalifikovaného názvu domény identifikátoru URI attest spuštěním následujícího příkazu.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
Zkontrolujte, jestli je plně kvalifikovaný název domény identifikátoru URI ověření ve správném formátu (MAA_ENDPOINT nesmí obsahovat předponu "https://"):
echo $MAA_ENDPOINT
Poznámka:
Pokud chcete nastavit ověření identity Microsoft Azure, přečtěte si článek Rychlý start: Nastavení ověření identity Azure pomocí Azure CLI.
Zkopírujte následující manifest YAML a uložte ho 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
Poznámka:
Aktualizujte hodnotu proměnné
SkrClientAKVEndpoint
prostředí podu tak, aby odpovídala adrese URL služby Azure Key Vault s výjimkou hodnotyhttps://
protokolu. Hodnota zástupného symbolu aktuální hodnoty jemyKeyVault.vault.azure.net
. Aktualizujte hodnotu proměnnéSkrClientMAAEndpoint
prostředí podu hodnotouMAA_ENDPOINT
. HodnotuMAA_ENDPOINT
můžete najít spuštěním příkazuecho $MAA_ENDPOINT
nebo příkazuaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-
.Vygenerujte zásady zabezpečení pro manifest YAML příjemce Kafka a získejte hodnotu hash zásad zabezpečení uložených v
WORKLOAD_MEASUREMENT
proměnné spuštěním následujícího příkazu:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
Pokud chcete vygenerovat dvojici asymetrických klíčů RSA (veřejné a privátní klíče), spusťte
setup-key.sh
skript pomocí následujícího příkazu. Hodnota<Azure Key Vault URL>
by měla být<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>
Poznámka:
Proměnná
MANAGED_IDENTITY
prostředí je vyžadována skriptemsetup-key.sh
Bash .Veřejný klíč se uloží jako
kafka-encryption-demo-pub.pem
po spuštění skriptu Bash.
Důležité
Pokud se zobrazí chyba
ForbiddenByRbac
, možná budete muset počkat až 24 hodin, protože back-endové služby pro spravované identity udržují mezipaměť na identifikátor URI prostředku po dobu až 24 hodin. Viz také: Řešení potíží s Azure RBAC.Pokud chcete ověřit úspěšné nahrání klíčů do trezoru klíčů, spusťte následující příkazy:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o table
Zkopírujte následující manifest YAML a uložte ho 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
Poznámka:
Aktualizujte hodnotu, která začíná
-----BEGIN PUBLIC KEY-----
řetězcem-----END PUBLIC KEY-----
a končí řetězcem s obsahem, zekafka-encryption-demo-pub.pem
kterého byl vytvořen v předchozím kroku.consumer
producer
Nasaďte manifesty YAML pomocí souborů, které jste si uložili dříve.kubectl apply -f consumer.yaml
kubectl apply -f producer.yaml
Pomocí následujícího příkazu získejte IP adresu webové služby:
kubectl get svc consumer -n kafka
Zkopírujte a vložte externí IP adresu služby příjemce do prohlížeče a sledujte dešifrovanou zprávu.
Následující příklad se podobá výstupu příkazu:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential Computing
Měli byste se také pokusit uživatele spustit jako běžný pod Kubernetes odebráním
skr container
akata-cc runtime class
specifikací. Vzhledem k tomu, že nepoužíváte příjemce s třídou modulu runtime kata-cc, už zásadu nepotřebujete.Po opětovném nasazení úlohy odeberte celou zásadu a sledujte zprávy v prohlížeči. Zprávy se zobrazují jako šifrovací text kódování base64, protože privátní šifrovací klíč nelze načíst. Klíč nelze načíst, protože uživatel už není spuštěný v důvěrném prostředí a chybí a
skr container
brání dešifrování zpráv.
Vyčištění
Až dokončíte vyhodnocení této funkce, abyste se vyhnuli poplatkům za Azure, vyčistěte nepotřebné prostředky. Pokud jste v rámci testování nebo testování nasadili nový cluster, můžete cluster odstranit pomocí příkazu az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Pokud jste povolili důvěrné kontejnery (Preview) v existujícím clusteru, můžete odebrat pody pomocí příkazu kubectl delete pod .
kubectl delete pod pod-name
Další kroky
- Přečtěte si další informace o vyhrazených hostitelích Azure pro uzly s clusterem AKS, abyste mohli používat izolaci hardwaru a kontrolu nad událostmi údržby platformy Azure.
Azure Kubernetes Service