Kubernetes SecurityContext(s)
Last updated
Last updated
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE) Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Lors de la spécification du contexte de sécurité d'un Pod, vous pouvez utiliser plusieurs attributs. D'un point de vue de sécurité défensive, vous devriez considérer :
Avoir runASNonRoot comme Vrai
Configurer runAsUser
Si possible, envisager de limiter les permissions en indiquant seLinuxOptions et seccompProfile
Ne PAS donner d'accès au groupe de privilèges via runAsGroup et supplementaryGroups
fsGroup entier | Un groupe supplémentaire spécial qui s'applique à tous les conteneurs d'un pod. Certains types de volumes permettent au Kubelet de changer la propriété de ce volume pour qu'il soit possédé par le pod : 1. Le GID propriétaire sera le FSGroup 2. Le bit setgid est défini (les nouveaux fichiers créés dans le volume seront possédés par FSGroup) 3. Les bits de permission sont OR'd avec rw-rw---- Si non défini, le Kubelet ne modifiera pas la propriété et les permissions de tout volume |
fsGroupChangePolicy chaîne | Cela définit le comportement de changement de propriété et de permission du volume avant d'être exposé à l'intérieur du Pod. |
runAsGroup entier | Le GID pour exécuter le point d'entrée du processus du conteneur. Utilise la valeur par défaut d'exécution si non défini. |
runAsNonRoot booléen | Indique que le conteneur doit s'exécuter en tant qu'utilisateur non-root. Si vrai, le Kubelet validera l'image à l'exécution pour s'assurer qu'elle ne s'exécute pas en tant que UID 0 (root) et échouera à démarrer le conteneur si c'est le cas. |
runAsUser entier | Le UID pour exécuter le point d'entrée du processus du conteneur. Par défaut, il s'agit de l'utilisateur spécifié dans les métadonnées de l'image si non spécifié. |
seLinuxOptions SELinuxOptions Plus d'infos sur seLinux | Le contexte SELinux à appliquer à tous les conteneurs. Si non spécifié, le runtime du conteneur allouera un contexte SELinux aléatoire pour chaque conteneur. |
seccompProfile SeccompProfile Plus d'infos sur Seccomp | Les options seccomp à utiliser par les conteneurs dans ce pod. |
supplementalGroups tableau d'entiers | Une liste de groupes appliqués au premier processus exécuté dans chaque conteneur, en plus du GID principal du conteneur. |
Les sysctls contiennent une liste de sysctls namespace utilisés pour le pod. Les pods avec des sysctls non pris en charge (par le runtime du conteneur) pourraient échouer à se lancer. | |
Les paramètres spécifiques à Windows appliqués à tous les conteneurs. Si non spécifié, les options dans le SecurityContext d'un conteneur seront utilisées. |
Ce contexte est défini à l'intérieur des définitions de conteneurs. D'un point de vue de sécurité défensive, vous devriez considérer :
allowPrivilegeEscalation à Faux
Ne pas ajouter de capabilités sensibles (et supprimer celles dont vous n'avez pas besoin)
privileged à Faux
Si possible, définir readOnlyFilesystem comme Vrai
Définir runAsNonRoot à Vrai et définir un runAsUser
Si possible, envisager de limiter les permissions en indiquant seLinuxOptions et seccompProfile
Ne PAS donner d'accès au groupe de privilèges via runAsGroup.
Notez que les attributs définis dans SecurityContext et PodSecurityContext, la valeur spécifiée dans SecurityContext prend précédence.
allowPrivilegeEscalation booléen | AllowPrivilegeEscalation contrôle si un processus peut obtenir plus de privilèges que son processus parent. Ce booléen contrôle directement si le drapeau no_new_privs sera défini sur le processus du conteneur. AllowPrivilegeEscalation est toujours vrai lorsque le conteneur est exécuté en tant que Privileged ou a CAP_SYS_ADMIN |
capabilities Capabilities Plus d'infos sur Capabilities | Les capabilités à ajouter/retirer lors de l'exécution des conteneurs. Par défaut, il s'agit de l'ensemble par défaut de capacités. |
privileged booléen | Exécuter le conteneur en mode privilégié. Les processus dans les conteneurs privilégiés sont essentiellement équivalents à root sur l'hôte. Par défaut, c'est faux. |
procMount chaîne | procMount désigne le type de montage proc à utiliser pour les conteneurs. La valeur par défaut est DefaultProcMount qui utilise les valeurs par défaut du runtime du conteneur pour les chemins en lecture seule et les chemins masqués. |
readOnlyRootFilesystem booléen | Indique si ce conteneur a un système de fichiers racine en lecture seule. La valeur par défaut est fausse. |
runAsGroup entier | Le GID pour exécuter le point d'entrée du processus du conteneur. Utilise la valeur par défaut d'exécution si non défini. |
runAsNonRoot booléen | Indique que le conteneur doit s'exécuter en tant qu'utilisateur non-root. Si vrai, le Kubelet validera l'image à l'exécution pour s'assurer qu'elle ne s'exécute pas en tant que UID 0 (root) et échouera à démarrer le conteneur si c'est le cas. |
runAsUser entier | Le UID pour exécuter le point d'entrée du processus du conteneur. Par défaut, il s'agit de l'utilisateur spécifié dans les métadonnées de l'image si non spécifié. |
seLinuxOptions SELinuxOptions Plus d'infos sur seLinux | Le contexte SELinux à appliquer au conteneur. Si non spécifié, le runtime du conteneur allouera un contexte SELinux aléatoire pour chaque conteneur. |
Les options seccomp à utiliser par ce conteneur. | |
Les paramètres spécifiques à Windows appliqués à tous les conteneurs. |
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE) Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)