Directivas de seguridad predeterminadas de pods
Este documento describe cómo RKE2 configura PodSecurityPolicies y NetworkPolicies para ser seguro por defecto, al mismo tiempo que proporciona a los operadores la máxima flexibilidad de configuración.
|
Puerta de Versión
Este documento se aplica a RKE2 v1.24 y versiones anteriores, por favor consulta la Documentación de estándares de seguridad del pod para la información de políticas predeterminadas para RKE2 v1.25 y versiones superiores. |
Directivas de seguridad de pods
RKE2 puede ejecutarse con o sin el parámetro de configuración profile: cis-1.6. Esto hará que aplique diferentes PodSecurityPolicies (PSPs) al inicio.
-
Si se ejecuta con el perfil
cis-1.6, RKE2 aplicará una directiva restrictiva llamadaglobal-restricted-pspa todos los espacios de nombres exceptokube-system. El espacio de nombreskube-systemnecesita una directiva menos restrictiva llamadasystem-unrestricted-psppara lanzar componentes críticos. -
Si se ejecuta sin el perfil
cis-1.6, RKE2 aplicará una directiva completamente no restringida llamadaglobal-unrestricted-psp, que es equivalente a ejecutar sin el controlador de admisión PSP habilitado.
RKE2 implementará estas directivas al inicio, pero no las modificará después de eso, a menos que sea explícitamente activado por el operador del clúster como se describe a continuación. Esto es para permitir que el operador controle completamente los PSPs sin que los valores predeterminados de RKE2 interfieran.
La creación y aplicación de los PSPs están controladas por la presencia o ausencia de ciertas anotaciones en el espacio de nombres kube-system. Estos se mapean directamente a los PSPs que se pueden crear y son:
-
psp.rke2.io/global-restricted -
psp.rke2.io/system-unrestricted -
psp.rke2.io/global-unrestricted
La siguiente lógica se realiza al inicio para las directivas y sus anotaciones:
-
Si la anotación existe, RKE2 continúa sin más acciones.
-
Si la anotación no existe, RKE2 verifica si la directiva asociada existe y, si es así, la elimina y la recrea, junto con la adición de la anotación al espacio de nombres.
-
En el caso de
global-unrestricted-psp, la directiva no se recrea. Esto es para tener en cuenta el movimiento entre modos CIS y no CIS sin hacer que el clúster sea menos seguro. -
Al crear una directiva, también se crean roles de clúster y enlaces de roles de clúster para garantizar que las directivas apropiadas se utilicen por defecto.
Así que, después del inicio inicial, los operadores pueden modificar o eliminar las directivas de RKE2 y RKE2 respetará esos cambios. Además, para "restablecer" una directiva, un operador solo necesita eliminar la anotación asociada del espacio de nombres kube-system y reiniciar RKE2.
Las directivas se describen a continuación, comenzando con el PSP global-restricted más restrictivo.
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: global-restricted-psp
spec:
privileged: false # CIS - 5.2.1
allowPrivilegeEscalation: false # CIS - 5.2.5
requiredDropCapabilities: # CIS - 5.2.7/8/9
- ALL
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
- 'persistentVolumeClaim'
hostNetwork: false # CIS - 5.2.4
hostIPC: false # CIS - 5.2.3
hostPID: false # CIS - 5.2.2
runAsUser:
rule: 'MustRunAsNonRoot' # CIS - 5.2.6
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
readOnlyRootFilesystem: false
Si RKE2 se inicia en modo no CIS, las anotaciones se verifican como se mencionó anteriormente; sin embargo, la aplicación resultante de las directivas de seguridad de pods es permisiva. Consulte a continuación.
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: global-unrestricted-psp
spec:
privileged: true
allowPrivilegeEscalation: true
allowedCapabilities:
- '*'
volumes:
- '*'
hostNetwork: true
hostPorts:
- min: 0
max: 65535
hostIPC: true
hostPID: true
runAsUser:
rule: 'RunAsAny'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule: 'RunAsAny'
En ambos casos, se aplica la "directiva del sistema sin restricciones". Consulte a continuación.
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: system-unrestricted-psp
spec:
privileged: true
allowPrivilegeEscalation: true
allowedCapabilities:
- '*'
volumes:
- '*'
hostNetwork: true
hostPorts:
- min: 0
max: 65535
hostIPC: true
hostPID: true
runAsUser:
rule: 'RunAsAny'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule: 'RunAsAny'
Para ver las directivas de seguridad de pods actualmente desplegadas en su sistema, ejecute el siguiente comando:
kubectl get psp -A
Directivas de Red
Cuando RKE2 se ejecuta con el parámetro profile: cis-1.6, aplicará 2 directivas de red a los espacios de nombres kube-system, kube-public y default y aplicará las anotaciones asociadas. La misma lógica se aplica a estas directivas y anotaciones como a los PSP. Al iniciar, se verifica la existencia de las anotaciones para cada espacio de nombres y, si existen, RKE2 no toma ninguna acción. Si la anotación no existe, RKE2 verifica si la directiva existe y, si es así, la recrea.
La primera directiva aplicada es restringir el tráfico de red solo al espacio de nombres en sí. Consulte a continuación.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
managedFields:
- apiVersion: networking.k8s.io/v1
fieldsType: FieldsV1
fieldsV1:
f:spec:
f:ingress: {}
f:policyTypes: {}
name: default-network-policy
namespace: default
spec:
ingress:
- from:
- podSelector: {}
podSelector: {}
policyTypes:
- Ingress
La segunda directiva aplicada es al espacio de nombres kube-system y permite el tráfico DNS. Consulte a continuación.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
managedFields:
- apiVersion: networking.k8s.io/v1
fieldsV1:
f:spec:
f:ingress: {}
f:podSelector:
f:matchLabels:
f:policyTypes: {}
name: default-network-dns-policy
namespace: kube-system
spec:
ingress:
- ports:
- port: 53
protocol: TCP
- port: 53
protocol: UDP
podSelector:
matchLabels:
policyTypes:
- Ingress
RKE2 aplica la directiva default-network-policy y la anotación np.rke2.io a todos los espacios de nombres integrados. El espacio de nombres kube-system además recibe la directiva default-network-dns-policy y la anotación np.rke2.io/dns aplicadas a él.
Para ver las directivas de red actualmente desplegadas en su sistema, ejecute el siguiente comando:
kubectl get networkpolicies -A