Ajánlott eljárások a fürtök biztonságához és frissítéséhez az Azure Kubernetes Service-ben (AKS)

Az Azure Kubernetes Service (AKS) fürtöinek kezelése során a számítási feladatok és az adatok biztonsága kulcsfontosságú szempont. Ha több-bérlős fürtöket futtat logikai elkülönítéssel, különösen az erőforrások és a számítási feladatok hozzáférését kell biztonságossá tenni. Minimalizálja a támadás kockázatát a Kubernetes és a csomópont operációs rendszer legújabb biztonsági frissítéseinek alkalmazásával.

Ez a cikk az AKS-fürt biztonságossá tételét ismerteti. Az alábbiak végrehajtásának módját ismerheti meg:

  • A Microsoft Entra ID és a Kubernetes szerepköralapú hozzáférés-vezérlés (Kubernetes RBAC) használatával biztonságossá teheti az API-kiszolgálók hozzáférését.
  • Biztonságos tárolóhozzáférés csomóponterőforrásokhoz.
  • Frissítsen egy AKS-fürtöt a Kubernetes legújabb verziójára.
  • Tartsa naprakészen a csomópontokat, és automatikusan alkalmazza a biztonsági javításokat.

A tárolórendszerképek kezelésével és a podok biztonságával kapcsolatos ajánlott eljárásokat is elolvashatja.

Veszélyforrások elleni védelem engedélyezése

Ajánlott eljárások útmutatója

Engedélyezheti a Defender for Containerst a tárolók biztonságossá tételéhez. A Defender for Containers képes felmérni a fürtkonfigurációkat, biztonsági javaslatokat nyújtani, biztonsági résvizsgálatokat futtatni, valamint valós idejű védelmet és riasztást biztosítani a Kubernetes-csomópontok és -fürtök számára.

Biztonságos hozzáférés az API-kiszolgálóhoz és a fürtcsomópontokhoz

Ajánlott eljárások útmutatója

A fürt biztonságossá tételének egyik legfontosabb módja a Kubernetes API-kiszolgálóhoz való hozzáférés védelme. Az API-kiszolgálóhoz való hozzáférés szabályozásához integrálja a Kubernetes RBAC-t a Microsoft Entra ID-val. Ezekkel a vezérlőkkel ugyanúgy biztosíthatja az AKS-t, mint az Azure-előfizetésekhez való hozzáférést.

A Kubernetes API-kiszolgáló egyetlen csatlakozási pontot biztosít a fürtön belüli műveletek végrehajtására irányuló kérelmekhez. Az API-kiszolgálóhoz való hozzáférés védelméhez és naplózásához korlátozza a hozzáférést, és adja meg a lehető legalacsonyabb jogosultsági szinteket. Bár ez a megközelítés nem egyedi a Kubernetes esetében, különösen akkor fontos, ha logikailag elkülönítette az AKS-fürtöt több-bérlős használatra.

A Microsoft Entra ID egy nagyvállalati szintű identitáskezelési megoldást biztosít, amely integrálható az AKS-fürtökkel. Mivel a Kubernetes nem biztosít identitáskezelési megoldást, előfordulhat, hogy nehézkesen korlátozza az API-kiszolgálóhoz való hozzáférést. Az AKS-ben integrált Microsoft Entra-fürtökkel meglévő felhasználói és csoportfiókjaival hitelesítheti a felhasználókat az API-kiszolgálón.

Microsoft Entra integration for AKS clusters

A Kubernetes RBAC és a Microsoft Entra ID-integrációval biztonságossá teheti az API-kiszolgálót, és megadhatja a hatókörrel rendelkező erőforráskészletekhez, például egyetlen névtérhez szükséges minimális engedélyeket. Különböző Microsoft Entra-felhasználókat vagy csoportokat adhat különböző Kubernetes-szerepkörökhöz. Részletes engedélyekkel korlátozhatja az API-kiszolgálóhoz való hozzáférést, és egyértelmű auditnaplót biztosíthat az elvégzett műveletekről.

Az ajánlott eljárás az, hogy csoportok használatával biztosítson hozzáférést a fájlokhoz és mappákhoz egyéni identitások helyett. Egy Microsoft Entra-azonosító csoporttagság használatával például a felhasználókat kubernetes-szerepkörökhöz köti, nem pedig egyéni felhasználókhoz. A felhasználó csoporttagságának változásakor az AKS-fürt hozzáférési engedélyei ennek megfelelően változnak.

Addig is tegyük fel, hogy közvetlenül egy szerepkörhöz köti az egyes felhasználót, és megváltozik a feladatfüggvényük. Amíg a Microsoft Entra-csoporttagságok frissülnek, az AKS-fürtre vonatkozó engedélyeiket nem. Ebben a forgatókönyvben a felhasználó a szükségesnél több engedéllyel rendelkezik.

A Microsoft Entra integrációjával, a Kubernetes RBAC-vel és az Azure RBAC-vel kapcsolatos további információkért tekintse meg az AKS-ben való hitelesítés és engedélyezés ajánlott eljárásait.

A Példány metaadatai API-hoz való hozzáférés korlátozása

Ajánlott eljárások útmutatója

Adjon hozzá egy hálózati házirendet az összes felhasználónévhez, hogy letiltsa a podok kimenő forgalmát a metaadat-végponton.

Megjegyzés:

A hálózati házirend implementálásához vegye fel az attribútumot --network-policy azure az AKS-fürt létrehozásakor. A fürt létrehozásához használja a következő parancsot: az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity --network-plugin azure --network-policy azure

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-instance-metadata
spec:
  podSelector:
    matchLabels: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 10.10.0.0/0#example
        except:
        - 169.254.169.254/32

Tárolók erőforrásokhoz való hozzáférésének biztonságossá tétele

Ajánlott eljárások útmutatója

Korlátozza a tárolók által végrehajtható műveletekhez való hozzáférést. Adja meg a legkevesebb engedélyt, és kerülje a gyökérhozzáférés vagy a jogosultsági eszkaláció használatát.

Ugyanúgy, ahogyan a felhasználóknak vagy csoportoknak meg kell adnia a szükséges minimális jogosultságokat, a tárolókat is csak a szükséges műveletekre és folyamatokra kell korlátozni. A támadás kockázatának minimalizálása érdekében kerülje az eszkalált jogosultságokat vagy gyökérhozzáférést igénylő alkalmazások és tárolók konfigurálását.

Például állítsa be allowPrivilegeEscalation: false a pod jegyzékfájljában. Ezek a beépített Kubernetes-podbiztonsági környezetek lehetővé teszik további engedélyek megadását, például a futtatandó felhasználót vagy csoportot, vagy a linuxos képességeket. További ajánlott eljárásokért tekintse meg az erőforrásokhoz való podhozzáférés biztonságossá tételét.

A tárolóműveletek még részletesebb szabályozásához olyan beépített Linux-biztonsági funkciókat is használhat, mint az AppArmor és a seccomp.

  1. Linux biztonsági funkciók meghatározása csomópontszinten.
  2. Szolgáltatások implementálása podjegyzéken keresztül.

A beépített Linux biztonsági funkciók csak Linux-csomópontokon és podokon érhetők el.

Megjegyzés:

A Kubernetes-környezetek jelenleg nem teljesen biztonságosak az ellenséges több-bérlős használathoz. További biztonsági funkciók, például a Microsoft Defender for ContainersAppArmor, a seccomp, a Pod Security Admission vagy a Kubernetes RBAC a csomópontokhoz, hatékonyan blokkolják a kihasználtságokat.

Az ellenséges több-bérlős számítási feladatok futtatásakor a valódi biztonság érdekében csak egy hipervizorban bízzon meg. A Kubernetes biztonsági tartománya a teljes fürt lesz, nem pedig egy egyedi csomópont.

Az ilyen típusú ellenséges több-bérlős számítási feladatokhoz fizikailag elkülönített fürtöket kell használnia.

App Armor

A tárolóműveletek korlátozásához használhatja az AppArmor Linux kernelbiztonsági modult. Az AppArmor az alapul szolgáló AKS-csomópont operációs rendszerének részeként érhető el, és alapértelmezés szerint engedélyezve van. Olyan AppArmor-profilokat hozhat létre, amelyek korlátozzák az olvasási, írási és végrehajtási műveleteket, illetve olyan rendszerfunkciókat, mint a fájlrendszerek csatlakoztatása. Az alapértelmezett AppArmor-profilok korlátozzák a különböző /proc helyekhez /sys való hozzáférést, és lehetővé teszik a tárolók logikai elkülönítését a mögöttes csomóponttól. Az AppArmor minden Linuxon futó alkalmazáshoz működik, nem csak a Kubernetes-podokhoz.

AppArmor profiles in use in an AKS cluster to limit container actions

Az AppArmor működés közbeni megtekintéséhez az alábbi példa létrehoz egy profilt, amely megakadályozza a fájlokba való írást.

  1. SSH egy AKS-csomópontra.

  2. Hozzon létre egy deny-write.profile nevű fájlt.

  3. Másolja és illessze be a következő tartalmat:

    #include <tunables/global>
    profile k8s-apparmor-example-deny-write flags=(attach_disconnected) {
      #include <abstractions/base>
    
      file,
      # Deny all file writes.
      deny /** w,
    }
    

Az AppArmor-profilok a apparmor_parser parancs használatával lesznek hozzáadva.

  1. Adja hozzá a profilt az AppArmorhoz.

  2. Adja meg az előző lépésben létrehozott profil nevét:

    sudo apparmor_parser deny-write.profile
    

    Ha a profil megfelelően van elemezve és alkalmazva az AppArmor-ra, nem fog semmilyen kimenetet látni, és a rendszer vissza fogja adni a parancssorba.

  3. A helyi gépről hozzon létre egy podjegyzéket aks-apparmor.yaml néven. Ez a jegyzék:

    • A egy széljegyzetet határoz meg a következőhöz container.apparmor.security.beta.kubernetes: .
    • Az előző lépésekben létrehozott megtagadási-írási profilra hivatkozik.
    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-apparmor
      annotations:
        container.apparmor.security.beta.kubernetes.io/hello: localhost/k8s-apparmor-example-deny-write
    spec:
      containers:
      - name: hello
        image: mcr.microsoft.com/dotnet/runtime-deps:6.0
        command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]
    
  4. A pod üzembe helyezésével futtassa a következő parancsot, és ellenőrizze, hogy a hello-apparmor pod futási állapotot mutat-e:

    kubectl get pods
    
    NAME             READY   STATUS    RESTARTS   AGE
    aks-ssh          1/1     Running   0          4m2s
    hello-apparmor   0/1     Running   0          50s
    

További információ az AppArmorról: AppArmor-profilok a Kubernetesben.

Biztonságos számítástechnika

Bár az AppArmor bármilyen Linux-alkalmazáshoz működik, a seccomp (secure computing) a folyamat szintjén működik. A Seccomp linuxos kernelbiztonsági modul is, és natív módon támogatja az AKS-csomópontok által használt Docker-futtatókörnyezet. A seccomp használatával korlátozhatja a tárolófolyamat-hívásokat. Igazodjon ahhoz az ajánlott eljáráshoz, amely szerint a tárolónak csak a következő jogosultságokkal kell futnia:

  • Szűrőkkel definiálja, hogy milyen műveleteket engedélyezhet vagy tilthat le.
  • Megjegyzés a pod YAML-jegyzékében a seccomp szűrőhöz való társításhoz.

A seccomp működés közbeni megtekintéséhez hozzon létre egy szűrőt, amely megakadályozza a fájlok engedélyeinek módosítását.

  1. SSH egy AKS-csomópontra.

  2. Hozzon létre egy /var/lib/kubelet/seccomp/prevent-chmod nevű seccomp szűrőt.

  3. Másolja és illessze be a következő tartalmat:

    {
      "defaultAction": "SCMP_ACT_ALLOW",
      "syscalls": [
        {
          "name": "chmod",
          "action": "SCMP_ACT_ERRNO"
        },
        {
          "name": "fchmodat",
          "action": "SCMP_ACT_ERRNO"
        },
        {
          "name": "chmodat",
          "action": "SCMP_ACT_ERRNO"
        }
      ]
    }
    

    Az 1.19-es és újabb verziókban a következőket kell konfigurálnia:

    {
      "defaultAction": "SCMP_ACT_ALLOW",
      "syscalls": [
        {
          "names": ["chmod","fchmodat","chmodat"],
          "action": "SCMP_ACT_ERRNO"
        }
      ]
    }
    
  4. A helyi gépről hozzon létre egy podjegyzéket aks-seccomp.yaml néven, és illessze be a következő tartalmat. Ez a jegyzék:

    • A egy széljegyzetet határoz meg a következőhöz seccomp.security.alpha.kubernetes.io: .
    • Az előző lépésben létrehozott prevent-chmod szűrőre hivatkozik.
    apiVersion: v1
    kind: Pod
    metadata:
      name: chmod-prevented
      annotations:
        seccomp.security.alpha.kubernetes.io/pod: localhost/prevent-chmod
    spec:
      containers:
      - name: chmod
        image: mcr.microsoft.com/dotnet/runtime-deps:6.0
        command:
          - "chmod"
        args:
         - "777"
         - /etc/hostname
      restartPolicy: Never
    

    Az 1.19-es és újabb verziókban a következőket kell konfigurálnia:

    apiVersion: v1
    kind: Pod
    metadata:
      name: chmod-prevented
    spec:
      securityContext:
        seccompProfile:
          type: Localhost
          localhostProfile: prevent-chmod
      containers:
      - name: chmod
        image: mcr.microsoft.com/dotnet/runtime-deps:6.0
        command:
          - "chmod"
        args:
         - "777"
         - /etc/hostname
      restartPolicy: Never
    
  5. Telepítse a minta podot a kubectl apply paranccsal:

    kubectl apply -f ./aks-seccomp.yaml
    
  6. A pod állapotának megtekintése a kubectl get pods paranccsal.

    • A pod hibát jelez.
    • A chmod seccomp szűrő nem futtatja a parancsot, ahogy az a következő példakimenetben is látható:
    kubectl get pods
    
    NAME                      READY     STATUS    RESTARTS   AGE
    chmod-prevented           0/1       Error     0          7s
    

Az elérhető szűrőkkel kapcsolatos további információkért lásd a Docker Seccomp biztonsági profiljait.

Rendszeresen frissítsen a Kubernetes legújabb verziójára

Ajánlott eljárások útmutatója

Ha naprakész szeretne maradni az új funkciókkal és hibajavításokkal kapcsolatban, frissítse rendszeresen a Kubernetes-verziót az AKS-fürtben.

A Kubernetes gyorsabban bocsát ki új funkciókat, mint a hagyományos infrastruktúraplatformok. A Kubernetes-frissítések a következők:

  • Új funkciók
  • Hiba- vagy biztonsági javítások

Az új funkciók általában az alfa- és béta állapoton haladnak át, mielőtt stabilsá válnak. Ha stabil, általánosan elérhetőek és éles használatra ajánlottak. A Kubernetes új funkciókiadási ciklusa lehetővé teszi a Kubernetes frissítését anélkül, hogy rendszeresen kompatibilitástörő változásokba ütközik, vagy módosítaná az üzemelő példányokat és sablonokat.

Az AKS a Kubernetes három alverzióját támogatja. Az új aljavítási verzió bevezetése után a rendszer kivonja a legrégebbi alverziót és a támogatott javításkiadásokat. A kisebb Kubernetes-frissítések rendszeres időközönként történnek. A támogatásban való tartózkodáshoz győződjön meg arról, hogy rendelkezik egy szabályozási folyamattal, amely ellenőrzi a szükséges frissítéseket. További információt az AKS támogatott Kubernetes-verzióiban talál.

A fürthöz elérhető verziók ellenőrzéséhez használja az az aks get-upgrades parancsot az alábbi példában látható módon:

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table

Ezután frissítheti az AKS-fürtöt az az aks upgrade paranccsal. A frissítési folyamat biztonságosan:

  • A kordonok és a csatornák egyszerre egy csomópontot ürítenek ki.
  • A fennmaradó csomópontokon lévő podokat ütemezi.
  • Üzembe helyez egy új csomópontot, amely a legújabb operációsrendszer- és Kubernetes-verziókat futtatja.

Fontos

Tesztelje az új alverziókat egy fejlesztői tesztkörnyezetben, és ellenőrizze, hogy a számítási feladat kifogástalan állapotban marad-e az új Kubernetes-verzióval.

A Kubernetes elavult api-kat (például az 1.16-os verzióban) elavultnak ítélhet, amelyekre a számítási feladatok támaszkodnak. Amikor új verziókat hoz létre, fontolja meg, hogy több csomópontkészletet használjon külön verziókon , és egyenként frissítse az egyes készleteket, hogy fokozatosan összesítse a frissítést egy fürtben. Ha több fürtöt futtat, frissítsen egyszerre egy fürtöt a hatások vagy módosítások fokozatos figyeléséhez.

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version KUBERNETES_VERSION

Az AKS frissítéseiről további információt az AKS támogatott Kubernetes-verziói és az AKS-fürt frissítése című témakörben talál.

Linux-csomópontfrissítések feldolgozása

Az AKS Linux-csomópontjai minden este biztonsági javításokat kapnak a disztribúciós frissítési csatornájukon keresztül. Ez a viselkedés automatikusan konfigurálva van, mivel a csomópontok egy AKS-fürtben vannak üzembe helyezve. A megszakítások és a számítási feladatok futtatására gyakorolt lehetséges hatások minimalizálása érdekében a csomópontok nem indulnak újra automatikusan, ha egy biztonsági javítás vagy kernelfrissítés megköveteli. A csomópont-újraindítások kezeléséről további információt az AKS-ben található csomópontokra vonatkozó biztonsági és kernelfrissítések alkalmazása című témakörben talál.

Csomópontrendszerkép frissítései

A felügyelet nélküli frissítések frissítéseket alkalmaznak a Linux-csomópont operációs rendszerére, de a fürt csomópontjainak létrehozásához használt rendszerkép változatlan marad. Ha új Linux-csomópontot ad hozzá a fürthöz, a rendszer az eredeti rendszerképet használja a csomópont létrehozásához. Ez az új csomópont minden este megkapja az automatikus ellenőrzés során elérhető összes biztonsági és kernelfrissítést, de az összes ellenőrzés és újraindítás befejeződéséig nem lesz elérhető. A csomópont lemezképének frissítésével ellenőrizheti és frissítheti a fürt által használt csomópontrendszerképeket. A csomópontok rendszerképének frissítéséről további információt az Azure Kubernetes Service (AKS) csomópontrendszerkép-frissítésében talál.

Windows Server-csomópontfrissítések feldolgozása

Windows Server-csomópontok esetén rendszeresen végezzen csomópontrendszerkép-frissítési műveletet a podok biztonságos kordonozása és ürítése, valamint a frissített csomópontok üzembe helyezése érdekében.