Kubernetes SecurityContext(s)
PodSecurityContext
Bei der Festlegung des Sicherheitskontexts eines Pods können mehrere Attribute verwendet werden. Aus defensiver Sicherheitssicht sollten Sie in Betracht ziehen:
runASNonRoot als True zu haben
runAsUser konfigurieren
Wenn möglich, Berechtigungen durch Angabe von seLinuxOptions und seccompProfile einzuschränken
NICHT das Privilegien-Gruppen-Zugriff über runAsGroup und supplementaryGroups zu gewähren
fsGroup Ganze Zahl | Eine spezielle zusätzliche Gruppe, die auf alle Container in einem Pod angewendet wird. Einige Volumenarten ermöglichen es dem Kubelet, das Eigentum dieses Volumens zu ändern, sodass es im Besitz des Pods ist: 1. Die besitzende GID wird die FSGroup sein 2. Das Setgid-Bit ist gesetzt (neue Dateien, die im Volumen erstellt werden, gehören der FSGroup) 3. Die Berechtigungsbits werden mit rw-rw---- verknüpft. Wenn nicht festgelegt, ändert der Kubelet nicht das Eigentum und die Berechtigungen eines Volumens |
fsGroupChangePolicy Zeichenfolge | Dies definiert das Verhalten der Änderung des Eigentums und der Berechtigung des Volumens, bevor es im Pod freigegeben wird. |
runAsGroup Ganze Zahl | Die GID, unter der der Einstiegspunkt des Containerprozesses ausgeführt wird. Verwendet Standardwert zur Laufzeit, wenn nicht festgelegt. Kann auch im Sicherheitskontext festgelegt werden. |
runAsNonRoot Boolesch | Gibt an, dass der Container als Nicht-Root-Benutzer ausgeführt werden muss. Wenn true, wird der Kubelet das Bild zur Laufzeit validieren, um sicherzustellen, dass es nicht als UID 0 (root) ausgeführt wird, und den Container nicht starten, wenn dies der Fall ist. |
runAsUser Ganze Zahl | Die UID, unter der der Einstiegspunkt des Containerprozesses ausgeführt wird. Standardmäßig wird der im Bildmetadaten angegebene Benutzer verwendet, wenn nicht angegeben. |
seLinuxOptions SELinuxOptions Weitere Informationen zu seLinux | Der SELinux-Kontext, der auf alle Container angewendet werden soll. Wenn nicht festgelegt, wird der Container-Runtime für jeden Container einen zufälligen SELinux-Kontext zuweisen. |
seccompProfile SeccompProfile Weitere Informationen zu Seccomp | Die Seccomp-Optionen, die von den Containern in diesem Pod verwendet werden sollen. |
supplementalGroups Ganze Zahl-Array | Eine Liste von Gruppen, die auf den ersten Prozess angewendet werden, der in jedem Container ausgeführt wird, zusätzlich zur primären GID des Containers. |
Sysctls enthalten eine Liste von namespaced sysctls, die für den Pod verwendet werden. Pods mit nicht unterstützten sysctls (durch den Container-Runtime) können möglicherweise nicht gestartet werden. | |
Die für alle Container angewendeten Windows-spezifischen Einstellungen. Wenn nicht festgelegt, werden die Optionen innerhalb des Sicherheitskontexts eines Containers verwendet. | |
## SecurityContext |
Dieser Kontext wird innerhalb der Containerdefinitionen festgelegt. Aus einer defensiven Sicherheitsperspektive sollten Sie Folgendes beachten:
allowPrivilegeEscalation auf False setzen
Fügen Sie keine sensiblen Fähigkeiten hinzu (und entfernen Sie diejenigen, die Sie nicht benötigen)
privileged auf False setzen
Wenn möglich, setzen Sie readOnlyFilesystem auf True
Setzen Sie runAsNonRoot auf True und legen Sie einen runAsUser fest
Wenn möglich, erwägen Sie, Berechtigungen durch Angabe von seLinuxOptions und seccompProfile zu beschränken
Geben Sie KEINEN Privilegien-Gruppenzugriff über runAsGroup.
Beachten Sie, dass die Attribute sowohl im SecurityContext als auch im PodSecurityContext festgelegt sind, wobei der im SecurityContext angegebene Wert Vorrang hat.
allowPrivilegeEscalation boolean | AllowPrivilegeEscalation steuert, ob ein Prozess mehr Berechtigungen erlangen kann als sein übergeordneter Prozess. Dieses bool steuert direkt, ob das no_new_privs-Flag für den Containerprozess gesetzt wird. AllowPrivilegeEscalation ist immer dann true, wenn der Container als Privileged ausgeführt wird oder CAP_SYS_ADMIN hat. |
capabilities Fähigkeiten Weitere Informationen zu Fähigkeiten | Die Fähigkeiten, die hinzugefügt/entfernt werden sollen, wenn Container ausgeführt werden. Standardmäßig auf den Standardfähigkeitssatz festgelegt. |
privileged boolean | Container im privilegierten Modus ausführen. Prozesse in privilegierten Containern sind im Wesentlichen äquivalent zu root auf dem Host. Standardmäßig auf false festgelegt. |
procMount string | procMount gibt den Typ des proc-Mounts an, der für die Container verwendet werden soll. Standardmäßig wird DefaultProcMount verwendet, das die Standardwerte des Container-Runtimes für schreibgeschützte Pfade und maskierte Pfade verwendet. |
readOnlyRootFilesystem boolean | Ob dieses Container ein schreibgeschütztes Stammdateisystem hat. Standardmäßig ist dies false. |
runAsGroup integer | Die GID, unter der der Einstiegspunkt des Containerprozesses ausgeführt werden soll. Verwendet Standardwert zur Laufzeit, wenn nicht festgelegt. |
runAsNonRoot boolean | Gibt an, dass der Container als Nicht-Root-Benutzer ausgeführt werden muss. Wenn true, wird der Kubelet das Bild zur Laufzeit validieren, um sicherzustellen, dass es nicht als UID 0 (root) ausgeführt wird, und den Containerstart fehlschlagen lassen, wenn dies der Fall ist. |
runAsUser integer | Die UID, unter der der Einstiegspunkt des Containerprozesses ausgeführt werden soll. Standardmäßig wird der im Bildmetadaten angegebene Benutzer verwendet, wenn nicht festgelegt. |
seLinuxOptions SELinuxOptions Weitere Informationen zu seLinux | Der SELinux-Kontext, der auf den Container angewendet werden soll. Wenn nicht festgelegt, wird der Container-Runtime für jeden Container einen zufälligen SELinux-Kontext zuweisen. |
Die seccomp-Optionen, die von diesem Container verwendet werden sollen. | |
Die auf alle Container angewendeten spezifischen Windows-Einstellungen. |
Referenzen
Last updated