Protección del endurecimiento de los planos de datos de Kubernetes
En esta página se describe el uso del conjunto de recomendaciones de seguridad de Microsoft Defender for Cloud dedicadas al endurecimiento de planos de datos de Kubernetes.
Sugerencia
Para obtener una lista de todas las recomendaciones de seguridad que pueden aparecer para los clústeres y nodos de Kubernetes, consulte las recomendaciones del contenedor.
Configuración de la protección de cargas de trabajo
Microsoft Defender for Cloud incluye un conjunto de recomendaciones que están disponibles cuando ha instalado Azure Policy para Kubernetes.
Requisitos previos
- Agregue Reglas de aplicación o FQDN obligatorias para Azure Policy.
- (Para clústeres que no son de AKS) Conecte un clúster de Kubernetes existente a Azure Arc.
Habilitación del endurecimiento de planos de datos de Kubernetes
Es posible habilitar Azure Policy para Kubernetes de dos maneras:
- Habilitar para todos los clústeres actuales y futuros mediante la configuración del plan o conector
- Implementación de Azure Policy para Kubernetes en clústeres existentes
Habilitar Azure Policy para Kubernetes en todos los clústeres actuales y futuros mediante la configuración del plan o conector
Nota:
Al habilitar esta configuración, el Azure Policy para los pods de Kubernetes se instalan en el clúster. Al hacerlo, se asignará una pequeña cantidad de CPU y de memoria para uso de los pods. Esta asignación puede alcanzar la capacidad máxima, pero no afecta al resto de la CPU o a la memoria del recurso.
Nota
No se admite la habilitación para AWS a través del conector debido a una limitación en EKS que requiere que el administrador del clúster agregue permisos para un nuevo rol de IAM en el propio clúster.
Habilitación de suscripciones de Azure o locales
Al habilitar Microsoft Defender para contenedores, el ajuste "Azure Policy para Kubernetes" estará habilitado de manera predeterminada para Azure Kubernetes Service y para los clústeres de Kubernetes habilitados para Azure Arc en la suscripción correspondiente. Si deshabilita este ajuste en la configuración inicial, podrá habilitarlo después manualmente.
Si deshabilitó la configuración de "Azure Policy para Kubernetes" en el plan de contenedores, puede seguir los pasos siguientes para habilitarla en todos los clústeres de la suscripción:
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender for Cloud>Configuración del entorno.
Seleccione la suscripción correspondiente.
En la página Planes de Defender, asegúrese de que el estado de los contenedores es Activado.
Haga clic en Configuración.
En la página Configuración y supervisión, cambie la opción "Azure Policy para Kubernetes" a Activado.
Habilitación de proyectos de GCP
Al habilitar Microsoft Defender para contenedores en un conector de GCP, la opción "Extensión de Azure Policy para Azure Arc" estará habilitada de forma predeterminada para el motor de Kubernetes de Google en el proyecto correspondiente. Si deshabilita este ajuste en la configuración inicial, podrá habilitarlo después manualmente.
Si deshabilitó la opción "Extensión de Azure Policy para Azure Arc" en el conector de GCP, puede seguir los pasos siguientes para habilitarlo en el conector de GCP.
Implementación de Azure Policy para Kubernetes en clústeres existentes
Puede configurar manualmente el Azure Policy para Kubernetes en clústeres de Kubernetes existentes a través de la página Recomendaciones. Una vez habilitadas, las recomendaciones de protección estarán disponibles (algunas de las recomendaciones requieren otra configuración para funcionar).
Nota:
Para AWS, no es posible realizar la incorporación a gran escala mediante el conector, pero se puede instalar en todos los clústeres o en clústeres específicos a través de la recomendación Los clústeres de Kubernetes habilitados para Azure Arc deben tener instalada la extensión de Azure Policy para Kubernetes.
Para implementar Azure Policy para Kubernetes en clústeres especificados:
En la página de recomendaciones, busque la recomendación pertinente:
Azure -
"Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
GCP -
"GKE clusters should have the Azure Policy extension"
.AWS y local -
"Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed"
.Sugerencia
La recomendación se incluye en controles de seguridad diferentes y no importa cuál seleccione en el siguiente paso.
En cualquiera de los controles de seguridad, seleccione la recomendación para ver los recursos en los que puede instalar el complemento.
Seleccione el clúster correspondiente y, luego, Corregir.
Vista y configuración del conjunto de recomendaciones
Aproximadamente 30 minutos después de completarse la instalación del Azure Policy para Kubernetes, Defender for Cloud muestra el estado de mantenimiento de los clústeres de las siguientes recomendaciones, cada uno en el control de seguridad pertinente como se muestra a continuación:
Nota:
Si va a instalar Azure Policy para Kubernetes por primera vez, estas recomendaciones aparecerán como nuevas adiciones en la lista de recomendaciones.
Sugerencia
Algunas recomendaciones tienen parámetros que deben personalizarse a través de Azure Policy para usarlos de forma eficaz. Por ejemplo, para beneficiarse de la recomendación Las imágenes de contenedor solo deben implementarse desde registros de confianza, tendrá que definir sus registros de confianza. Si no especifica los parámetros necesarios para las recomendaciones que requieren configuración, las cargas de trabajo aparecerán como incorrectas.
Nota:
Los componentes de Microsoft, como el sensor de Defender y el agente de Azure Monitor (AMA) se implementan en el espacio de nombres kube-system de manera predeterminada. Esta configuración garantiza que no están marcadas como no compatibles en las recomendaciones del plano de datos. Sin embargo, las herramientas de proveedor de terceros instaladas en un espacio de nombres diferente se pueden marcar como no compatibles. Para excluir proveedores de terceros de estas recomendaciones, puede agregar su espacio de nombres a la lista de exclusión.
Nombre de la recomendación | Control de seguridad | Configuración requerida |
---|---|---|
Debe aplicar los límites de CPU y memoria de los contenedores. | Protección de aplicaciones contra ataques DDoS | Sí |
Las imágenes de contenedor solo deben implementarse desde registros de confianza. | Corrección de vulnerabilidades | Sí |
Deben aplicarse funcionalidades de Linux con privilegios mínimos para los contenedores | Administración de acceso y permisos | Sí |
Los contenedores solo deben usar perfiles de AppArmor permitidos. | Corrección de configuraciones de seguridad | Sí |
Los servicios solo deben escuchar en los puertos permitidos. | Restricción de los accesos de red no autorizados | Sí |
El uso de puertos y redes de hosts debe estar restringido. | Restricción de los accesos de red no autorizados | Sí |
El uso de montajes de volúmenes HostPath de pod debe estar restringido a una lista conocida. | Administración de acceso y permisos | Sí |
Debe evitar los contenedores con elevación 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 otorgar funcionalidades de seguridad CAPSYSADMIN | Administración de acceso y permisos | No |
Deben evitarse los contenedores con privilegios. | Administración de acceso y permisos | No |
Debe evitar la ejecución de contenedores como usuario raíz. | Administración de acceso y permisos | No |
Para las recomendaciones con parámetros que deben personalizarse, es necesario establecer los parámetros:
Para establecer los parámetros:
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender for Cloud>Configuración del entorno.
Seleccione la suscripción correspondiente.
En el menú de Defender for Cloud, seleccione Directiva de seguridad.
Seleccione la asignación pertinente. La asignación predeterminada es
ASC default
.Abra la pestaña Parámetros y modifique los valores según sea necesario.
Seleccione Revisar y guardar.
Seleccione Guardar.
Para aplicar cualquiera de las recomendaciones:
abra la página de detalles de recomendaciones y haga clic en Denegar:
Se abre el panel para establecer el ámbito.
Establezca el ámbito y seleccione Cambiar a denegar.
Para ver qué recomendaciones se aplican a los clústeres:
Abra la página Inventario de recursos de Defender for Cloud y establezca el filtro de tipo de recurso en Servicios de Kubernetes.
Seleccione un clúster para investigar y revise las recomendaciones disponibles para este.
Cuando vea una recomendación de la protección de cargas de trabajo establecida, se mostrará el número de pods afectados ("componentes de Kubernetes") mostrados junto con el clúster. Para ver una lista de los pods específicos, seleccione el clúster y, a continuación, seleccione Realizar acción.
Para probar la aplicación, use las dos implementaciones de Kubernetes siguientes:
Una es para una implementación correcta, compatible con el conjunto de recomendaciones de protección de cargas de trabajo.
La otra es para una implementación incorrecta, no compatible con cualquiera de las recomendaciones.
Implemente los archivos .yaml de ejemplo tal cual o úselos como referencia para corregir su propia carga de trabajo.
Archivo .yaml de ejemplo de implementación correcta
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
Archivo .yaml de ejemplo de implementación incorrecta
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
Pasos siguientes
En este artículo, ha aprendido a configurar el endurecimiento de planos de datos de Kubernetes.
Para obtener material relacionado, vea las páginas siguientes: