Megosztás a következőn keresztül:


AKS-fürt üzembe helyezése bizalmas tárolókkal és alapértelmezett szabályzattal

Ebben a cikkben az Azure CLI használatával üzembe helyez egy Azure Kubernetes Service-fürtöt (AKS), és konfigurálja a bizalmas tárolókat (előzetes verzió) egy alapértelmezett biztonsági szabályzattal. Ezután egy alkalmazást bizalmas tárolóként kell üzembe helyeznie. További információkért olvassa el az AKS Bizalmas tárolók áttekintését.

Az AKS Bizalmas tárolók használatának első lépései általában az alábbi lépéseket foglalják magukban.

  • AKS-fürt üzembe helyezése vagy frissítése az Azure CLI használatával
  • Jegyzet hozzáadása a pod YAML-jegyzékéhez, amely a podot bizalmas tárolóként futtatottként jelöli meg
  • Biztonsági szabályzat hozzáadása a pod YAML-jegyzékéhez
  • A biztonsági szabályzat kényszerítésének engedélyezése
  • Az alkalmazás üzembe helyezése bizalmas számítástechnikában

Előfeltételek

  • Az Azure CLI 2.44.1-es vagy újabb verziója. Futtassa az --version a verziót, és futtassa az upgrade a verzió frissítéséhez. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.

  • Az aks-preview Azure CLI-bővítmény 0.5.169-es vagy újabb verziója.

  • A confcom Confidential Container Azure CLI 0.3.3-s vagy újabb bővítménye. confcombiztonsági szabályzat létrehozásához szükséges.

  • Regisztrálja a Preview funkciót az Azure-előfizetésében.

  • Az AKS támogatja a bizalmas tárolókat (előzetes verzió) az 1.25.0-s és újabb verziókon.

  • Számítási feladat identitása és összevont identitás hitelesítő adatai. A számítási feladatok identitásának hitelesítő adatai lehetővé teszik, hogy a Kubernetes-alkalmazások biztonságosan hozzáférjenek az Azure-erőforrásokhoz egy Microsoft Entra-azonosítóval, jegyzetekkel ellátott szolgáltatásfiókok alapján. Ha nem ismeri a Microsoft Entra Számítási feladat ID, tekintse át a Microsoft Entra Számítási feladat ID áttekintését, és tekintse át, hogyan működik a Számítási feladatok identitása az AKS-vel.

  • A fürt létrehozásához használt identitás rendelkezik a megfelelő minimális engedélyekkel. Az AKS-hez való hozzáféréssel és identitással kapcsolatos további információkért lásd az Azure Kubernetes Service (AKS) hozzáférési és identitásbeállításait.

  • Kubernetes-fürt kezeléséhez használja a Kubernetes parancssori ügyfélalkalmazás kubectl-ét. Az Azure Cloud Shell a .kubectl A kubectl helyi telepítéséhez használja az az aks install-cli parancsot.

  • Az AKS bizalmas tárolói oldalkocsis nyílt forráskód tárolót biztosítanak az igazoláshoz és a kulcsok biztonságos kiadásához. A sidecar integrálható egy kulcskezelő szolgáltatás (például az Azure Key Vaulttal), hogy az ellenőrzés befejezése után kiadjon egy kulcsot a tárolócsoportnak. Az Azure Key Vault felügyelt HSM (hardveres biztonsági modul) üzembe helyezése nem kötelező, de ajánlott a tárolószintű integritás és az igazolás támogatására. Lásd: Felügyelt HSM kiépítése és aktiválása a felügyelt HSM üzembe helyezéséhez.

Az aks-preview Azure CLI-bővítmény telepítése

Fontos

Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióit részben az ügyfélszolgálat fedezi a legjobb munkamennyiség alapján. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

Az aks-preview bővítmény telepítéséhez futtassa a következő parancsot:

az extension add --name aks-preview

Futtassa a következő parancsot a bővítmény legújabb verziójára való frissítéshez:

az extension update --name aks-preview

A confcom Azure CLI-bővítmény telepítése

A confcom bővítmény telepítéséhez futtassa a következő parancsot:

az extension add --name confcom

Futtassa a következő parancsot a bővítmény legújabb verziójára való frissítéshez:

az extension update --name confcom

A KataCcIsolationPreview funkciójelző regisztrálása

Regisztrálja a KataCcIsolationPreview funkciójelzőt az az feature register paranccsal, ahogyan az az alábbi példában látható:

az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"

Néhány percig tart, amíg az állapot megjelenik a Regisztrált állapotban. Ellenőrizze a regisztrációs állapotot az az feature show paranccsal:

az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"

Ha az állapot a Regisztrált állapotot tükrözi, frissítse a Microsoft.ContainerService erőforrás-szolgáltató regisztrációját az az provider register paranccsal:

az provider register --namespace "Microsoft.ContainerService"

Új fürt üzembe helyezése

  1. Hozzon létre egy AKS-fürtöt az az aks create paranccsal, és adja meg a következő paramétereket:

    • --os-sku: AzureLinux. Ebben az előzetes kiadásban csak az Azure Linux operációsrendszer-termékváltozat támogatja ezt a funkciót.
    • --node-vm-size: Minden Olyan Azure-beli virtuálisgép-méret, amely 2. generációs virtuális gép, és támogatja a beágyazott virtualizálási műveket. Például Standard_DC8as_cc_v5 virtuális gépeket.
    • --enable-workload-identity: Lehetővé teszi egy Microsoft Entra Számítási feladat ID létrehozását, amely lehetővé teszi a podok számára a Kubernetes-identitás használatát.
    • --enable-oidc-issuer: OpenID Connect (OIDC) kiállító engedélyezése. Lehetővé teszi a Microsoft Entra-azonosító vagy más felhőszolgáltatói identitás- és hozzáférés-kezelési platform számára az API-kiszolgáló nyilvános aláíró kulcsainak felderítését.

    Az alábbi példa frissíti a myAKSCluster nevű fürtöt, és egyetlen rendszercsomópont-készletet hoz létre a myResourceGroupban:

    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
    

    Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről. Az előző lépésben létrehozott fürtnek egyetlen csomópontkészlete van. A következő lépésben hozzáadunk egy második csomópontkészletet a fürthöz.

  2. Ha a fürt készen áll, kérje le a fürt hitelesítő adatait az az aks get-credentials paranccsal.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Adjon hozzá egy felhasználói csomópontkészletet a myAKSClusterhez két csomóponttal a nodepool2-ben a myResourceGroupban az az aks nodepool add paranccsal. Adja meg a következő paramétereket:

    • --számítási feladat-futtatókörnyezet: Adja meg a KataCcIsolationt a bizalmas tárolók funkció engedélyezéséhez a csomópontkészleten. Ezzel a paraméterrel a többi paraméternek meg kell felelnie az alábbi követelményeknek. Ellenkező esetben a parancs meghiúsul, és a megfelelő paraméter(ek)sel kapcsolatos problémát jelez.
    • --os-sku: AzureLinux. Ebben az előzetes kiadásban csak az Azure Linux operációsrendszer-termékváltozat támogatja ezt a funkciót.
    • --node-vm-size: Minden Olyan Azure-beli virtuálisgép-méret, amely 2. generációs virtuális gép, és támogatja a beágyazott virtualizálási műveket. Például Standard_DC8as_cc_v5 virtuális gépeket.
    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
    

Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.

Üzembe helyezés meglévő fürtön

Ha ezt a funkciót egy meglévő AKS-fürttel szeretné használni, a következő követelményeknek kell megfelelnie:

A bizalmas tárolók (előzetes verzió) engedélyezéséhez hozzon létre egy csomópontkészletet a üzemeltetéséhez.

  1. Adjon hozzá egy csomópontkészletet az AKS-fürthöz az az aks nodepool add paranccsal. Adja meg a következő paramétereket:

    • --resource-group: Adja meg egy meglévő erőforráscsoport nevét az AKS-fürt létrehozásához.
    • --cluster-name: Adjon meg egy egyedi nevet az AKS-fürtnek, például a myAKSClusternek.
    • --name: Adjon meg egy egyedi nevet a fürtök csomópontkészletének, például a nodepool2-nek.
    • --számítási feladat-futtatókörnyezet: Adja meg a KataCcIsolationt a funkció csomópontkészleten való engedélyezéséhez. A paraméter mellett ezeknek az --workload-runtime egyéb paramétereknek is meg kell felelniük a következő követelményeknek. Ellenkező esetben a parancs meghiúsul, és a megfelelő paraméter(ek)sel kapcsolatos problémát jelez.
    • --os-sku: AzureLinux. Ebben az előzetes kiadásban csak az Azure Linux operációsrendszer-termékváltozat támogatja ezt a funkciót.
    • --node-vm-size: Minden Olyan Azure-beli virtuálisgép-méret, amely 2. generációs virtuális gép, és támogatja a beágyazott virtualizálási műveket. Például Standard_DC8as_cc_v5 virtuális gépeket.

    Az alábbi példa egy felhasználói csomópontkészletet ad hozzá a myAKSClusterhez két csomóponttal a nodepool2-ben a myResourceGroupban:

    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
    

    Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.

  2. Futtassa az az aks update parancsot a bizalmas tárolók (előzetes verzió) fürtbeli engedélyezéséhez.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    

    Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.

  3. Ha a fürt készen áll, kérje le a fürt hitelesítő adatait az az aks get-credentials paranccsal.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Tároló konfigurálása

Mielőtt konfigurálja az Azure Key Vaulthoz és a titkos kódhoz való hozzáférést, és egy alkalmazást bizalmas tárolóként helyez üzembe, be kell fejeznie a számítási feladat identitásának konfigurációját.

A számítási feladat identitásának konfigurálásához hajtsa végre a számítási feladatok identitásának üzembe helyezéséről és konfigurálására vonatkozó cikkben leírt alábbi lépéseket:

  • Az OIDC-kiállító URL-címének lekérése
  • Felügyelt identitás létrehozása
  • Kubernetes-szolgáltatásfiók létrehozása
  • Összevont identitás hitelesítő adatainak létrehozása

Fontos

Az oktatóanyag folytatásához be kell állítania a környezeti változók exportálása című szakasz környezeti változók exportálása című szakaszát, és konfigurálnia kell a számítási feladat identitásáról szóló cikket. A számítási feladat identitásának konfigurálása előtt ne felejtse el beállítani a változót SERVICE_ACCOUNT_NAMESPACE kafka, és hajtsa végre a parancsot kubectl create namespace kafka .

Megbízható alkalmazás üzembe helyezése kata-cc és igazolási tároló használatával

Az alábbi lépések az Azure Managed Hardware Security Modules (mHSM) által kezelt titkosítási kulcsok használatával konfigurálják a Teljes körű titkosítást a Kafka-üzenetekhez. A kulcs csak akkor lesz felszabadítva, ha a Kafka-fogyasztó egy Bizalmas tárolón belül fut egy Azure-igazolási titkos kulcs kiépítési tárolójával, amely a podba van injektálva.

Ez a konfiguráció a következő négy összetevőn alapul:

  • Kafka-fürt: A fürt Kafka-névterében üzembe helyezett egyszerű Kafka-fürt.
  • Kafka Producer: Vanilla Kubernetes podként futó Kafka-gyártó, amely titkosított, felhasználó által konfigurált üzeneteket küld nyilvános kulccsal egy Kafka-témakörbe.
  • Kafka Consumer: Egy Kafka fogyasztói pod, amely a kata-cc futtatókörnyezettel fut, és egy biztonságos kulcskioldó tárolóval rendelkezik a Kafka-üzenetek visszafejtéséhez szükséges titkos kulcs lekéréséhez és az üzenetek webes felhasználói felületre való megjelenítéséhez.

Ebben az előzetes kiadásban tesztelési és kiértékelési célokra javasoljuk, hogy hozzon létre vagy használjon egy meglévő Prémium szintű Azure Key Vault-erőforrást a kulcsok hardveres biztonsági modulban (HSM) való tárolásának támogatására. Nem javasoljuk az éles kulcstartó használatát. Ha nem rendelkezik Azure Key Vaulttal, olvassa el a Kulcstartó létrehozása az Azure CLI használatával című témakört.

  1. Adjon hozzáférést a korábban létrehozott felügyelt identitáshoz és a fiókjához a kulcstartóhoz. Mindkét identitáshoz hozzárendelheti a Key Vault crypto officer és a Key Vault crypto user Azure RBAC szerepkört.

    Feljegyzés

    Futtassa a következő parancsot a hatókör beállításához:

    AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
    

    Futtassa a következő parancsot a Key Vault crypto officer szerepkör hozzárendeléséhez.

    az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
    

    Futtassa a következő parancsot a Key Vault crypto user szerepkör hozzárendeléséhez.

    az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
    
  2. Telepítse a Kafka-fürtöt a kafka névtérbe az alábbi parancs futtatásával:

    kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
    
  3. Futtassa a következő parancsot a fürt CR-fájljának kafka alkalmazásához.

    kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
    
  4. Készítse elő az RSA Encryption/Decryption kulcsot a GitHubról származó számítási feladat bash-szkriptjének használatával. Mentse a fájlt setup-key.sh néven.

  5. Állítsa be a MAA_ENDPOINT környezeti változót az Attest URI teljes tartománynevével az alábbi parancs futtatásával.

    export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
    

    Ellenőrizze, hogy az Attest URI teljes tartományneve megfelelő formátumban van-e (a MAA_ENDPOINT nem tartalmazhatja a "https://" előtagot):

    echo $MAA_ENDPOINT
    

    Feljegyzés

    A Microsoft Azure-igazolás beállításához tekintse meg a rövid útmutatót: Azure-igazolás beállítása az Azure CLI-vel.

  6. Másolja ki a következő YAML-jegyzékfájlt, és mentse a következőként 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
    

    Feljegyzés

    Frissítse a pod környezeti változójának SkrClientAKVEndpoint értékét úgy, hogy az megfeleljen az Azure Key Vault URL-címének, kivéve a protokoll értékét https://. Az aktuális érték helyőrző értéke .myKeyVault.vault.azure.net Frissítse a pod környezeti változójának SkrClientMAAEndpoint értékét a következő értékre MAA_ENDPOINT: . A parancs vagy a parancs echo $MAA_ENDPOINT az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-futtatásával megtalálhatja MAA_ENDPOINT annak értékét.

  7. Hozza létre a kafka fogyasztói YAML-jegyzék biztonsági szabályzatát, és szerezze be a változóban WORKLOAD_MEASUREMENT tárolt biztonsági szabályzat kivonatát az alábbi parancs futtatásával:

    export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
    
  8. RSA aszimmetrikus kulcspár (nyilvános és titkos kulcsok) létrehozásához futtassa a setup-key.sh szkriptet az alábbi paranccsal. Az <Azure Key Vault URL> értéknek <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>
    

    Feljegyzés

    • A envionment változót MANAGED_IDENTITY a bash szkript setup-key.shmegköveteli.

    • A nyilvános kulcs a bash-szkript végrehajtása után lesz mentve kafka-encryption-demo-pub.pem .

    Fontos

    Ha a hibaüzenet ForbiddenByRbacjelenik meg, előfordulhat, hogy akár 24 órát is várnia kell, mivel a felügyelt identitások háttérszolgáltatásai erőforrás-URI-nként legfeljebb 24 óráig tartanak fenn gyorsítótárat. Lásd még: Az Azure RBAC hibaelhárítása.

  9. A kulcsok sikeres feltöltésének ellenőrzéséhez futtassa a következő parancsokat:

    az account set --subscription <Subscription ID>
    az keyvault key list --vault-name <KeyVault Name> -o table
    
  10. Másolja ki a következő YAML-jegyzékfájlt, és mentse a következőként 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
    

    Feljegyzés

    Frissítse a sztringekkel -----BEGIN PUBLIC KEY----- -----END PUBLIC KEY----- kezdődő és végződő értéket az előző lépésben létrehozott tartalommal kafka-encryption-demo-pub.pem .

  11. Helyezze üzembe a és producer a consumer YAML-jegyzékeket a korábban mentett fájlok használatával.

    kubectl apply -f consumer.yaml
    
    kubectl apply -f producer.yaml
    
  12. Kérje le a webszolgáltatás IP-címét a következő paranccsal:

    kubectl get svc consumer -n kafka
    
  13. Másolja és illessze be a fogyasztói szolgáltatás külső IP-címét a böngészőbe, és figyelje meg a visszafejtett üzenetet.

    Az alábbi példa a parancs kimenetéhez hasonlít:

    Welcome to Confidential Containers on AKS!
    Encrypted Kafka Message:
    Msg 1: Azure Confidential Computing
    
  14. Meg kell kísérelnie a fogyasztó normál Kubernetes-podként való futtatását is a specifikáció és kata-cc runtime class a skr container specifikáció eltávolításával. Mivel nem kata-cc futtatókörnyezeti osztálysal futtatja a fogyasztót, már nincs szüksége a szabályzatra.

  15. Távolítsa el a teljes szabályzatot, és figyelje meg újra az üzeneteket a böngészőben a számítási feladat ismételt üzembe helyezése után. Az üzenetek base64 kódolású titkosítási szövegként jelennek meg, mert a titkos titkosítási kulcs nem kérhető le. A kulcs nem kérhető le, mert a fogyasztó már nem bizalmas környezetben fut, és a skr container hiányzó adatok megakadályozzák az üzenetek visszafejtését.

Felesleges tartalmak törlése

Ha végzett a funkció kiértékelésével, az Azure-díjak elkerülése érdekében törölje a felesleges erőforrásokat. Ha az értékelés vagy a tesztelés részeként üzembe helyezett egy új fürtöt, az az aks delete paranccsal törölheti a fürtöt.

az aks delete --resource-group myResourceGroup --name myAKSCluster

Ha engedélyezte a bizalmas tárolók (előzetes verzió) használatát egy meglévő fürtön, a kubectl delete pod parancsával eltávolíthatja a pod(ok)t.

kubectl delete pod pod-name

Következő lépések

  • További információ az AKS-fürttel rendelkező csomópontok azure-beli dedikált gazdagépeiről az Azure platformkarbantartási események hardverelkülönítésének és vezérlésének használatára.