Delen via


Kubernetes-benchmark voor Internet Security (CIS)

Azure Kubernetes Service (AKS) voldoet als een veilige service aan SOC-, ISO-, PCI DSS- en HIPAA-standaarden. In dit artikel worden de beveiligingsmaatregelen beschreven die zijn toegepast op AKS op basis van de CIS Kubernetes-benchmark. Zie Beveiligingsconcepten voor toepassingen en clusters in Azure Kubernetes Service (AKS) voor meer informatie over AKS-beveiliging. Zie Center for Internet Security (CIS) Benchmarks voor meer informatie over de CIS-benchmark.

Kubernetes CIS-benchmark

Hieronder volgen de resultaten van de aanbevelingen van CIS Kubernetes V1.27 Benchmark v1.9.0 voor AKS. De resultaten zijn van toepassing op AKS 1.27.x tot en met AKS 1.29.x.

Beveiligingsniveaus

CIS-benchmarks bieden twee beveiligingsniveaus:

  • L1 of Niveau 1 raadt essentiële basisbeveiligingsvereisten aan die op elk systeem kunnen worden geconfigureerd en die weinig of geen onderbreking van de service of verminderde functionaliteit moeten veroorzaken.
  • L2 of Niveau 2 raadt beveiligingsinstellingen aan voor omgevingen waarvoor meer beveiliging nodig is, wat kan leiden tot een verminderde functionaliteit.

Status beoordeling

Voor elke aanbeveling wordt een evaluatiestatus opgenomen. De evaluatiestatus geeft aan of de opgegeven aanbeveling kan worden geautomatiseerd of dat handmatige stappen moeten worden geïmplementeerd. Beide statussen zijn even belangrijk en worden bepaald en ondersteund zoals hieronder is gedefinieerd:

  • Geautomatiseerd: Vertegenwoordigt aanbevelingen waarvoor de evaluatie van een technische controle volledig kan worden geautomatiseerd en gevalideerd met de status Geslaagd/Mislukken. Aanbevelingen bevatten de benodigde informatie voor het implementeren van automatisering.
  • Handmatig: Vertegenwoordigt aanbevelingen waarvoor de evaluatie van een technische controle niet volledig kan worden geautomatiseerd en vereist alle of enkele handmatige stappen om te controleren of de geconfigureerde status is ingesteld zoals verwacht. De verwachte status kan variëren, afhankelijk van de omgeving.

Geautomatiseerde aanbevelingen zijn van invloed op de benchmarkscore als ze niet worden toegepast, terwijl handmatige aanbevelingen dat niet doen.

Attestation-status

Aanbevelingen kunnen een van de volgende attestation-statussen hebben:

  • Pass: De aanbeveling is toegepast.
  • Mislukt: de aanbeveling is niet toegepast.
  • N/B: De aanbeveling heeft betrekking op de machtigingsvereisten voor manifestbestanden die niet relevant zijn voor AKS. Kubernetes-clusters gebruiken standaard een manifestmodel om de pods van het besturingsvlak te implementeren, die afhankelijk zijn van bestanden van de vm met knooppunten. De CIS Kubernetes-benchmark raadt deze bestanden aan bepaalde machtigingsvereisten te hebben. AKS-clusters maken gebruik van een Helm-grafiek voor het implementeren van besturingsvlakpods en zijn niet afhankelijk van bestanden in de knooppunt-VM.
  • Is afhankelijk van de omgeving: de aanbeveling wordt toegepast in de specifieke omgeving van de gebruiker en wordt niet beheerd door AKS. Geautomatiseerde aanbevelingen zijn van invloed op de benchmarkscore of de aanbeveling van toepassing is op de specifieke omgeving van de gebruiker of niet.
  • Gelijkwaardig beheer: de aanbeveling is op een andere, gelijkwaardige manier geïmplementeerd.

Benchmarkdetails

CIS-id Beschrijving van aanbeveling Status beoordeling Niveau Status
1 Onderdelen van besturingsvlak
1.1 Configuratiebestanden voor besturingsvlakknooppunten
1.1.1 Zorg ervoor dat de bestandsmachtigingen voor de API-serverpodspecificatie zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.2 Zorg ervoor dat het eigendom van het bestand met api-serverspecificatiebestanden is ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.3 Zorg ervoor dat de bestandsmachtigingen voor de controllerbeheerpodspecificatie zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.4 Zorg ervoor dat het eigendom van het bestand met de podspecificatiebestand voor controllerbeheer is ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.5 Zorg ervoor dat de bestandsmachtigingen voor de scheduler-podspecificatie zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.6 Zorg ervoor dat het eigendom van het bestand met de scheduler-podspecificatie is ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.7 Zorg ervoor dat de bestandsmachtigingen voor de etcd-podspecificatie zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.8 Zorg ervoor dat het eigendom van het bestand met de etcd-podspecificatie is ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.9 Zorg ervoor dat de bestandsmachtigingen voor de Container Network Interface zijn ingesteld op 600 of meer beperkend Handmatig L1 N.v.t.
1.1.10 Zorg ervoor dat het eigendom van het containernetwerkinterfacebestand is ingesteld op root:root Handmatig L1 N.v.t.
1.1.11 Zorg ervoor dat de machtigingen voor etcd-gegevensmappen zijn ingesteld op 700 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.12 Zorg ervoor dat het eigenaarschap van de etcd-gegevensmap is ingesteld op etcd:etcd Geautomatiseerd L1 N.v.t.
1.1.13 Zorg ervoor dat de bestandsmachtigingen admin.conf zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.14 Zorg ervoor dat het eigendom van het bestand admin.conf is ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.15 Zorg ervoor dat de bestandsmachtigingen van scheduler.conf zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.16 Zorg ervoor dat het eigendom van het bestand scheduler.conf is ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.17 Zorg ervoor dat de bestandsmachtigingen controller-manager.conf zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 N.v.t.
1.1.18 Zorg ervoor dat het eigendom van het bestand controller-manager.conf is ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.19 Zorg ervoor dat de Kubernetes PKI-map en het eigendom van het bestand zijn ingesteld op root:root Geautomatiseerd L1 N.v.t.
1.1.20 Zorg ervoor dat de machtigingen voor het Kubernetes PKI-certificaatbestand zijn ingesteld op 600 of meer beperkend Handmatig L1 N.v.t.
1.1.21 Zorg ervoor dat de machtigingen voor het Kubernetes PKI-sleutelbestand zijn ingesteld op 600 Handmatig L1 N.v.t.
1.2 API-server
1.2.1 Zorg ervoor dat het --anonymous-auth argument is ingesteld op false Handmatig L1 Geslaagd
1.2.2 Zorg ervoor dat de --token-auth-file parameter niet is ingesteld Geautomatiseerd L1 Mislukt
1.2.3 Zorg ervoor dat deze --DenyServiceExternalIPs niet is ingesteld Handmatig L1 Mislukt
1.2.4 Zorg ervoor dat de --kubelet-client-certificate en --kubelet-client-key argumenten zo nodig zijn ingesteld Geautomatiseerd L1 Geslaagd
1.2.5 Zorg ervoor dat het --kubelet-certificate-authority argument is ingesteld indien van toepassing Geautomatiseerd L1 Mislukt
1.2.6 Zorg ervoor dat het --authorization-mode argument niet is ingesteld op AlwaysAllow Geautomatiseerd L1 Geslaagd
1.2.7 Zorg ervoor dat het --authorization-mode argument Node bevat Geautomatiseerd L1 Geslaagd
1.2.8 Zorg ervoor dat het --authorization-mode argument RBAC bevat Geautomatiseerd L1 Geslaagd
1.2.9 Zorg ervoor dat de invoegtoepassing voor toegangsbeheer EventRateLimit is ingesteld Handmatig L1 Mislukt
1.2.10 Zorg ervoor dat de invoegtoepassing voor toegangsbeheer AlwaysAdmit niet is ingesteld Geautomatiseerd L1 Geslaagd
1.2.11 Zorg ervoor dat de invoegtoepassing Voor toegangsbeheer AlwaysPullImages is ingesteld Handmatig L1 Mislukt
1.2.12 Zorg ervoor dat de invoegtoepassing voor toegangsbeheer is ingesteld op ServiceAccount Geautomatiseerd L2 Mislukt
1.2.13 Zorg ervoor dat de invoegtoepassing Voor toegangsbeheer NamespaceLifecycle is ingesteld Geautomatiseerd L2 Geslaagd
1.2.14 Zorg ervoor dat de invoegtoepassing voor toegangsbeheer NodeRestriction is ingesteld Geautomatiseerd L2 Geslaagd
1.2.15 Zorg ervoor dat het --profiling argument is ingesteld op false Geautomatiseerd L1 Geslaagd
1.2.16 Zorg ervoor dat het --audit-log-path argument is ingesteld Geautomatiseerd L1 Geslaagd
1.2.17 Zorg ervoor dat het --audit-log-maxage argument is ingesteld op 30 of indien van toepassing Geautomatiseerd L1 Equivalent besturingselement
1.2.18 Zorg ervoor dat het --audit-log-maxbackup argument is ingesteld op 10 of indien van toepassing Geautomatiseerd L1 Equivalent besturingselement
1.2.19 Zorg ervoor dat het --audit-log-maxsize argument is ingesteld op 100 of indien van toepassing Geautomatiseerd L1 Geslaagd
1.2.20 Zorg ervoor dat het --request-timeout argument is ingesteld indien van toepassing Handmatig L1 Geslaagd
1.2.21 Zorg ervoor dat het --service-account-lookup argument is ingesteld op true Geautomatiseerd L1 Geslaagd
1.2.22 Zorg ervoor dat het --service-account-key-file argument is ingesteld indien van toepassing Geautomatiseerd L1 Geslaagd
1.2.23 Zorg ervoor dat de --etcd-certfile en --etcd-keyfile argumenten zo nodig zijn ingesteld Geautomatiseerd L1 Geslaagd
1.2.24 Zorg ervoor dat de --tls-cert-file en --tls-private-key-file argumenten zo nodig zijn ingesteld Geautomatiseerd L1 Geslaagd
1.2.25 Zorg ervoor dat het --client-ca-file argument is ingesteld indien van toepassing Geautomatiseerd L1 Geslaagd
1.2.26 Zorg ervoor dat het --etcd-cafile argument is ingesteld indien van toepassing Geautomatiseerd L1 Geslaagd
1.2.27 Zorg ervoor dat het --encryption-provider-config argument is ingesteld indien van toepassing Handmatig L1 Afhankelijk van de omgeving
1.2.28 Zorg ervoor dat versleutelingsproviders op de juiste wijze zijn geconfigureerd Handmatig L1 Afhankelijk van de omgeving
1.2.29 Zorg ervoor dat de API-server alleen gebruikmaakt van sterke cryptografische coderingen Handmatig L1 Geslaagd
1.3 Controllerbeheer
1.3.1 Zorg ervoor dat het --terminated-pod-gc-threshold argument is ingesteld indien van toepassing Handmatig L1 Geslaagd
1.3.2 Zorg ervoor dat het --profiling argument is ingesteld op false Geautomatiseerd L1 Geslaagd
1.3.3 Zorg ervoor dat het --use-service-account-credentials argument is ingesteld op true Geautomatiseerd L1 Geslaagd
1.3.4 Zorg ervoor dat het --service-account-private-key-file argument is ingesteld indien van toepassing Geautomatiseerd L1 Geslaagd
1.3.5 Zorg ervoor dat het --root-ca-file argument is ingesteld indien van toepassing Geautomatiseerd L1 Geslaagd
1.3.6 Zorg ervoor dat het argument RotateKubeletServerCertificate is ingesteld op true Geautomatiseerd L2 Geslaagd
1.3.7 Zorg ervoor dat het --bind-address argument is ingesteld op 127.0.0.1 Geautomatiseerd L1 Equivalent besturingselement
1.4 Planner
1.4.1 Zorg ervoor dat het --profiling argument is ingesteld op false Geautomatiseerd L1 Geslaagd
1.4.2 Zorg ervoor dat het --bind-address argument is ingesteld op 127.0.0.1 Geautomatiseerd L1 Equivalent besturingselement
2 etcd
2.1 Zorg ervoor dat de --cert-file en --key-file argumenten zo nodig zijn ingesteld Geautomatiseerd L1 Geslaagd
2.2 Zorg ervoor dat het --client-cert-auth argument is ingesteld op true Geautomatiseerd L1 Geslaagd
2.3 Zorg ervoor dat het --auto-tls argument niet is ingesteld op true Geautomatiseerd L1 Geslaagd
2.4 Zorg ervoor dat de --peer-cert-file en --peer-key-file argumenten zo nodig zijn ingesteld Geautomatiseerd L1 Geslaagd
2.5 Zorg ervoor dat het --peer-client-cert-auth argument is ingesteld op true Geautomatiseerd L1 Geslaagd
2.6 Zorg ervoor dat het --peer-auto-tls argument niet is ingesteld op true Geautomatiseerd L1 Geslaagd
2.7 Zorg ervoor dat een unieke certificeringsinstantie wordt gebruikt voor etcd Handmatig L2 Geslaagd
3 Configuratie van besturingsvlak
3.1 Verificatie en autorisatie
3.1.1 Verificatie van clientcertificaten mag niet worden gebruikt voor gebruikers Handmatig L1 Geslaagd
3.1.2 Verificatie van serviceaccounttoken mag niet worden gebruikt voor gebruikers Handmatig L1 Geslaagd
3.1.3 Bootstrap-tokenverificatie mag niet worden gebruikt voor gebruikers Handmatig L1 Geslaagd
3.2 Logboekregistratie
3.2.1 Zorg ervoor dat er een minimaal controlebeleid wordt gemaakt Handmatig L1 Geslaagd
3.2.2 Zorg ervoor dat het controlebeleid belangrijke beveiligingsproblemen behandelt Handmatig L2 Geslaagd
4 Werkknooppunten
4.1 Werkknooppuntconfiguratiebestanden
4.1.1 Zorg ervoor dat de machtigingen voor het kubelet-servicebestand zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 Geslaagd
4.1.2 Zorg ervoor dat het eigendom van het kubelet-servicebestand is ingesteld op root:root Geautomatiseerd L1 Geslaagd
4.1.3 Als er een kubeconfig-proxybestand bestaat, moet u ervoor zorgen dat machtigingen zijn ingesteld op 600 of meer beperkend Handmatig L1 N.v.t.
4.1.4 Als er een kubeconfig-proxybestand bestaat, controleert u of het eigendom is ingesteld op root:root Handmatig L1 N.v.t.
4.1.5 Zorg ervoor dat de --kubeconfig bestandsmachtigingen voor kubelet.conf zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 Geslaagd
4.1.6 Zorg ervoor dat het eigendom van het --kubeconfig bestand kubelet.conf is ingesteld op root:root Geautomatiseerd L1 Geslaagd
4.1.7 Zorg ervoor dat de bestandsmachtigingen van de certificeringsinstanties zijn ingesteld op 600 of meer beperkend Handmatig L1 Geslaagd
4.1.8 Zorg ervoor dat het eigendom van de clientcertificaatautoriteiten is ingesteld op root:root Handmatig L1 Geslaagd
4.1.9 Als het kubelet config.yaml-configuratiebestand wordt gebruikt, moet u ervoor zorgen dat machtigingen zijn ingesteld op 600 of meer beperkend Geautomatiseerd L1 Geslaagd
4.1.10 Als het kubelet config.yaml-configuratiebestand wordt gebruikt, controleert u of het bestandseigendom is ingesteld op root:root Geautomatiseerd L1 Geslaagd
4.2 Kubelet
4.2.1 Zorg ervoor dat het --anonymous-auth argument is ingesteld op false Geautomatiseerd L1 Geslaagd
4.2.2 Zorg ervoor dat het --authorization-mode argument niet is ingesteld op AlwaysAllow Geautomatiseerd L1 Geslaagd
4.2.3 Zorg ervoor dat het --client-ca-file argument is ingesteld indien van toepassing Geautomatiseerd L1 Geslaagd
4.2.4 Zorg ervoor dat het --read-only-port argument is ingesteld op 0 Handmatig L1 Geslaagd
4.2.5 Zorg ervoor dat het --streaming-connection-idle-timeout argument niet is ingesteld op 0 Handmatig L1 Geslaagd
4.2.6 Zorg ervoor dat het --make-iptables-util-chains argument is ingesteld op true Geautomatiseerd L1 Geslaagd
4.2.7 Zorg ervoor dat het --hostname-override argument niet is ingesteld Handmatig L1 Geslaagd
4.2.8 Zorg ervoor dat het --eventRecordQPS argument is ingesteld op een niveau dat zorgt voor de juiste gebeurtenisopname Handmatig L2 Geslaagd
4.2.9 Zorg ervoor dat de --tls-cert-file en --tls-private-key-file argumenten zo nodig zijn ingesteld Handmatig L1 Geslaagd
4.2.10 Zorg ervoor dat het --rotate-certificates argument niet is ingesteld op false Geautomatiseerd L1 Geslaagd
4.2.11 Controleer of het argument RotateKubeletServerCertificate is ingesteld op true Handmatig L1 Mislukt
4.2.12 Zorg ervoor dat de Kubelet alleen gebruikmaakt van sterke cryptografische coderingen Handmatig L1 Geslaagd
4.2.13 Zorg ervoor dat een limiet is ingesteld op pod-PID's Handmatig L1 Geslaagd
4.3 kube-proxy
4.3.1 Zorg ervoor dat de kube-proxy metrics-service is gebonden aan localhost Geautomatiseerd L1 Geslaagd
5 Beleid
5.1 RBAC- en serviceaccounts
5.1.1 Zorg ervoor dat de rol clusterbeheerder alleen wordt gebruikt als dat nodig is Geautomatiseerd L1 Afhankelijk van de omgeving
5.1.2 Toegang tot geheimen minimaliseren Geautomatiseerd L1 Afhankelijk van de omgeving
5.1.3 Jokertekens in Rollen en ClusterRoles minimaliseren Geautomatiseerd L1 Afhankelijk van de omgeving
5.1.4 Toegang tot het maken van pods minimaliseren Geautomatiseerd L1 Afhankelijk van de omgeving
5.1.5 Zorg ervoor dat standaardserviceaccounts niet actief worden gebruikt Geautomatiseerd L1 Afhankelijk van de omgeving
5.1.6 Zorg ervoor dat serviceaccounttokens alleen worden gekoppeld indien nodig Geautomatiseerd L1 Afhankelijk van de omgeving
5.1.7 Vermijd het gebruik van system:masters group Handmatig L1 Afhankelijk van de omgeving
5.1.8 Gebruik van bindings-, imitatie- en escalatiemachtigingen in het Kubernetes-cluster beperken Handmatig L1 Afhankelijk van de omgeving
5.1.9 Toegang minimaliseren om permanente volumes te maken Handmatig L1 Afhankelijk van de omgeving
5.1.10 Toegang tot de proxysubresource van knooppunten minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.1.11 Toegang tot de subresource goedkeuring van certificatesigningrequests-objecten minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.1.12 Toegang tot webhookconfiguratieobjecten minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.1.13 Toegang tot het token voor het serviceaccount minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.2 Beveiligingsstandaarden voor pods
5.2.1 Zorg ervoor dat het cluster ten minste één actief mechanisme voor beleidsbeheer heeft Handmatig L1 Afhankelijk van de omgeving
5.2.2 De toegang tot bevoegde containers minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.2.3 Minimaliseer de toegang tot containers die de hostproces-id-naamruimte willen delen Handmatig L1 Afhankelijk van de omgeving
5.2.4 Minimaliseer de toegang tot containers die de host-IPC-naamruimte willen delen Handmatig L1 Afhankelijk van de omgeving
5.2.5 Minimaliseer de toegang tot containers die de hostnetwerknaamruimte willen delen Handmatig L1 Afhankelijk van de omgeving
5.2.6 De toegang van containers minimaliseren met allowPrivilegeEscalation Handmatig L1 Afhankelijk van de omgeving
5.2.7 De toegang tot hoofdcontainers minimaliseren Handmatig L2 Afhankelijk van de omgeving
5.2.8 Minimaliseer de toegang van containers met de NET_RAW mogelijkheid Handmatig L1 Afhankelijk van de omgeving
5.2.9 De toegang tot containers met toegevoegde mogelijkheden minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.2.10 De toegang tot containers minimaliseren met toegewezen mogelijkheden Handmatig L2 Afhankelijk van de omgeving
5.2.11 De toegang tot Windows HostProcess-containers minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.2.12 De toegang tot HostPath-volumes minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.2.13 De toegang tot containers die gebruikmaken van HostPorts minimaliseren Handmatig L1 Afhankelijk van de omgeving
5.3 Netwerkbeleid en CNI
5.3.1 Zorg ervoor dat de CNI in gebruik netwerkbeleid ondersteunt Handmatig L1 Geslaagd
5.3.2 Zorg ervoor dat voor alle naamruimten netwerkbeleid is gedefinieerd Handmatig L2 Afhankelijk van de omgeving
5.4 Geheimenbeheer
5.4.1 Liever geheimen gebruiken als bestanden boven geheimen als omgevingsvariabelen Handmatig L2 Afhankelijk van de omgeving
5.4.2 Externe geheime opslag overwegen Handmatig L2 Afhankelijk van de omgeving
5.5 Uitbreidbaar toegangsbeheer
5.5.1 Image Provenance configureren met behulp van ImagePolicyWebhook-toegangscontroller Handmatig L2 Mislukt
5.6 Algemeen beleid
5.6.1 Beheergrenzen tussen resources maken met behulp van naamruimten Handmatig L1 Afhankelijk van de omgeving
5.6.2 Zorg ervoor dat het seccomp-profiel is ingesteld op docker/default in uw poddefinities Handmatig L2 Afhankelijk van de omgeving
5.6.3 Beveiligingscontext toepassen op uw pods en containers Handmatig L2 Afhankelijk van de omgeving
5.6.4 De standaardnaamruimte mag niet worden gebruikt Handmatig L2 Afhankelijk van de omgeving

Notitie

Naast de Kubernetes CIS-benchmark is er ook een AKS CIS-benchmark beschikbaar.

Aanvullende opmerkingen

  • Het beveiligde besturingssysteem voor beveiliging wordt speciaal voor AKS gebouwd en onderhouden en wordt niet ondersteund buiten het AKS-platform.
  • Om de kwetsbaarheid voor aanvallen verder te verminderen, worden sommige onnodige kernelmodulestuurprogramma's uitgeschakeld in het besturingssysteem.

Volgende stappen

Zie de volgende artikelen voor meer informatie over AKS-beveiliging: