Ajánlott fürtbiztonsági és frissítési eljárások Azure Kubernetes Service (AKS)

A fürtök AKS-Azure Kubernetes Service kezelése során a számítási feladatok és az adatbiztonság kulcsfontosságú szempont. Ha logikai elkülönítéssel futtat több-bérlős fürtöt, különösen az erőforrásokhoz és a számítási feladatokhoz való hozzáférés biztonságossá kell ahhoz. A legújabb Kubernetes- és csomópont-operációsrendszer-biztonsági frissítések alkalmazásával minimalizálhatja a támadás kockázatát.

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

  • Az Azure Active Directory és a Kubernetes szerepköralapú hozzáférés-vezérlés (Kubernetes RBAC) használatával biztosíthatja az API-kiszolgálók hozzáférését.
  • Tárolók biztonságos elérése a csomópont-erőforrásokhoz.
  • Frissítsen egy AKS-fürtöt a legújabb Kubernetes-verzióra.
  • A csomópontok naprakészen tartása és a biztonsági javítások automatikus alkalmazása.

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

Az Azure Kubernetes Services és a Defender for Cloud integrációjának használatával is észlelheti a fenyegetéseket, és megtekintheti az AKS-fürtök biztonságossá tétele érdekében tett javaslatokat.

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

Útmutatás az ajánlott eljárásokhoz

A fürt biztonságának egyik legfontosabb módja a Kubernetes API-kiszolgálóhoz való hozzáférés biztosítása. Az API-kiszolgálóhoz való hozzáférés szabályozásához integrálja a Kubernetes RBAC-t a Azure Active Directory (Azure AD) használatával. Ezekkel a vezérlőkkel ugyanúgy biztosíthatja az AKS-t, mint az Azure-előfizetések biztonságos hozzáférését.

A Kubernetes API-kiszolgáló egyetlen csatlakozási pontot biztosít a fürtön belüli műveletek végrehajtásához szükséges kérések számára. Az API-kiszolgálóhoz való hozzáférés biztonságossá és naplózásához korlátozza a hozzáférést, és adja meg a lehető legalacsonyabb engedélyszinteket. bár ez a megközelítés nem egyedi a Kubernetesben, különösen akkor fontos, ha logikailag elkülönítette az AKS-fürtöt több-bérlős használatra.

Az Azure AD egy nagyvállalati használatra kész identitáskezelési megoldást biztosít, amely integrálható az AKS-fürtökhöz. Mivel a Kubernetes nem biztosít identitáskezelési megoldást, előfordulhat, hogy a rendszer nem tudja részletesen korlátozni az API-kiszolgálóhoz való hozzáférést. Az AKS-be integrált Azure AD-fürtök esetében meglévő felhasználói és csoportfiókok használatával hitelesítheti a felhasználókat az API-kiszolgálón.

Azure Active Directory AKS-fürtök integrációja

A Kubernetes RBAC és az Azure AD-integráció használatával biztonságossá teszi az API-kiszolgálót, és meg tudja adni a hatókörrel rendelkező erőforráskészlethez szükséges minimális engedélyeket, például egyetlen névteret. Különböző Azure AD-felhasználók vagy -csoportok számára különböző Kubernetes-szerepköröket adhat meg. A részletes engedélyekkel korlátozhatja az API-kiszolgálóhoz való hozzáférést, és egyértelmű auditálást biztosít a végrehajtott 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 az egyéni identitások helyett. Például egy Azure AD-csoporttagság használatával a felhasználókat az egyes felhasználók helyett Kubernetes-szerepkörökhöz kötheti. A felhasználó csoporttagságának változását az AKS-fürtre vonatkozó hozzáférési engedélyei ennek megfelelően módosítják.

Addig is tegyük fel, hogy az egyes felhasználót közvetlenül egy szerepkörhöz köti, és megváltozik a munkaköre. Bár az Azure AD-csoporttagságok frissülnek, az AKS-fürtre vonatkozó engedélyeik nem. Ebben a forgatókönyvben a felhasználó a szükségesnél több engedélyt fog kérni.

További információ az Azure AD-integrációról, a Kubernetes RBAC-ről és az Azure RBAC-ről: Ajánlott eljárások az AKS-beli hitelesítéshez és engedélyezéshez.

Tárolók erőforrásokhoz való hozzáférésének biztosítása

Útmutatás az ajánlott eljárásokhoz

Korlátozza a hozzáférést a tárolók által végrehajtható műveletekre. Adja meg a legkevesebb engedélyt, és kerülje a gyökér szintű hozzáférés vagy az emelt szintű eszkalálás használatát.

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

Például állítsa be a allowPrivilegeEscalation: false következőt a podjegyzékben: . Ezekkel a beépített Kubernetes podbiztonsági környezetekkel további engedélyeket határozhat meg, például a futtatás felhasználóját vagy csoportját, vagy az elérhetővé tehető Linux-képességeket. További ajánlott eljárásokért lásd: Podok erőforrásokhoz való biztonságos elérése.

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

  1. Linuxos biztonsági funkciók definiálása csomópontszinten.
  2. Funkciók megvalósítá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 a rosszindulatú több-bérlős használathoz. A további biztonsági funkciók, például az AppArmor, a seccomp, a podbiztonsági szabályzatok vagy a Kubernetes RBAC a csomópontok számára hatékonyan letiltják a biztonsági réseket.

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

Az ilyen típusú több-bérlős számítási feladatokhoz fizikailag elkülönített fürtök használata érdemes.

App Armor

A tárolóműveletek korlátozására 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 hoz létre, amelyek korlátozzák az olvasási, írási vagy végrehajtási műveleteket, vagy rendszerfunkciókat, például a fájlrendszerek csatlakoztatását. Az alapértelmezett AppArmor-profilok korlátozzák a különböző és helyekhez való hozzáférést, és lehetőséget biztosítanak a tárolók logikai elkülönítéséhez a /proc /sys mögöttes csomóponttól. Az AppArmor nem csak a Kubernetes-podok, de minden Linuxon futó alkalmazáshoz használható.

Az AKS-fürtökben használt AppArmor-profilok a tárolóműveletek korlátozására

Az AppArmor műveletének megtekintése érdekében az alábbi példa egy olyan profilt hoz létre, amely megakadályozza a fájlokba való írást.

  1. SSH-hoz egy AKS-csomóponthoz.

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

  3. 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 az paranccsal apparmor_parser adandók hozzá.

  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 AppArmorra, nem fog kimenetet látni, és a rendszer vissza fog térni a parancssorba.

  3. A helyi gépen hozzon létre egy aks-apparmor.yaml nevű podjegyzéket. Ez a jegyzékfájl:

    • Egy jegyzetet határoz meg a container.apparmor.security.beta.kubernetes számára.
    • Az előző lépésekben létrehozott deny-write 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/aks/fundamental/base-ubuntu:v0.0.11
        command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]
    
  4. A pod üzembe helyezése után ellenőrizze, hogy a hello-apparmor pod blokkoltként jelenik-e meg:

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

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

Biztonságos számítástechnika

Míg az AppArmor bármely Linux-alkalmazáshoz működik, a seccomp (secure comp uting) folyamatszinten működik. A Seccomp egy Linux kerneles biztonsági modul is, amelyet natív módon támogat az AKS-csomópontok által használt Docker-modul. A seccompkal korlátozhatja a tárolófolyamat-hívásokat. Igazodjon az ajánlott eljáráshoz, ha a tárolónak csak minimálisan szükséges engedélyt ad a futtatáshoz:

  • A definiálás a használatával szűri az engedélyezni vagy megtagadni szükséges műveleteket.
  • Egy pod YAML-jegyzékfájlon belüli jegyzetekkel társítva a seccomp szűrővel.

A seccomp in action (scomp művelet) funkcióhoz hozzon létre egy szűrőt, amely megakadályozza a fájl engedélyeinek megváltoztatását.

  1. SSH-hoz egy AKS-csomóponthoz.

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

  3. 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épen hozzon létre egy aks-seccomp.yaml nevű podjegyzéket, és illessze be a következő tartalmat. Ez a jegyzékfájl:

    • Egy jegyzetet határoz meg a seccomp.security.alpha.kubernetes.io számára.
    • 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/aks/fundamental/base-ubuntu:v0.0.11
        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/aks/fundamental/base-ubuntu:v0.0.11
        command:
          - "chmod"
        args:
         - "777"
         - /etc/hostname
      restartPolicy: Never
    
  5. A mintapod üzembe helyezése a kubectl apply paranccsal:

    kubectl apply -f ./aks-seccomp.yaml
    
  6. Tekintse meg a pod állapotát a kubectl get pods paranccsal.

    • A pod hibát jelez.
    • A seccomp szűrő megakadályozza a parancs futtatását, ahogy az az alábbi chmod példakimenetben látható:
    $ kubectl get pods
    
    NAME                      READY     STATUS    RESTARTS   AGE
    chmod-prevented           0/1       Error     0          7s
    

További információ az elérhető szűrőkről: Biztonsági profilok a Dockerhez.

Rendszeres frissítés a Kubernetes legújabb verziójára

Útmutatás az ajánlott eljárásokhoz

Az új funkciók és hibajavítások legújabb verziójának érdekében rendszeresen frissítse a Kubernetes verzióját az AKS-fürtben.

A Kubernetes gyorsabban ad 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 a béta verzió állapotát váltják át, mielőtt stabilsá válnak. Ha a stabil, általánosan elérhetőek és ajánlottak éles környezetben való használatra. A Kubernetes új funkció-kiadási ciklusa lehetővé teszi a Kubernetes frissítését anélkül, hogy rendszeresen ütközne a használvó változásokba, vagy módosítja az üzemelő példányokat és sablonokat.

Az AKS a Kubernetes három alverzióját támogatja. Az új aljavításverzió bevezetése után a rendszer visszavonja a legrégebbi támogatott alverziót és javítási kiadásokat. A kisebb Kubernetes-frissítések rendszeres időközönként történnek. Annak érdekében, hogy a támogatáson belül maradjon, győződjön meg arról, hogy van egy irányítási folyamata, amely ellenőrzi a szükséges frissítéseket. További információ: Supported Kubernetes versions AKS (Támogatott Kubernetes-verziók AKS).

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

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

  • Egyszerre csak egy csomópontot ürít ki és kábelekkel.
  • Podokat ütemez a többi csomóponton.
  • Üzembe helyez egy új csomópontot, amely a legújabb operációs rendszert é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 állapotú-e az új Kubernetes-verzióval.

Előfordulhat, hogy a Kubernetes elavult api-kat (például az 1.16-os verzióban), amelyre a számítási feladatok támaszkodnak. Amikor új verziókat hoz létre az éles környezetben, fontolja meg több csomópontkészlet külön verzión való használatát, és egyesével frissítse az egyes készleteket, hogy a frissítést fokozatosan váltsa át a fürtön. Ha több fürtöt futtat, egyszerre csak egy fürtöt frissítsen a hatás vagy a változások fokozatos figyelése érdekében.

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

Az AKS frissítésekkel kapcsolatos további információkért lásd: Supported Kubernetes versions in AKS (Támogatott Kubernetes-verziók az AKS-ban) és Upgrade an AKS cluster (AKS-fürt frissítése).

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

Az AKS Linux-csomópontjai minden este a disztribúció frissítési csatornáján keresztül kapják meg a biztonsági javításokat. Ezt a viselkedést a rendszer automatikusan konfigurálja a csomópontok AKS-fürtben való üzembe helyezésekor. A megszakítások és a futó számítási feladatokra 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 ezt igényli. A csomópontok újraindításának kezelésével kapcsolatos további információkért lásd: Biztonsági és kernelfrissítések alkalmazása csomópontokra az AKS-ban.

Csomópont-rendszerké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éséig nem lesz kipakolt. A csomópont rendszerkép-frissítésének használatával ellenőrizheti és frissítheti a fürt által használt csomópont-rendszerképeket. A rendszerkép frissítésének további részleteiért lásd: Azure Kubernetes Service (AKS) csomópont rendszerképének frissítése.

A Windows csomópont frissítésének feldolgozása

A Windows csomópontok esetén rendszeresen hajtson végre egy csomópont rendszerkép-frissítési műveletét a podok biztonságos elkábellel való végrehajtásához és ürítéséhez, valamint a frissített csomópontok üzembe helyezéséhez.