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


Center for Internet Security (CIS) Kubernetes benchmark

Biztonságos szolgáltatásként az Azure Kubernetes Service (AKS) megfelel az SOC, az ISO, a PCI DSS és a HIPAA szabványnak. Ez a cikk az AKS-hez a CIS Kubernetes-teljesítményteszt alapján alkalmazott biztonsági korlátozásokat ismerteti. Az AKS biztonságával kapcsolatos további információkért tekintse meg az Azure Kubernetes Service (AKS) alkalmazásainak és fürtjeinek biztonsági alapelveit. A CIS-referenciamutatóval kapcsolatos további információkért lásd : Center for Internet Security (CIS) Benchmarks.

Kubernetes CIS-teljesítményteszt

Az alábbiakban a CIS Kubernetes V1.27 Benchmark v1.9.0 AKS-sel kapcsolatos javaslatainak eredményeit mutatjuk be. Az eredmények az AKS 1.27.x és AKS 1.29.x között alkalmazhatók.

Biztonsági szintek

A CIS-teljesítménytesztek két biztonsági szintet biztosítanak:

  • Az L1 vagy az 1. szint olyan alapvető biztonsági követelményeket javasol, amelyek bármely rendszeren konfigurálhatók, és a szolgáltatás vagy a funkciók minimális vagy egyáltalán nem zavarhatók.
  • Az L2 vagy a 2. szint olyan környezetek biztonsági beállításait javasolja, amelyek nagyobb biztonságot igényelnek, ami bizonyos funkciók csökkenését eredményezheti.

Értékelés állapota

Minden javaslathoz tartozik értékelési állapot. Az értékelés állapota azt jelzi, hogy a megadott javaslat automatizálható-e, vagy manuális lépéseket igényel a megvalósításhoz. Mindkét állapot egyformán fontos, és az alábbiak szerint van meghatározva és támogatva:

  • Automatizált: Olyan javaslatokat jelöl, amelyek esetében a műszaki vezérlő értékelése teljesen automatizálható, és pass/fail állapotra érvényesíthető. A javaslatok tartalmazzák az automatizálás implementálásához szükséges információkat.
  • Manuális: Olyan javaslatokat jelöl, amelyek esetében a műszaki vezérlő értékelése nem automatizálható teljesen, és a konfigurált állapot elvárt beállításának ellenőrzéséhez minden vagy néhány manuális lépésre van szükség. A várt állapot a környezettől függően változhat.

Az automatizált javaslatok akkor befolyásolják a teljesítményteszt pontszámát, ha nincsenek alkalmazva, míg a manuális javaslatok nem.

Igazolás állapota

A javaslatok az alábbi igazolási állapotok egyikével rendelkezhetnek:

  • Pass( Pass): A javaslat alkalmazása megtörtént.
  • Sikertelen: A javaslat nem lett alkalmazva.
  • N/A: A javaslat olyan jegyzékfájl-engedélykövetelményekre vonatkozik, amelyek nem relevánsak az AKS-hez. A Kubernetes-fürtök alapértelmezés szerint jegyzékmodellt használnak a vezérlősík podjainak üzembe helyezéséhez, amelyek a csomópont virtuális gép fájljaira támaszkodnak. A CIS Kubernetes-teljesítményteszt azt javasolja, hogy ezeknek a fájloknak bizonyos engedélykövetelményekkel kell rendelkezniük. Az AKS-fürtök Helm-diagramot használnak a vezérlősík podjainak üzembe helyezéséhez, és nem támaszkodnak a csomópont virtuális gép fájljaira.
  • A környezettől függ: A javaslat a felhasználó adott környezetében van alkalmazva, és az AKS nem szabályozza. Az automatizált javaslatok befolyásolják a teljesítményteszt pontszámát, függetlenül attól, hogy a javaslat a felhasználó adott környezetére vonatkozik-e.
  • Egyenértékű ellenőrzés: A javaslat más, egyenértékű módon lett implementálva.

Teljesítményteszt részletei

CIS-azonosító Javaslat leírása Értékelés állapota Level Állapot
0 Vezérlősík összetevői
1,1 Vezérlősíkcsomópont konfigurációs fájljai
1.1.1 Győződjön meg arról, hogy az API-kiszolgáló pod-specifikációjának fájlengedélyei 600-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.2 Győződjön meg arról, hogy az API-kiszolgáló podspecifikációs fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.3 Győződjön meg arról, hogy a vezérlőkezelő podjának specifikációs fájlengedélyei 600-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.4 Győződjön meg arról, hogy a vezérlőkezelő pod-specifikációs fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.5 Győződjön meg arról, hogy az ütemező pod specifikációjának fájlengedélyei 600-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.6 Győződjön meg arról, hogy az ütemező pod specifikációs fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.7 Győződjön meg arról, hogy az etcd pod specifikációs fájlengedélyei 600-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.8 Győződjön meg arról, hogy az etcd pod specifikációs fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.9 Győződjön meg arról, hogy a Tároló hálózati adapter fájlengedélyei 600-ra vagy szigorúbbra vannak állítva Manuális L1 n/a
1.1.10 Győződjön meg arról, hogy a Container Network Interface fájl tulajdonjoga root:root értékre van állítva Manuális L1 n/a
1.1.11 Győződjön meg arról, hogy az etcd adatkönyvtár engedélyei 700-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.12 Győződjön meg arról, hogy az etcd adatkönyvtár tulajdonjoga etcd:etcd értékre van állítva Automatizált L1 n/a
1.1.13 Győződjön meg arról, hogy a rendszergazda.conf fájlengedélyek 600-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.14 Győződjön meg arról, hogy a rendszergazda.conf fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.15 Győződjön meg arról, hogy a scheduler.conf fájlengedélyek 600-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.16 Győződjön meg arról, hogy a scheduler.conf fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.17 Győződjön meg arról, hogy a controller-manager.conf fájlengedélyek 600-ra vagy szigorúbbra vannak állítva Automatizált L1 n/a
1.1.18 Győződjön meg arról, hogy a controller-manager.conf fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.19 Győződjön meg arról, hogy a Kubernetes PKI-címtár és a fájl tulajdonjoga root:root értékre van állítva Automatizált L1 n/a
1.1.20 Győződjön meg arról, hogy a Kubernetes PKI tanúsítványfájl-engedélyei 600-ra vagy szigorúbbra vannak állítva Manuális L1 n/a
1.1.21 Győződjön meg arról, hogy a Kubernetes PKI kulcsfájl-engedélyei 600-ra vannak állítva Manuális L1 n/a
1,2 API-kiszolgáló
1.2.1 Győződjön meg arról, hogy az --anonymous-auth argumentum értéke hamis Manuális L1 Sikeres
1.2.2 Győződjön meg arról, hogy a --token-auth-file paraméter nincs beállítva Automatizált L1 Sikertelen
1.2.3 Győződjön meg arról, hogy nincs --DenyServiceExternalIPs beállítva Manuális L1 Sikertelen
1.2.4 Győződjön meg arról, hogy az és --kubelet-client-key az --kubelet-client-certificate argumentumok a megfelelő módon vannak beállítva Automatizált L1 Sikeres
1.2.5 Győződjön meg arról, hogy az --kubelet-certificate-authority argumentum megfelelően van beállítva Automatizált L1 Sikertelen
1.2.6 Győződjön meg arról, hogy az --authorization-mode argumentum nincs AlwaysAllow értékre állítva Automatizált L1 Sikeres
1.2.7 Győződjön meg arról, hogy az argumentum tartalmazza a --authorization-mode Csomópontot Automatizált L1 Sikeres
1.2.8 Győződjön meg arról, hogy az argumentum tartalmazza az --authorization-mode RBAC-t Automatizált L1 Sikeres
1.2.9 Győződjön meg arról, hogy az EventRateLimit beléptető beépülő modul be van állítva Manuális L1 Sikertelen
1.2.10 Győződjön meg arról, hogy az AlwaysAdmit beléptető beépülő modul nincs beállítva Automatizált L1 Sikeres
1.2.11 Győződjön meg arról, hogy az AlwaysPullImages beléptető beépülő modul be van állítva Manuális L1 Sikertelen
1.2.12 Győződjön meg arról, hogy a ServiceAccount beléptető beépülő modul be van állítva Automatizált L2 Sikertelen
1.2.13 Győződjön meg arról, hogy a NamespaceLifecycle beléptető beépülő modul be van állítva Automatizált L2 Sikeres
1.2.14 Győződjön meg arról, hogy a NodeRestriction beléptető beépülő modul be van állítva Automatizált L2 Sikeres
1.2.15 Győződjön meg arról, hogy az --profiling argumentum értéke hamis Automatizált L1 Sikeres
1.2.16 Győződjön meg arról, hogy az --audit-log-path argumentum be van állítva Automatizált L1 Sikeres
1.2.17 Győződjön meg arról, hogy az --audit-log-maxage argumentum értéke 30 vagy megfelelő Automatizált L1 Egyenértékű vezérlő
1.2.18 Győződjön meg arról, hogy az --audit-log-maxbackup argumentum értéke 10 vagy megfelelő Automatizált L1 Egyenértékű vezérlő
1.2.19 Győződjön meg arról, hogy az --audit-log-maxsize argumentum értéke 100 vagy megfelelő Automatizált L1 Sikeres
1.2.20 Győződjön meg arról, hogy az --request-timeout argumentum megfelelően van beállítva Manuális L1 Sikeres
1.2.21 Győződjön meg arról, hogy az --service-account-lookup argumentum értéke igaz Automatizált L1 Sikeres
1.2.22 Győződjön meg arról, hogy az --service-account-key-file argumentum megfelelően van beállítva Automatizált L1 Sikeres
1.2.23 Győződjön meg arról, hogy az és --etcd-keyfile az --etcd-certfile argumentumok a megfelelő módon vannak beállítva Automatizált L1 Sikeres
1.2.24 Győződjön meg arról, hogy az és --tls-private-key-file az --tls-cert-file argumentumok a megfelelő módon vannak beállítva Automatizált L1 Sikeres
1.2.25 Győződjön meg arról, hogy az --client-ca-file argumentum megfelelően van beállítva Automatizált L1 Sikeres
1.2.26 Győződjön meg arról, hogy az --etcd-cafile argumentum megfelelően van beállítva Automatizált L1 Sikeres
1.2.27 Győződjön meg arról, hogy az --encryption-provider-config argumentum megfelelően van beállítva Manuális L1 A környezettől függ
1.2.28 Győződjön meg arról, hogy a titkosítási szolgáltatók megfelelően vannak konfigurálva Manuális L1 A környezettől függ
1.2.29 Győződjön meg arról, hogy az API-kiszolgáló csak erős titkosítási titkosítást használ Manuális L1 Sikeres
1.3 Vezérlőkezelő
1.3.1 Győződjön meg arról, hogy az --terminated-pod-gc-threshold argumentum megfelelően van beállítva Manuális L1 Sikeres
1.3.2 Győződjön meg arról, hogy az --profiling argumentum értéke hamis Automatizált L1 Sikeres
1.3.3 Győződjön meg arról, hogy az --use-service-account-credentials argumentum értéke igaz Automatizált L1 Sikeres
1.3.4 Győződjön meg arról, hogy az --service-account-private-key-file argumentum megfelelően van beállítva Automatizált L1 Sikeres
1.3.5 Győződjön meg arról, hogy az --root-ca-file argumentum megfelelően van beállítva Automatizált L1 Sikeres
1.3.6 Győződjön meg arról, hogy a RotateKubeletServerCertificate argumentum értéke igaz Automatizált L2 Sikeres
1.3.7 Győződjön meg arról, hogy az --bind-address argumentum értéke 127.0.0.1 Automatizált L1 Egyenértékű vezérlő
1.4 Scheduler
1.4.1 Győződjön meg arról, hogy az --profiling argumentum értéke hamis Automatizált L1 Sikeres
1.4.2 Győződjön meg arról, hogy az --bind-address argumentum értéke 127.0.0.1 Automatizált L1 Egyenértékű vezérlő
2 etcd
2.1 Győződjön meg arról, hogy az és --key-file az --cert-file argumentumok a megfelelő módon vannak beállítva Automatizált L1 Sikeres
2,2 Győződjön meg arról, hogy az --client-cert-auth argumentum értéke igaz Automatizált L1 Sikeres
2.3 Győződjön meg arról, hogy az --auto-tls argumentum értéke nem igaz Automatizált L1 Sikeres
2,4 Győződjön meg arról, hogy az és --peer-key-file az --peer-cert-file argumentumok a megfelelő módon vannak beállítva Automatizált L1 Sikeres
2,5 Győződjön meg arról, hogy az --peer-client-cert-auth argumentum értéke igaz Automatizált L1 Sikeres
2.6 Győződjön meg arról, hogy az --peer-auto-tls argumentum értéke nem igaz Automatizált L1 Sikeres
2,7 Győződjön meg arról, hogy a rendszer egyedi hitelesítésszolgáltatót használ az etcd-hez Manuális L2 Sikeres
3 Vezérlősík konfigurálása
3.1 Hitelesítés és engedélyezés
3.1.1 Az ügyféltanúsítvány-hitelesítés nem használható a felhasználók számára Manuális L1 Sikeres
3.1.2 A szolgáltatásfiók jogkivonatának hitelesítése nem használható a felhasználók számára Manuális L1 Sikeres
3.1.3 A rendszerindítási jogkivonat hitelesítése nem használható a felhasználók számára Manuális L1 Sikeres
3.2 Naplózás
3.2.1 Győződjön meg arról, hogy létrejön egy minimális naplózási szabályzat Manuális L1 Sikeres
3.2.2 Győződjön meg arról, hogy a naplózási szabályzat lefedi a legfontosabb biztonsági problémákat Manuális L2 Sikeres
4 Munkavégző csomópontok
4.1 Feldolgozó csomópont konfigurációs fájljai
4.1.1 Győződjön meg arról, hogy a Kubelet-szolgáltatás fájlengedélyei 600-ra vagy szigorúbbra vannak állítva Automatizált L1 Sikeres
4.1.2 Győződjön meg arról, hogy a Kubelet szolgáltatásfájl tulajdonjoga root:root értékre van állítva Automatizált L1 Sikeres
4.1.3 Ha létezik proxy kubeconfig fájl, győződjön meg arról, hogy az engedélyek 600-ra vagy szigorúbbra vannak állítva Manuális L1 n/a
4.1.4 Ha létezik proxy kubeconfig fájl, győződjön meg arról, hogy a tulajdonjog root:root értékre van állítva Manuális L1 n/a
4.1.5 Győződjön meg arról, hogy a --kubeconfig kubelet.conf fájlengedélyek 600-ra vagy szigorúbbra vannak állítva Automatizált L1 Sikeres
4.1.6 Győződjön meg arról, hogy a --kubeconfig kubelet.conf fájl tulajdonjoga root:root értékre van állítva Automatizált L1 Sikeres
4.1.7 Győződjön meg arról, hogy a hitelesítésszolgáltatók fájlengedélyei 600-ra vagy szigorúbbra vannak állítva Manuális L1 Sikeres
4.1.8 Győződjön meg arról, hogy az ügyféltanúsítvány-hatóságok fájltulajdona root:root értékre van állítva Manuális L1 Sikeres
4.1.9 Ha a kubelet config.yaml konfigurációs fájlt használja, győződjön meg arról, hogy az engedélyek 600-as vagy szigorúbbak Automatizált L1 Sikeres
4.1.10 Ha a kubelet config.yaml konfigurációs fájlt használja, győződjön meg arról, hogy a fájl tulajdonjoga root:root értékre van állítva Automatizált L1 Sikeres
4.2 Kubelet
4.2.1 Győződjön meg arról, hogy az --anonymous-auth argumentum értéke hamis Automatizált L1 Sikeres
4.2.2 Győződjön meg arról, hogy az --authorization-mode argumentum nincs AlwaysAllow értékre állítva Automatizált L1 Sikeres
4.2.3 Győződjön meg arról, hogy az --client-ca-file argumentum megfelelően van beállítva Automatizált L1 Sikeres
4.2.4 Győződjön meg arról, hogy az --read-only-port argumentum értéke 0 Manuális L1 Sikeres
4.2.5 Győződjön meg arról, hogy az --streaming-connection-idle-timeout argumentum értéke nem 0 Manuális L1 Sikeres
4.2.6 Győződjön meg arról, hogy az --make-iptables-util-chains argumentum értéke igaz Automatizált L1 Sikeres
4.2.7 Győződjön meg arról, hogy az --hostname-override argumentum nincs beállítva Manuális L1 Sikeres
4.2.8 Győződjön meg arról, hogy az --eventRecordQPS argumentum olyan szintre van beállítva, amely biztosítja a megfelelő eseményrögzítést Manuális L2 Sikeres
4.2.9 Győződjön meg arról, hogy az és --tls-private-key-file az --tls-cert-file argumentumok a megfelelő módon vannak beállítva Manuális L1 Sikeres
4.2.10 Győződjön meg arról, hogy az --rotate-certificates argumentum nincs hamis értékre állítva Automatizált L1 Sikeres
4.2.11 Ellenőrizze, hogy a RotateKubeletServerCertificate argumentum értéke igaz-e Manuális L1 Sikertelen
4.2.12 Győződjön meg arról, hogy a Kubelet csak erős titkosítási titkosítást használ Manuális L1 Sikeres
4.2.13 Győződjön meg arról, hogy a pod-PID-k korlátja be van állítva Manuális L1 Sikeres
4.3 kube-proxy
4.3.1 Győződjön meg arról, hogy a kube-proxy metrikák szolgáltatása a localhosthoz van kötve Automatizált L1 Sikeres
5 Szabályzatok
5,1 RBAC- és szolgáltatásfiókok
5.1.1 Győződjön meg arról, hogy a fürtadminisztrátori szerepkör csak ott van használatban, ahol szükséges Automatizált L1 A környezettől függ
5.1.2 Titkos kódokhoz való hozzáférés minimalizálása Automatizált L1 A környezettől függ
5.1.3 A helyettesítő karakterek használatának minimalizálása a szerepkörökben és a ClusterRolesben Automatizált L1 A környezettől függ
5.1.4 Podok létrehozásának minimálisra csökkentése Automatizált L1 A környezettől függ
5.1.5 Győződjön meg arról, hogy az alapértelmezett szolgáltatásfiókok nincsenek aktív használatban Automatizált L1 A környezettől függ
5.1.6 Győződjön meg arról, hogy a szolgáltatásfiók-jogkivonatok csak akkor vannak csatlakoztatva, ha szükséges Automatizált L1 A környezettől függ
5.1.7 A system:masters csoport használatának elkerülése Manuális L1 A környezettől függ
5.1.8 A kötési, megszemélyesítési és eszkalálási engedélyek használatának korlátozása a Kubernetes-fürtben Manuális L1 A környezettől függ
5.1.9 Állandó kötetek létrehozásához való hozzáférés minimalizálása Manuális L1 A környezettől függ
5.1.10 A csomópontok proxy-alerőforrásához való hozzáférés minimalizálása Manuális L1 A környezettől függ
5.1.11 A certificatesigningrequests objektumok jóváhagyási alerőforrásához való hozzáférés minimalizálása Manuális L1 A környezettől függ
5.1.12 A webhook konfigurációs objektumaihoz való hozzáférés minimalizálása Manuális L1 A környezettől függ
5.1.13 A szolgáltatásfiók-jogkivonat létrehozásához való hozzáférés minimalizálása Manuális L1 A környezettől függ
5,2 Pod biztonsági szabványai
5.2.1 Győződjön meg arról, hogy a fürt rendelkezik legalább egy aktív házirend-vezérlési mechanizmus használatával Manuális L1 A környezettől függ
5.2.2 A kiemelt tárolók felvételének minimalizálása Manuális L1 A környezettől függ
5.2.3 A gazdagépfolyamat-azonosító névterét megosztani kívánó tárolók felvételének minimalizálása Manuális L1 A környezettől függ
5.2.4 A gazdagép IPC-névterét megosztani kívánó tárolók felvételének minimalizálása Manuális L1 A környezettől függ
5.2.5 A gazdagép hálózati névterét megosztani kívánó tárolók felvételének minimalizálása Manuális L1 A környezettől függ
5.2.6 Tárolók beléptetésének minimalizálása az allowPrivilegeEscalation használatával Manuális L1 A környezettől függ
5.2.7 A gyökértárolók felvételének minimalizálása Manuális L2 A környezettől függ
5.2.8 A tárolók felvételének minimalizálása a NET_RAW képességgel Manuális L1 A környezettől függ
5.2.9 Tárolók felvételének minimalizálása hozzáadott képességekkel Manuális L1 A környezettől függ
5.2.10 Tárolók felvételének minimalizálása hozzárendelt képességekkel Manuális L2 A környezettől függ
5.2.11 A Windows HostProcess-tárolók felvételének minimalizálása Manuális L1 A környezettől függ
5.2.12 A HostPath-kötetek felvételének minimalizálása Manuális L1 A környezettől függ
5.2.13 A HostPortsot használó tárolók felvételének minimalizálása Manuális L1 A környezettől függ
5.3 Hálózati szabályzatok és CNI
5.3.1 Győződjön meg arról, hogy a használatban lévő CNI támogatja a hálózati házirendeket Manuális L1 Sikeres
5.3.2 Győződjön meg arról, hogy minden névtér rendelkezik definiált hálózati házirendekkel Manuális L2 A környezettől függ
5,4 Titkos kódok kezelése
5.4.1 A titkos kulcsok használata a titkos kódok helyett környezeti változókként Manuális L2 A környezettől függ
5.4.2 Fontolja meg a külső titkos kulcsok tárolását Manuális L2 A környezettől függ
5,5 Bővíthető beléptető vezérlő
5.5.1 Az Image Provenance konfigurálása az ImagePolicyWebhook belépési vezérlővel Manuális L2 Sikertelen
5,6 Általános szabályzatok
5.6.1 Rendszergazdai határok létrehozása az erőforrások között névterek használatával Manuális L1 A környezettől függ
5.6.2 Győződjön meg arról, hogy a seccomp profil docker/default értékre van állítva a poddefiníciókban Manuális L2 A környezettől függ
5.6.3 Biztonsági környezet alkalmazása a podokra és tárolókra Manuális L2 A környezettől függ
5.6.4 Az alapértelmezett névtér nem használható Manuális L2 A környezettől függ

Feljegyzés

A Kubernetes CIS-referenciamutató mellett elérhető egy AKS CIS-benchmark is.

További megjegyzések

  • A biztonsági edzett operációs rendszer kifejezetten az AKS-hez készült és karbantartott, és az AKS platformon kívül nem támogatott.
  • A támadási felület további csökkentése érdekében néhány szükségtelen kernelmodul-illesztőprogram le van tiltva az operációs rendszerben.

Következő lépések

Az AKS biztonságával kapcsolatos további információkért tekintse meg az alábbi cikkeket: