Claridad de Kube es una herramienta para detectar y administrar la lista de materiales de software (SBOM), así como las vulnerabilidades del sistema de archivo y la imagen del contenedor
KubeClarity es una herramienta para detectar y administrar la lista de materiales de software (SBOM), así como las vulnerabilidades del sistema de archivo y la imagen del contenedor. Escanea clústeres de K8 en tiempo de ejecución y canalizaciones de CI/CD para mejorar la seguridad de la cadena de suministro de software.
Tabla de Contenidos
Desafíos de detección de vulnerabilidades y SBOM
- El escaneo de vulnerabilidades efectivo requiere una detección precisa de la lista de materiales de software (SBOM) de:
- Varios lenguajes de programación y gestores de paquetes.
- Varias distribuciones de SO
- La información de dependencia del paquete generalmente se elimina en el momento de la compilación
- ¿Cuál es el mejor analizador de escáner/SBOM?
- ¿Qué debemos escanear: repositorios Git, compilaciones, imágenes de contenedores o tiempos de ejecución?
- Cada escáner/analizador tiene su propio formato: ¿cómo comparar los resultados?
- ¿Cómo se gestionan los SBOM descubiertos y las vulnerabilidades?
- ¿Cómo se ve afectada mi aplicación por la vulnerabilidad recién descubierta?
solución
- Divida el análisis de vulnerabilidades en dos fases:
- Análisis de contenido para generar SBOM
- Escanee el SBOM en busca de vulnerabilidades
- Cree una infraestructura conectable para:
- Ejecute múltiples analizadores de contenido en paralelo
- Ejecute múltiples escáneres de vulnerabilidades en paralelo
- Escanee y combine resultados entre diferentes etapas de CI usando KubeClarity CLI
- Escaneo de Runtime K8s para detectar vulnerabilidades encontradas después de la implementación
- Agrupe los recursos escaneados (imágenes/directorios) en aplicaciones definidas para navegar por las dependencias del árbol de objetos (aplicaciones, recursos, paquetes, vulnerabilidades)
característica
- Panel
- Vulnerabilidades reparables por gravedad
- Los 5 elementos más vulnerables (aplicación, recurso, paquete)
- Nuevas tendencias de vulnerabilidad
- Número de paquetes por tipo de licencia
- Número de paquetes por lenguaje de programación
- Contador ordinario
- Campo de aplicación
- El tiempo de ejecución de K8 detecta automáticamente las aplicaciones
- Crear/editar/eliminar aplicaciones
- Para cada aplicación, navegue hasta la correspondiente:
- recursos (imágenes/directorios)
- combinación
- escapatoria
- licencia de uso de recursos
- Recursos de la aplicación (imágenes/directorio)
- Para cada recurso, navegue hasta el correspondiente:
- Campo de aplicación
- combinación
- escapatoria
- Para cada recurso, navegue hasta el correspondiente:
- combinación
- Para cada paquete, navegue hasta el correspondiente:
- Campo de aplicación
- Lista de recursos enlazables y analizador SBOM de detección
- escapatoria
- Para cada paquete, navegue hasta el correspondiente:
- escapatoria
- Para cada vulnerabilidad, navegue hasta la correspondiente:
- Campo de aplicación
- recurso
- Detectar lista de escáneres
- Para cada vulnerabilidad, navegue hasta la correspondiente:
- Escaneo en tiempo de ejecución de K8
- Escaneos bajo demanda o programados
- Detección automática del espacio de nombres de destino
- Escanea el progreso y la navegación de resultados para cada elemento afectado (aplicación, recurso, paquete, vulnerabilidad)
- Punto de referencia de Docker de CIS
- CLI (Integración Continua/Entrega Continua)
- Generación de SBOM utilizando múltiples analizadores de contenido integrados (Syft, cyclonedx-gomod)
- Escaneo de vulnerabilidades de SBOM/imagen/directorio con múltiples escáneres integrados (Grype, Dependency-track)
- Combinar SBOM y vulnerabilidades en diferentes fases de CI/CD
- Exportar resultados al backend de KubeClarity
- Interfaz de programación de aplicaciones
- La API de KubeClarity se puede encontrar en aquí
Generador de SBOM integrado y escáner de vulnerabilidades
KubeClarity Content Analyzer se integra con los siguientes generadores SBOM:
KubeClarity Vulnerability Scanner está integrado con los siguientes escáneres:
arquitectura
empezando
Back-end de KubeClarity
Instalar usando Helm:
- agregar repositorio de helm repositorio de helm agregar kubeclarity
- guarde el valor de gráfico predeterminado de KubeClarity helm display value kubeclarity/kubeclarity > value.yaml
- comprobar la configuración
values.yaml
Y actualice el valor deseado según sea necesario. Para habilitar y configurar generadores de SBOM compatibles y escáneres de vulnerabilidades, verifique las configuraciones de «Analizadores» y «Escáneres» en la sección «Escáneres de vulnerabilidades» en los valores de Helm. - Implemente KubeClarity con Helm helm install –values value.yaml –create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity o para instalaciones compatibles con OpenShift SCC restringido: helm install –values value.yaml –create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity –set global.openShiftRestricted=true \ –set kubeclarity-postgresql.securityContext.enabled=false –set kubeclarity-postgresql.containerSecurityContext.enabled=false \ –set kubeclarity-postgresql.volumePermissions.enabled=true – establezca los permisos de kubeclarity-postgresql.volume.securityContext. runAsUser=»auto» \ –set kubeclarity-postgresql.shmVolume.chmod.enabled=false
- Reenvío de puertos a la interfaz de usuario de KubeClarity: kubectl port-forward -n kubeclarity svc/kubeclarity-kubeclarity 9999:8080
- Abra la interfaz de usuario de KubeClarity en su navegador:
NOTE
KubeClarity requires these K8s permissions:
permitir | razón |
---|---|
Leer secretos en CREDS_SECRET_NAMESPACE (predeterminado: kubeclarity) | Esto le permite configurar un secreto de extracción de imágenes para escanear repositorios de imágenes privadas. |
Leer mapas de configuración en el espacio de nombres de implementación de KubeClarity. | Esto es necesario para obtener plantillas de configuración para trabajos de escáner. |
Enumere los pods en todo el clúster. | Esto es necesario para calcular los Pods de destino que deben escanearse. |
Listar espacios de nombres. | Esto es necesario para obtener el espacio de nombres de destino para escanear en la interfaz de usuario de escaneo en tiempo de ejecución de K8s. |
Cree y elimine trabajos en todo el clúster. | Esto es necesario para administrar trabajos que escanearán pods de destino en el espacio de nombres. |
Desinstalar usando Helm:
- Helm desinstalar helm desinstalar kubeclarity -n kubeclarity
- Limpieza de recursos De forma predeterminada, Helm no elimina los PVC y PV de StatefulSet. Elimínelos todos ejecutando: kubectl delete pvc -l app.kubernetes.io/instance=kubeclarity -n kubeclarity
Cree y ejecute localmente con datos de demostración
- Cree la interfaz de usuario y el backend e inicie el backend localmente (2 opciones):
- Usando la ventana acoplable:
- Cree la interfaz de usuario y el backend (establezca la etiqueta de la imagen con VERSION): VERSION=test make docker-backend
- Ejecute el backend con datos de demostración: docker run -p 8080:8080 -e FAKE_RUNTIME_SCANNER=true -e FAKE_DATA=true -e ENABLE_DB_INFO_LOGS=true -e DATABASE_DRIVER=LOCAL ghcr.io/openclarity/kubeclarity:test run
- Construir localmente:
- Crear interfaz de usuario y backend hacer ui && hacer backend
- Copie el sitio creado: cp -r ./ui/build ./site
- Ejecute el backend localmente con datos de demostración: FAKE_RUNTIME_SCANNER=true DATABASE_DRIVER=LOCAL FAKE_DATA=true ENABLE_DB_INFO_LOGS=true ./backend/bin/backend run
- Usando la ventana acoplable:
- Abra la interfaz de usuario de KubeClarity en su navegador:
interfaz de línea de comandos
KubeClarity incluye una CLI que se puede ejecutar localmente, especialmente útil para canalizaciones de CI/CD. Permite analizar imágenes y directorios para generar SBOM y escanearlo en busca de vulnerabilidades. Los resultados se pueden exportar al backend de KubeClarity.
Instalar
Compilación local de imágenes de Docker de distribución binaria
generación de SBOM
uso:
kubeclarity-cli analyze --input-type -o
ejemplo:
kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
(Opcional) La lista de analizadores de contenido a utilizar se puede configurar con ANALYZER_LIST
Las variables env están separadas por espacios (p. ej. ANALYZER_LIST="
)
ejemplo:
ANALYZER_LIST="syft gomod" kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
análisis de vulnerabilidades
uso:
kubeclarity-cli scan --input-type -f
ejemplo:
kubeclarity-cli scan nginx.sbom --input-type sbom
(Opcional) La lista de escáneres de vulnerabilidades a utilizar se puede configurar con el comando SCANNERS_LIST
Las variables env están separadas por espacios (p. ej. SCANNERS_LIST="
)
ejemplo:
SCANNERS_LIST="grype trivy" kubeclarity-cli scan nginx.sbom --input-type sbom
Exportar resultados al backend de KubeClarity
Para exportar los resultados de la CLI al backend de KubeClarity, se requiere el ID de aplicación definido por el backend de KubeClarity. El ID de la aplicación se puede encontrar en la pantalla «Aplicaciones» de la interfaz de usuario o mediante la API de KubeClarity.
Exportar SBOM
# The SBOM can be exported to KubeClarity backend by setting the BACKEND_HOST env variable and the -e flag.
# Note: Until TLS is supported, BACKEND_DISABLE_TLS=true should be set.
BACKEND_HOST= BACKEND_DISABLE_TLS=true kubeclarity-cli analyze --application-id -e -o
# For example:
BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli analyze nginx:latest --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e -o nginx.sbom
Exportar resultados de análisis de vulnerabilidades
# The vulnerability scan result can be exported to KubeClarity backend by setting the BACKEND_HOST env variable and the -e flag.
# Note: Until TLS is supported, BACKEND_DISABLE_TLS=true should be set.
BACKEND_HOST= BACKEND_DISABLE_TLS=true kubeclarity-cli scan --application-id -e
# For example:
SCANNERS_LIST="grype" BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli scan nginx.sbom --input-type sbom --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e
Configuración avanzada
Generar SBOM usando la imagen de la ventana acoplable local como entrada
# Local docker images can be analyzed using the LOCAL_IMAGE_SCAN env variable
# For example:
LOCAL_IMAGE_SCAN=true kubeclarity-cli analyze nginx:latest -o nginx.sbom
Escaneo de vulnerabilidad usando la imagen de la ventana acoplable local como entrada
# Local docker images can be scanned using the LOCAL_IMAGE_SCAN env variable
# For example:
LOCAL_IMAGE_SCAN=true kubeclarity-cli scan nginx.sbom
Soporte de registro privado para CLI
KubeClarity cli puede leer archivos de configuración que almacenan credenciales de registro privado.
Sección de registro de ejemplo de un archivo de configuración:
registry:
auths:
- authority:
username:
password:
- authority:
token:
Ejemplo de configuración de registro sin permisos: (estas credenciales se utilizarán para todos los registros en este caso)
registry:
auths:
- username:
password:
Especifique el archivo de configuración para la CLI
# The default config path is $HOME/.kubeclarity or it can be specified by `--config` command line flag.
# kubeclarity --config
# For example:
kubeclarity scan registry/nginx:private --config $HOME/own-kubeclarity-config
Soporte de registro privado para escaneo en tiempo de ejecución de K8s
Kubeclarity está en uso cadena k8s google/go-containerregistry se utiliza para autenticarse en el registro. Si k8schain no puede descubrir las credenciales de servicio necesarias, se pueden definir a través del secreto que se describe a continuación.
Además, establezca CREDS_SECRET_NAMESPACE en kubeclarity Deployment si las credenciales del servicio no están en el espacio de nombres «kubeclarity».al usar un casco cuadroCREDS_SECRET_NAMESPACE se establece en el espacio de nombres de versión donde está instalado kubeclarity.
Amazon ECR
Crear Usuario de IAM de AWS y AmazonEC2ContainerRegistryFullAccess
autoridad.
Uso de credenciales de usuario (AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
, AWS_DEFAULT_REGION
) para crear el siguiente secreto:
cat <
notas:
- El nombre secreto debe ser
ecr-sa
- La clave de datos secretos debe establecerse en
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
yAWS_DEFAULT_REGION
Google Gran China
Crear cuenta de servicio de Google y Artifact Registry Reader
permiso.
Use el archivo json de la cuenta de servicio para crear la siguiente clave
kubectl -n kubeclarity create secret generic --from-file=sa.json gcr-sa
notas:
- El nombre secreto debe ser
gcr-sa
sa.json
Debe ser el nombre del archivo json de la cuenta de servicio al generar el secreto- KubeClarity está usando Credenciales predeterminadas de la aplicación. Estos solo funcionan cuando se ejecuta KubeClarity desde GCP.
Combinar SBOM y vulnerabilidades en diferentes fases de CI/CD
# Additional SBOM will be merged into the final results when '--merge-sbom' is defined during analysis. The input SBOM can be CycloneDX XML or CyclonDX json format.
# For example:
ANALYZER_LIST="syft" kubeclarity-cli analyze nginx:latest -o nginx.sbom --merge-sbom inputsbom.xml
Salida de diferentes formatos SBOM
El comando de análisis kubeclarity-cli puede formatear el SBOM generado en un formato diferente si se requiere la integración con otro sistema. Los formatos admitidos son:
Formato | nombre de configuración |
---|---|
CycloneDX JSON (predeterminado) | cyclonedx-json |
CycloneDX XML | ciclonedx-xml |
SPDXJSON | spdx-json |
valor de la etiqueta SPDX | TV SPDX |
SyftJSON | syft-json |
advertir
KubeClarity maneja CycloneDX internamente, otros formatos son compatibles a través de la conversión. Debido a las incompatibilidades entre formatos, el proceso de conversión puede tener pérdidas, por lo que no todos los campos/información están comprometidos a aparecer en la salida resultante.
Para configurar kubeclarity-cli para usar un formato diferente al predeterminado, la variable de entorno ANALYZER_OUTPUT_FORMAT se puede usar con el nombre de configuración anterior:
ANALYZER_OUTPUT_FORMAT="spdx-json" kubeclarity-cli analyze nginx:latest -o nginx.sbom
Servidor de escáner remoto para CLI
Al ejecutar la CLI de kubeclarity para buscar vulnerabilidades, la CLI debe descargar la base de datos de vulnerabilidades relevante en la ubicación donde se ejecuta la CLI de kubeclarity. La ejecución de la CLI en una canalización de CI/CD dará como resultado una descarga de la base de datos en cada ejecución, lo que desperdiciará tiempo y ancho de banda. Por lo tanto, algunos escáneres admitidos tienen un modo remoto, en el que el servidor es responsable de la administración de la base de datos y, posiblemente, del escaneo de artefactos.
notas: Los ejemplos a continuación funcionan para cada escáner, pero se pueden ejecutar juntos como si estuvieran en modo no remoto.
curiosidades
Trivy Scanner admite el modo remoto utilizando un servidor Trivy. El servidor Trivy se puede implementar como se documenta aquí: Modelo cliente-servidor simple. Las instrucciones para instalar Trivy CLI están disponibles aquí: instalación trivial. El equipo de Aqua proporciona una imagen de contenedor oficial que se puede usar para ejecutar servidores en kubernetes/docker, que usaremos en nuestros ejemplos aquí.
Inicie el servidor:
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080
Para ejecutar un escaneo usando un servidor:
SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" ./kubeclarity_cli scan --input-type sbom nginx.sbom
El servidor trivy también proporciona autenticación basada en token para evitar el uso no autorizado de la instancia del servidor trivy. Puede habilitarlo ejecutando el servidor con indicadores adicionales:
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080 --token mytoken
y pasar el token al escáner:
SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" SCANNER_TRIVY_SERVER_TOKEN="mytoken" ./kubeclarity_cli scan --input-type sbom nginx.sbom
Uva
Grype admite el uso del modo remoto servidor-grype Un envoltorio RESTful grype que proporciona una API que toma un SBOM y devuelve los resultados del escaneo grype para ese SBOM. Grype-server se proporciona como una imagen de contenedor, por lo que se puede ejecutar de forma independiente en Kubernetes o a través de Docker.
Inicie el servidor:
docker run -p 9991:9991 --rm gcr.io/eticloud/k8sec/grype-server:v0.1.5
Para ejecutar un escaneo usando un servidor:
SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS=":9991" ./kubeclarity_cli scan --input-type sbom nginx.sbom
pista dependiente
Ver configuración de ejemplo aquí
limitación
- Compatibilidad con el manifiesto de imagen de Docker V2, esquema 2 (https://docs.docker.com/registry/spec/manifest-v2-2/). No podrá escanear versiones anteriores.
mapa de ruta
- Integración con Add-On Content Analyzer (Generador SBOM)
- Integrar con otros escáneres de vulnerabilidad
- CIS Docker Benchmark en la interfaz de usuario
- firma de imagen usando firma conjunta
- Uso de certificación y firma de metadatos de CI/CD firma conjunta y en general (Seguridad de la cadena de suministro)
- Configuración del sistema y gestión de usuarios
contribuir
Las solicitudes de extracción y los informes de errores son bienvenidos.
Para cambios más grandes, primero cree un problema en GitHub para analizar el cambio propuesto y el posible impacto.
Para obtener más detalles, consulte Pautas de contribución para este proyecto
licencia
por favor considera atención y apoyo Siempre estamos actualizados