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.
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.
- Linux biztonsági funkciók meghatározása csomópontszinten.
- 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.
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.
SSH egy AKS-csomópontra.
Hozzon létre egy deny-write.profile nevű fájlt.
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.
Adja hozzá a profilt az AppArmorhoz.
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.
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" ]
- A egy széljegyzetet határoz meg a következőhöz
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.
SSH egy AKS-csomópontra.
Hozzon létre egy /var/lib/kubelet/seccomp/prevent-chmod nevű seccomp szűrőt.
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" } ] }
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
- A egy széljegyzetet határoz meg a következőhöz
Telepítse a minta podot a kubectl apply paranccsal:
kubectl apply -f ./aks-seccomp.yaml
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.