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ťte az 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

  1. 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ů.

  2. 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
    
  3. 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:

Pomocí následujícího příkazu povolte důvěrné kontejnery (Preview) vytvořením fondu uzlů, který ho bude hostovat.

  1. 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.

  2. 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.

  3. 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 kafkaa 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.

  1. 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 a Microsoft.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
    
  2. 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
    
  3. 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
    
  4. Připravte šifrovací/dešifrovací klíč RSA pomocí skriptu Bash pro úlohu z GitHubu. Uložte soubor jako setup-key.sh.

  5. 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.

  6. 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 hodnoty https://protokolu. Hodnota zástupného symbolu aktuální hodnoty je myKeyVault.vault.azure.net. Aktualizujte hodnotu proměnné SkrClientMAAEndpoint prostředí podu hodnotou MAA_ENDPOINT. Hodnotu MAA_ENDPOINT můžete najít spuštěním příkazu echo $MAA_ENDPOINT nebo příkazu az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-.

  7. 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)
    
  8. 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 skriptem setup-key.shBash .

    • 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.

  9. 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
    
  10. 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, ze kafka-encryption-demo-pub.pem kterého byl vytvořen v předchozím kroku.

  11. 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
    
  12. Pomocí následujícího příkazu získejte IP adresu webové služby:

    kubectl get svc consumer -n kafka
    
  13. 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
    
  14. Měli byste se také pokusit uživatele spustit jako běžný pod Kubernetes odebráním skr container a kata-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.

  15. 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.