Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La protección del plano de datos de Kubernetes ayuda a aplicar configuraciones seguras para cargas de trabajo que se ejecutan en el clúster, como restringir contenedores con privilegios, aplicar límites de recursos y limitar el acceso a la red.
En Defender for Cloud, se implementa el endurecimiento de planos de datos usando Azure Policy for Kubernetes para evaluar y hacer cumplir estas configuraciones. Microsoft Defender for Containers despliega automáticamente Azure Policy cuando activas el aprovisionamiento automático.
Si desactivas Azure Policy para Kubernetes en la configuración del plan de Defender for Containers, puedes desplegarla remediando la recomendación relevante. También puedes desplegar Azure Policy manualmente usando CLI de Azure para desplegar Defender para componentes de contenedores o Helm para desplegar Defender para componentes de contenedores si desactivas la provisión automática durante la habilitación o excluyes clústeres específicos de la provisión automática.
Después de desplegar Azure Policy para Kubernetes, Defender for Cloud genera recomendaciones de endurecimiento del plano de datos basadas en la configuración de tu clúster. Puedes revisar estas recomendaciones, configurar parámetros de política e aplicarlas en tus clústeres.
Prerequisites
Para empezar, asegúrate de que:
Añade las reglas FQDN/application requeridas para la política de Azure.
(Para clústeres que no sean AKS) Conecta tu clúster Kubernetes a Azure Arc.
Habilitación de Azure Policy para Kubernetes mediante la corrección de recomendaciones
Si no desplegaste Azure Policy para Kubernetes o la desactivaste en la configuración del plan de Defender for Containers, instálala remediando la recomendación que coincida con tu tipo de clúster en Defender for Cloud.
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender para la nube>Recommendations.
Busque la recomendación pertinente:
- Azure: los clústeres de Azure Kubernetes Service deberían tener instalado el complemento Azure Policy para Kubernetes
- GCP: Los clústeres GKE deberían tener instalada la extensión Azure Policy
- Kubernetes habilitado para Arc/AWS: Los clústeres de Kubernetes habilitados para Azure Arc deben tener instalada la extensión Azure Policy
Seleccione una recomendación.
En la pestaña Realizar acción , seleccione Corregir.
Seleccione Corregir para corregir los recursos seleccionados.
Repita para cada recomendación.
Recomendaciones de reforzamiento del plano de datos
Después de implementar Azure Policy para Kubernetes, Defender for Cloud evalúa la configuración del clúster y genera recomendaciones de protección del plano de datos. Este proceso puede tardar hasta 30 minutos.
Note
Componentes de Microsoft, como el sensor de Defender, se implementan en el kube-system namespace de forma predeterminada y no están marcados como no cumplidores. Es posible que los componentes de terceros instalados en otros espacios de nombres puedan señalizarse. Para excluir espacios de nombres específicos, configure exclusiones de directivas de Azure.
En la tabla siguiente se enumeran las recomendaciones comunes de endurecimiento del plano de datos.
| Nombre de la recomendación | Control de seguridad | Configuración requerida |
|---|---|---|
| Se deben aplicar los límites de CPU y memoria de los contenedores. | Protección de aplicaciones contra ataques DDoS | Yes |
| Las imágenes de contenedor solo deben implementarse desde registros de confianza | Corregir las vulnerabilidades | Yes |
| Deben aplicarse funcionalidades de Linux con privilegios mínimos para los contenedores | Administración de acceso y permisos | Yes |
| Los contenedores solo deben usar perfiles de AppArmor permitidos. | Corrección de configuraciones de seguridad | Yes |
| Los servicios solo deben escuchar en los puertos permitidos. | Restricción de los accesos de red no autorizados | Yes |
| El uso de puertos y redes de hosts debe estar restringido. | Restricción de los accesos de red no autorizados | Yes |
| El uso de montajes de volúmenes HostPath de pod debe estar restringido a una lista conocida | Administración de acceso y permisos | Yes |
| Se deberían evitar los contenedores con escalada de privilegios. | Administración de acceso y permisos | No |
| Deben evitarse los contenedores que comparten espacios de nombres de host confidenciales. | Administración de acceso y permisos | No |
| El sistema de archivos raíz inmutable (de solo lectura) debe aplicarse para los contenedores. | Administración de acceso y permisos | No |
| Los clústeres de Kubernetes solo deben ser accesibles mediante HTTPS | Cifrado de los datos en tránsito | No |
| Los clústeres de Kubernetes deben deshabilitar las credenciales de la API de montaje automático | Administración de acceso y permisos | No |
| Los clústeres de Kubernetes no deben usar el espacio de nombres predeterminado | Implementación de procedimientos recomendados de seguridad | No |
| Los clústeres de Kubernetes no deben conceder funcionalidades de CAP_SYS_ADMIN | Administración de acceso y permisos | No |
| Deben evitarse los contenedores con privilegios. | Administración de acceso y permisos | No |
| Se debe evitar ejecutar contenedores como usuario raíz. | Administración de acceso y permisos | No |
Visualización de recomendaciones para un clúster
Para ver las recomendaciones de endurecimiento del plano de datos para un clúster específico:
Inicie sesión en Azure Portal.
Vaya aInventario de >.
Establezca el filtro de tipo de recurso en El servicio Kubernetes y seleccione Aplicar.
Seleccione el clúster correspondiente.
Revise las recomendaciones disponibles. Las recomendaciones de fortalecimiento del plano de datos muestran el número de componentes de Kubernetes afectados.
Seleccione una recomendación para ver los recursos afectados.
Seleccione Tomar acción para revisar opciones de remediación.
Configuración de parámetros de directiva
Algunas recomendaciones incluyen parámetros que limitan los recursos de Kubernetes evaluados por la Azure Policy subyacente. Por ejemplo, la directiva para aplicar un sistema de archivos raíz inmutable (solo lectura) a los contenedores incluye los parámetros excludedContainers, excludedImages y excludedNamespaces.
Las exclusiones de contenedores se corresponden con los nombres de los contenedores. Las exclusiones de imagen soportan la coincidencia de prefijos cuando el valor termina en *, como myregistry.azurecr.io/istio:*. Utiliza un nombre de imagen totalmente cualificado para evitar excluir accidentalmente una imagen de un registro no confiable.
Otras recomendaciones requieren que la configuración de parámetros sea efectiva. Por ejemplo, la recomendación Las imágenes de contenedor deben ser implementadas solo desde registros de confianza requiere que defina una lista de registros de confianza.
Si los parámetros requeridos no están configurados, los recursos se muestran como no saludables.
Para configurar parámetros de directiva:
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender para la nube>Configuración del entorno.
Seleccione la suscripción correspondiente.
Seleccione Directivas de seguridad.
En la pestaña Estándares , seleccione el estándar de seguridad correspondiente.
Seleccione el menú de tres puntos de la asignación de políticas correspondiente y seleccione Gestionar efecto y parámetros.
Actualice los valores de parámetro necesarios.
Haga clic en Guardar.
Aplicar políticas de endurecimiento del plano de datos
De forma predeterminada, las directivas evalúan los recursos en modo auditoría. Para aplicar una directiva, establezca su efecto en Denegar.
Para aplicar una recomendación:
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender para la nube>Recommendations.
Busque y seleccione la recomendación de protección del plano de datos pertinente.
En la pestaña Realizar acción , seleccione Denegar.
Establezca el ámbito.
Seleccione Cambiar para denegar.
Aplicación de directivas de prueba
Puede validar las directivas de protección del plano de datos mediante la implementación de cargas de trabajo de prueba.
- Implementación compatible que cumple los requisitos de endurecimiento del plano de control de datos
- Una implementación no conforme que infringe varias directivas
Implemente los siguientes archivos YAML de ejemplo para comprobar que las cargas de trabajo compatibles se implementan correctamente y las cargas de trabajo no compatibles se marcan o bloquean, en función de la configuración de cumplimiento de directivas.
Ejemplo de implementación compatible
El siguiente despliegue utiliza un registro de contenedor confiable, aplica límites de CPU y memoria, y aplica un contexto de seguridad restrictivo que deshabilita la escalada de privilegios y se ejecuta como usuario no root.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-healthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
annotations:
container.apparmor.security.beta.kubernetes.io/redis: runtime/default
spec:
containers:
- name: redis
image: <customer-registry>.azurecr.io/redis:latest
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
memory: 250Mi
securityContext:
privileged: false
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
name: redis-healthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 80
targetPort: 80
Ejemplo de implementación no compatible
La siguiente implementación infringe intencionadamente varias políticas de endurecimiento del plano de datos, entre ellas ejecutar un contenedor privilegiado como root, habilitar la red del host y espacios de nombres compartidos, y montar un volumen hostPath.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-unhealthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 9001
hostPort: 9001
securityContext:
privileged: true
readOnlyRootFilesystem: false
allowPrivilegeEscalation: true
runAsUser: 0
capabilities:
add:
- NET_ADMIN
volumeMounts:
- mountPath: /test-pd
name: test-volume
readOnly: true
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /tmp
---
apiVersion: v1
kind: Service
metadata:
name: redis-unhealthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 6001
targetPort: 9001