Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Schutz der Infrastruktur (Hosts)
So wichtig es ist, Ihre Container-Images zu sichern, ist es ebenso wichtig, die Infrastruktur zu schützen, auf der sie ausgeführt werden. In diesem Abschnitt werden verschiedene Möglichkeiten zur Minderung von Risiken untersucht, die von Angriffen ausgehen, die direkt gegen den Host gestartet werden. Diese Richtlinien sollten zusammen mit den Richtlinien verwendet werden, die im Abschnitt Runtime Security beschrieben werden.
Empfehlungen
Verwenden Sie ein Betriebssystem, das für die Ausführung von Containern optimiert ist
Erwägen Sie die Verwendung von Flatcar Linux, Project Atomic, RancherOS und Bottlerocket
Verwenden Sie alternativ das für EKS optimierte AMI für Ihre Kubernetes-Worker-Knoten. Das für EKS optimierte AMI wird regelmäßig veröffentlicht und enthält eine minimale Anzahl von Betriebssystempaketen und Binärdateien, die für die Ausführung Ihrer containerisierten Workloads erforderlich sind.
In der Amazon EKS AMI RHEL Build Specification
Halten Sie das Betriebssystem Ihres Worker-Nodes auf dem neuesten Stand
Unabhängig davon, ob Sie ein containeroptimiertes Host-Betriebssystem wie Bottlerocket oder ein größeres, aber dennoch minimalistisches Amazon Machine Image wie das EKS-optimierte verwenden, empfiehlt es sich AMIs, diese Host-Betriebssystem-Images mit den neuesten Sicherheitspatches auf dem neuesten Stand zu halten.
Für die EKS-optimierte AMIs Version sollten Sie regelmäßig den CHANGELOG
Behandeln Sie Ihre Infrastruktur als unveränderlich und automatisieren Sie den Austausch Ihrer Worker-Knoten
Anstatt Upgrades vor Ort durchzuführen, sollten Sie Ihre Mitarbeiter austauschen, wenn ein neuer Patch oder ein neues Update verfügbar ist. Dies kann auf verschiedene Arten angegangen werden. Sie können entweder Instances zu einer vorhandenen Autoscaling-Gruppe hinzufügen, indem Sie das neueste AMI verwenden, während Sie Knoten sequenziell sperren und entleeren, bis alle Knoten in der Gruppe durch das neueste AMI ersetzt wurden. Alternativ können Sie Instances zu einer neuen Knotengruppe hinzufügen, während Sie nacheinander Knoten aus der alten Knotengruppe sperren und entfernen, bis alle Knoten ersetzt wurden. Die von EKS verwalteten Knotengruppen verwenden den ersten Ansatz und zeigen in der Konsole eine Meldung an, dass Sie Ihre Worker aktualisieren müssen, sobald ein neues AMI verfügbar ist. eksctl
verfügt auch über einen Mechanismus zum Erstellen von Knotengruppen mit dem neuesten AMI und zum ordnungsgemäßen Sperren und Entleeren von Pods aus Knotengruppen, bevor die Instances beendet werden. Wenn Sie sich für eine andere Methode zum Austausch Ihrer Worker-Knoten entscheiden, wird dringend empfohlen, den Prozess zu automatisieren, um menschliche Aufsicht zu minimieren, da Sie wahrscheinlich regelmäßig Worker austauschen müssen, sobald neue veröffentlicht updates/patches werden und wenn die Steuerungsebene aktualisiert wird.
Mit EKS Fargate aktualisiert AWS die zugrunde liegende Infrastruktur automatisch, sobald Updates verfügbar sind. Oft kann dies problemlos erfolgen, aber es kann vorkommen, dass ein Update dazu führt, dass Ihr Pod verschoben wird. Daher empfehlen wir, Bereitstellungen mit mehreren Replikaten zu erstellen, wenn Sie Ihre Anwendung als Fargate-Pod ausführen.
Führen Sie kube-bench regelmäßig aus, um die Einhaltung der CIS-Benchmarks für Kubernetes zu überprüfen
kube-bench ist ein Open-Source-Projekt von Aqua, das Ihren Cluster anhand der CIS-Benchmarks für Kubernetes bewertet. Der Benchmark beschreibt die besten Methoden zur Sicherung nicht verwalteter Kubernetes-Cluster. Der CIS Kubernetes Benchmark umfasst die Steuerungsebene und die Datenebene. Da Amazon EKS eine vollständig verwaltete Kontrollebene bietet, sind nicht alle Empfehlungen des CIS Kubernetes Benchmark zutreffend. Um sicherzustellen, dass dieser Umfang die Implementierung von Amazon EKS widerspiegelt, hat AWS den CIS Amazon EKS Benchmark erstellt. Der EKS-Benchmark basiert auf CIS Kubernetes Benchmark und enthält zusätzliche Beiträge aus der Community mit spezifischen Überlegungen zur Konfiguration von EKS-Clustern.
Wenn Sie Kube-Bench
Minimiert den Zugriff auf Worker-Knoten
Anstatt den SSH-Zugriff zu aktivieren, verwenden Sie SSM Session Manager, wenn Sie remote auf einen Host zugreifen müssen. Im Gegensatz zu SSH-Schlüsseln, die verloren gehen, kopiert oder gemeinsam genutzt werden können, können Sie mit Session Manager den Zugriff auf EC2 Instanzen mithilfe von IAM steuern. Darüber hinaus bietet er einen Audit-Trail und ein Protokoll der Befehle, die auf der Instanz ausgeführt wurden.
Seit dem 19. August 2020 unterstützen verwaltete Knotengruppen benutzerdefinierte Vorlagen AMIs und EC2 Startvorlagen. Auf diese Weise können Sie den SSM-Agenten in das AMI einbetten oder ihn installieren, während der Worker-Node gebootet wird. Wenn Sie das optimierte AMI oder die Startvorlage der ASG nicht ändern möchten, können Sie den SSM-Agenten DaemonSet wie in diesem
Minimale IAM-Richtlinie für SSM-basierten SSH-Zugriff
Die von AmazonSSMManagedInstanceCore
AWS verwaltete Richtlinie enthält eine Reihe von Berechtigungen, die für SSM Session Manager/SSM nicht erforderlich sind, RunCommand wenn Sie nur den SSH-Zugriff vermeiden möchten. Besonders besorgniserregend sind die *
Berechtigungenssm:GetParameter(s)
, für die die Rolle den Zugriff auf alle Parameter im Parameter Store ermöglichen würde (auch SecureStrings wenn der von AWS verwaltete KMS-Schlüssel konfiguriert ist).
Die folgende IAM-Richtlinie enthält die Mindestberechtigungen, um den Knotenzugriff über SSM Systems Manager zu ermöglichen.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnableAccessViaSSMSessionManager", "Effect": "Allow", "Action": [ "ssmmessages:OpenDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:CreateControlChannel", "ssm:UpdateInstanceInformation" ], "Resource": "*" }, { "Sid": "EnableSSMRunCommand", "Effect": "Allow", "Action": [ "ssm:UpdateInstanceInformation", "ec2messages:SendReply", "ec2messages:GetMessages", "ec2messages:GetEndpoint", "ec2messages:FailMessage", "ec2messages:DeleteMessage", "ec2messages:AcknowledgeMessage" ], "Resource": "*" } ] }
Wenn diese Richtlinie eingerichtet und das Session Manager-Plug-In installiert ist, können Sie dann Folgendes ausführen
aws ssm start-session --target [INSTANCE_ID_OF_EKS_NODE]
um auf den Knoten zuzugreifen.
Anmerkung
Möglicherweise möchten Sie auch Berechtigungen hinzufügen, um die Session Manager-Protokollierung zu aktivieren.
Stellen Sie Worker in privaten Subnetzen bereit
Durch den Einsatz von Mitarbeitern in privaten Subnetzen minimieren Sie deren Gefährdung durch das Internet, wo Angriffe häufig ihren Ursprung haben. Ab dem 22. April 2020 wird die Zuweisung öffentlicher IP-Adressen zu Knoten in verwalteten Knotengruppen durch das Subnetz gesteuert, in dem sie bereitgestellt werden. Zuvor wurde Knoten in einer verwalteten Knotengruppe automatisch eine öffentliche IP zugewiesen. Wenn Sie sich dafür entscheiden, Ihre Worker-Knoten in öffentlichen Subnetzen bereitzustellen, implementieren Sie restriktive AWS-Sicherheitsgruppenregeln, um deren Gefährdung zu begrenzen.
Führen Sie Amazon Inspector aus, um Hosts auf Risiken, Sicherheitslücken und Abweichungen von bewährten Methoden zu untersuchen
Sie können Amazon Inspector verwenden, um nach unbeabsichtigten Netzwerkzugriffen auf Ihre Knoten und nach Sicherheitslücken in den zugrunde liegenden EC2 Amazon-Instances zu suchen.
Amazon Inspector kann CVE-Daten (Common Vulnerabilities and Exposures) für Ihre EC2 Amazon-Instances nur bereitstellen, wenn der Amazon EC2 Systems Manager (SSM) -Agent installiert und aktiviert ist. Dieser Agent ist auf mehreren Amazon Machine Images (AMIs) vorinstalliert, einschließlich EKS-optimiertem Amazon Linux AMIs. Unabhängig vom Status des SSM-Agenten werden alle Ihre EC2 Amazon-Instances auf Probleme mit der Netzwerkerreichbarkeit überprüft. Weitere Informationen zur Konfiguration von Scans für Amazon EC2 finden Sie unter EC2 Amazon-Instances scannen.
Wichtig
Inspector kann nicht auf der Infrastruktur ausgeführt werden, die für den Betrieb von Fargate-Pods verwendet wird.
Alternativen
Lauf SELinux
Anmerkung
Verfügbar auf Red Hat Enterprise Linux (RHEL), CentOS, Bottlerocket und Amazon Linux 2023
SELinux bietet eine zusätzliche Sicherheitsebene, um Container voneinander und vom Host zu isolieren. SELinux ermöglicht es Administratoren, verbindliche Zugriffskontrollen (MAC) für jeden Benutzer, jede Anwendung, jeden Prozess und jede Datei durchzusetzen. Stellen Sie sich das als Backstop vor, der die Operationen, die anhand einer Reihe von Labels ausgeführt werden können, auf bestimmte Ressourcen beschränkt. SELinux Kann auf EKS verwendet werden, um zu verhindern, dass Container gegenseitig auf die Ressourcen zugreifen.
SELinux Container-Richtlinien sind im Paket container-selinuxcontainer_t
Label, das ein Alias für ist. svirt_lxc_net_t
Diese Richtlinien verhindern effektiv, dass Container auf bestimmte Funktionen des Hosts zugreifen.
Wenn Sie SELinux für Docker konfigurieren, kennzeichnet Docker Workloads automatisch container_t
als Typ und weist jedem Container eine eindeutige MCS-Ebene zu. Dadurch werden Container voneinander isoliert. Wenn Sie lockerere Einschränkungen benötigen, können Sie Ihr eigenes Profil erstellen SElinux , das einem Container Berechtigungen für bestimmte Bereiche des Dateisystems gewährt. Dies ist PSPs insofern vergleichbar, als Sie unterschiedliche Profile für verschiedene Container/Pods erstellen können. Sie können beispielsweise ein Profil für allgemeine Workloads mit einer Reihe von restriktiven Kontrollen und ein anderes für Dinge haben, die privilegierten Zugriff erfordern.
SELinux for Containers verfügt über eine Reihe von Optionen, die konfiguriert werden können, um die Standardeinschränkungen zu ändern. Die folgenden SELinux Booleschen Werte können je nach Bedarf aktiviert oder deaktiviert werden:
Boolesch | Standard | Beschreibung |
---|---|---|
|
|
Erlauben Sie Containern den Zugriff auf privilegierte Ports auf dem Host. Zum Beispiel, wenn Sie einen Container haben, der Ports 443 oder 80 auf dem Host zuordnen muss. |
|
|
Erlauben Sie Containern, die Cgroup-Konfiguration zu verwalten. Für einen Container, auf dem systemd ausgeführt wird, muss dies beispielsweise aktiviert sein. |
|
|
Erlaubt Containern, ein Ceph-Dateisystem zu verwenden. |
Standardmäßig ist es Containern erlaubt, die meisten Inhalte zu read/execute /usr
unterschreiben und daraus /etc
zu lesen. Die Dateien unter /var/lib/docker
und /var/lib/containers
haben das Labelcontainer_var_lib_t
. Eine vollständige Liste der Standard-Labels finden Sie in der Datei container.fc
docker container run -it \ -v /var/lib/docker/image/overlay2/repositories.json:/host/repositories.json \ centos:7 cat /host/repositories.json # cat: /host/repositories.json: Permission denied docker container run -it \ -v /etc/passwd:/host/etc/passwd \ centos:7 cat /host/etc/passwd # cat: /host/etc/passwd: Permission denied
Dateien, die mit gekennzeichnet sind, container_file_t
sind die einzigen Dateien, die von Containern beschreibbar sind. Wenn Sie möchten, dass ein Volume-Mount beschreibbar ist, müssen Sie :Z
am Ende :z
oder angeben.
-
:z
benennt die Dateien neu, sodass der Container lesen/schreiben kann -
:Z
benennt die Dateien neu, sodass nur der Container lesen/schreiben kann
ls -Z /var/lib/misc # -rw-r--r--. root root system_u:object_r:var_lib_t:s0 postfix.aliasesdb-stamp docker container run -it \ -v /var/lib/misc:/host/var/lib/misc:z \ centos:7 echo "Relabeled!" ls -Z /var/lib/misc #-rw-r--r--. root root system_u:object_r:container_file_t:s0 postfix.aliasesdb-stamp
docker container run -it \ -v /var/log:/host/var/log:Z \ fluentbit:latest
In Kubernetes ist das Umetikettieren etwas anders. Anstatt Docker die Dateien automatisch umbenennen zu lassen, können Sie ein benutzerdefiniertes MCS-Label angeben, um den Pod auszuführen. Volumes, die das Umbenennen unterstützen, werden automatisch neu beschriftet, sodass auf sie zugegriffen werden kann. Pods mit einem passenden MCS-Label können auf das Volume zugreifen. Wenn Sie eine strikte Isolierung benötigen, legen Sie für jeden Pod ein anderes MCS-Label fest.
securityContext: seLinuxOptions: # Provide a unique MCS label per container # You can specify user, role, and type also # enforcement based on type and level (svert) level: s0:c144:c154
In diesem Beispiel s0:c144:c154
entspricht dies einem MCS-Label, das einer Datei zugewiesen ist, auf die der Container zugreifen darf.
Auf EKS könnten Sie Richtlinien erstellen, die die Ausführung von privilegierten Containern ermöglichen, wie FluentD, und eine SELinux Richtlinie erstellen, die es ermöglicht, aus /var/log auf dem Host zu lesen, ohne das Hostverzeichnis neu benennen zu müssen. Pods mit derselben Bezeichnung können auf dieselben Host-Volumes zugreifen.
Wir haben ein Beispiel AMIs für Amazon EKS
Warnung
SELinux ignoriert Container, bei denen der Typ nicht begrenzt ist.
Tools und Ressourcen
-
SELinuxKubernetes RBAC- und Versandsicherheitsrichtlinien für lokale Anwendungen
-
Generate SELinux Policies for Containers with Udica
beschreibt ein Tool, das Container-Spezifikationsdateien für Linux-Funktionen, -Ports und Mount-Points untersucht und eine Reihe von SELinux Regeln generiert, die den ordnungsgemäßen Betrieb des Containers ermöglichen -
AMI Hardening-Playbooks
zum Härten des Betriebssystems zur Erfüllung verschiedener regulatorischer Anforderungen -
Keiko Upgrade Manager
ist ein Open-Source-Projekt von Intuit, das die Rotation von Worker-Knoten orchestriert.