Proyectos Kubernetes
Un proyecto Kubernetes es un conjunto de imágenes Docker pertenecientes a un espacio de nombres en un clúster Kubernetes, todo ello visto como un único activo que agrega las vulnerabilidades de las imágenes que lo componen. Cada imagen se considera una tecnología del proyecto, lo que permite conocer las imágenes vulnerables sin centrarse en su contenido.
Creación de un proyecto Kubernetes
Los proyectos Kubernetes son un tipo de conexión en modo sin agente. Los datos a introducir dependen de cómo conectarse al clúster. Siempre es posible conectarse al clúster directamente a través de la API de Kubernetes, pero para facilitar la gestión de credenciales, Cyberwatch puede recuperar automáticamente desde Azure o AWS las configuraciones de Kubernetes.
Clúster Kubernetes
Para acceder directamente a un clúster Kubernetes, primero hay que crear un conjunto de credenciales registradas de tipo Kubernetes. Las credenciales creadas deben tener los siguientes permisos RBAC:
- apiGroups: [""]
resources: ["namespaces/status", "pods/status"]
verbs: ["list", "get"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["list"]
Consulte la documentación de Kubernetes Using RBAC Authorization para más información.
El clúster será seleccionable al crear el proyecto Kubernetes.
El campo Dirección del proyecto debe contener el nombre del espacio de nombres cuyas imágenes se van a listar, por ejemplo “mi namespace”. En el caso de que otros clústeres definan el mismo espacio de nombres, es posible anteponer un nombre arbitrario de clúster separado por una barra, por ejemplo “mi cluster/mi namespace”. El nombre de clúster añadido no tiene impacto en el resultado del escaneo.
Azure Kubernetes Service
Para configurar un clúster AKS, se requiere una clave de API de Azure. El proceso de añadir credenciales registradas de Azure es el mismo que para los descubrimientos Azure.
Para identificar un clúster AKS se necesitan 3 informaciones:
- el ID de la suscripción a la que está asociado
- el nombre de su grupo de recursos, si aplica
- el nombre del clúster
En la página de creación de la conexión en modo sin agente, seleccione el tipo proyecto Kubernetes y el conjunto de credenciales Azure para mostrar los campos específicos de Azure.
El nombre del clúster no tiene un campo propio y debe escribirse en la dirección, seguido de una barra y del nombre del espacio de nombres del proyecto, por ejemplo “mi cluster/mi namespace”.
Amazon Elastic Kubernetes Service
Para configurar un clúster EKS, se necesita una clave de API de AWS. Los pasos de configuración son los mismos que para los descubrimientos Amazon EC2.
Al crear la conexión en modo sin agente de tipo proyecto Kubernetes, el campo Dirección debe tener la forma “mi cluster/mi namespace” donde “mi cluster” designa el nombre del clúster en AWS y “mi namespace” designa el nombre del espacio de nombres en el clúster Kubernetes.
Además de la dirección, también es necesario indicar en el campo Región la zona geográfica del clúster. El Rol permite opcionalmente indicar un ARN sobre el cual realizar la operación AssumeRole, si es necesario.
Rancher
Para configurar un clúster Kubernetes gestionado por Rancher, se requiere una clave de API en forma de token Bearer. Los requisitos previos son los mismos que para los descubrimientos Rancher.
El campo Dirección debe tener la forma “mi cluster/mi namespace” donde “mi cluster” designa el ID del clúster gestionado por Rancher (no utilice el nombre del clúster) y “mi namespace” designa el nombre del espacio de nombres en el clúster Kubernetes.
Escaneo de imágenes
Para obtener información de vulnerabilidades, las imágenes de los proyectos Kubernetes deben ser escaneadas como imágenes Docker registradas de forma independiente.
Los proyectos Kubernetes informan sus imágenes por digest, que sirve de clave para encontrar las imágenes escaneadas. Estas deben contener un metadato IMAGE_DIGEST, declarado en la forma META:IMAGE_DIGEST|sha256:… en uno de sus análisis. El SHA-256 siendo el único criterio, la imagen encontrada puede ser un activo air gap o una imagen Docker, puede provenir de un registro espejo o incluso llevar un nombre diferente. Para mayor fiabilidad es preferible registrar las imágenes por digest en lugar de por tag.
Para tener en cuenta las nuevas imágenes Docker, el proyecto Kubernetes debe ser reanalizado.
Registro manual
Las imágenes faltantes de un proyecto Kubernetes pueden añadirse manualmente por digest desde el menú Gestión de activos > Imágenes Docker de la barra lateral, especificando en el campo Tag una versión de la forma sha256:50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c, por ejemplo.
Para facilitar el registro manual, también es posible abrir la pestaña Tecnologías de la página de detalles del proyecto Kubernetes y hacer clic en el icono de añadir a la derecha de cada imagen Docker ausente.
Registro automático
El enfoque más simple para escanear todas las imágenes Docker de un proyecto Kubernetes es registrarlas automáticamente mediante un descubrimiento Docker, y más precisamente un descubrimiento Kubernetes, AKS o EKS cuyo perímetro esté definido como Imágenes en ejecución.
En el caso de que las imágenes provengan de un registro Harbor, es posible configurar desde la administración, entre las herramientas externas, un escáner Harbor. Este enfoque tiene la ventaja de hacer escanear sin demora las nuevas imágenes Docker.
Descubrimiento de proyectos
Los descubrimientos Docker para Kubernetes, AKS y EKS proponen en Perímetro la opción Espacios de nombres. Esta opción tiene como efecto listar los espacios de nombres presentes en los pods en lugar de listar sus imágenes.
Los proyectos así descubiertos pueden añadirse manualmente como activos desde la lista de activos descubiertos usando la acción masiva Escanear con conexiones en modo sin agente, y luego seleccionando como tipo Proyecto Kubernetes.
El registro de nuevos proyectos Kubernetes puede automatizarse desde el formulario de edición del descubrimiento, activando el registro automático como conexiones en modo sin agente de tipo Proyecto Kubernetes.