|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
|
Esta es documentación inédita para Admission Controller 1.34-dev. |
SUSE Security Admission Controller arquitectura
SUSE Security Admission Controller es un motor de directivas de Kubernetes. Utiliza directivas escritas en un lenguaje de programación de tu elección. Este lenguaje debe generar un binario de WebAssembly para que SUSE Security Admission Controller lo utilice.
¿Qué es una directiva?
Una directiva es un artefacto de la Iniciativa de Contenedores Abiertos (OCI). Contiene un módulo de WebAssembly, el código de la directiva y los metadatos requeridos por PolicyServer para realizar validaciones y mutaciones de solicitudes de admisión.
|
Al igual que Kubernetes, SUSE Security Admission Controller utiliza los términos 'PolicyServer' al hablar del SUSE Security Admission Controller servidor de políticas y |
Principios de diseño
Haciendo uso de las características fundamentales de Kubernetes
El equipo diseñó SUSE Security Admission Controller para utilizar características fundamentales de Kubernetes, sin reinventar la rueda. El proyecto utiliza una combinación de:
-
Kubernetes Controllers
-
Definiciones de Recursos Personalizados (CRDs)
-
Webhooks (Validación y Mutación)
-
el sistema de notificación de eventos del Plano de Control
Hace un uso efectivo de la arquitectura de Kubernetes
SUSE Security Admission Controller opera sin problemas dentro del ecosistema de Kubernetes. En su kernel, el SUSE Security Admission Controller controlador es un controlador de Kubernetes, monitorizando las SUSE Security Admission Controller Definiciones de Recursos Personalizados (CRDs) y configurando recursos de Kubernetes para ejecutarlos. Esta integración asegura que SUSE Security Admission Controller utiliza los mecanismos integrados de Kubernetes, como controladores y CRDs, para observar, gestionar y aplicar directivas de seguridad de manera eficiente.
Definición extensible de directivas.
SUSE Security Admission Controller emplea CRDs para definir y gestionar recursos de SUSE Security Admission Controller, que especifican las reglas para las validaciones de solicitudes de admisión. Este diseño permite a los usuarios extender las capacidades de Kubernetes con controles de admisión personalizados, asegurando que la aplicación de directivas de seguridad y cumplimiento sea consistente en todo el clúster.
Control de admisión directo
Cuando es configurado por el controlador SUSE Security Admission Controller, el servicio policy-server recibe solicitudes de admisión directamente del plano de control de Kubernetes, utilizando ValidationWebhooks y MutatingWebhooks. Esta interacción directa agiliza el proceso de control de admisión, reduciendo la latencia y aumentando la eficiencia en la aplicación de políticas.
WebAssembly ofrece un entorno de ejecución aislado, asegurando que las políticas se ejecuten en aislamiento, mejorando así la seguridad y estabilidad del mecanismo de aplicación de políticas. Este aislamiento previene que las políticas interfieran entre sí o con el sistema anfitrión, mitigando el riesgo de ejecución de código malicioso. WebAssembly es portátil y eficiente, permitiendo que las políticas se ejecuten en diferentes entornos sin modificación. Esta compatibilidad multiplataforma asegura que las políticas de SUSE Security Admission Controller sean versátiles, por lo que puedes distribuirlas y ejecutarlas en diversos clústeres de Kubernetes.
Artefactos de políticas basados en OCI
Las políticas en SUSE Security Admission Controller son artefactos OCI (Open Container Initiative). Esta estandarización facilita la distribución y el versionado de directivas. Las directivas contienen tanto los módulos de WebAssembly para la lógica de cumplimiento, como los metadatos necesarios para el funcionamiento del PolicyServer. El uso de artefactos OCI promueve la interoperabilidad y la facilidad de gestión dentro de los ecosistemas en la nube.
Aplicación de directivas de forma granular
SUSE Security Admission Controller asocia directivas con su propio webhook de 'validación' o 'mutación', permitiendo una aplicación de controles de admisión de forma granular. Esta flexibilidad permite a los administradores adaptar la aplicación de directivas según necesidades específicas, mejorando la seguridad y el cumplimiento del clúster de Kubernetes.
La pila SUSE Security Admission Controller
SUSE Security Admission Controller consiste en estos componentes:
-
SUSE Security Admission Controller Los Recursos Personalizados son Recursos Personalizados de Kubernetes que simplifican el proceso de gestión de directivas.
SUSE Security Admission Controller se integra con Kubernetes utilizando Control de Admisión Dinámico. En particular, SUSE Security Admission Controller opera como un Webhook de Admisión de Kubernetes. El
policy-serveres el punto final del Webhook llamado por el servidor API de Kubernetes para validar solicitudes. -
El SUSE Security Admission Controller controlador es un controlador de Kubernetes que reconcilia los Recursos Personalizados de SUSE Security Admission Controller. Este controlador crea partes de la pila SUSE Security Admission Controller. También traduce la configuración de SUSE Security Admission Controller en directivas de Kubernetes.
El
kubewarden-controllerregistra los objetos necesariosMutatingWebhookConfigurationoValidatingWebhookConfigurationcon el servidor API de Kubernetes. -
SUSE Security Admission Controller directivas son módulos de WebAssembly que contienen la lógica de validación o mutación. Los módulos de WebAssembly tienen documentación detallada en las secciones escribiendo directivas.
-
El Servidor de Directivas recibe solicitudes de validación. Valida las solicitudes ejecutando las directivas de SUSE Security Admission Controller.
-
El escáner de auditoría inspecciona los recursos ya en el clúster. Identifica aquellos que violan las directivas de SUSE Security Admission Controller.
Escáner de auditoría verifica constantemente los recursos declarados en el clúster, señalando aquellos que ya no se adhieren a las directivas SUSE Security Admission Controller desplegadas.
%%{ init: { "flowchart": { "htmlLabels": false, } } }%% graph LR accTitle: Admission Controller architecture accDescr: A diagram showing the architecture of Admission Controller components. subgraph " " direction LR subgraph " " direction LR k8s(("Kubernetes")) registry[("OCI registry")] end subgraph kw["`**Admission Controller**`"] controller("`**Controller**`") subgraph policy-server["`**policy-server**`"] direction LR kw-policy-1{{"Policy 1"}} kw-policy-2{{"Policy 2"}} kw-policy-3{{"Policy 3"}} end webhooks(["ValidationWebhooks and\nMutatingWebhooks"]) audit-scanner["KW audit scanner"] end end policy-server -->|"downloads\npolicies from"| registry controller -->|"watches for\nevents"| k8s controller -->|"creates"| webhooks controller -->|"creates\npolicy-server\ninstances"| policy-server k8s -. "sends admission\nrequests using" .-> webhooks webhooks -. "sent admission\nrequests from K8s" .-> policy-server audit-scanner -->|"sends audit\nadmission requests"| policy-serverFigure 1. Arquitectura
El viaje de una directiva de SUSE Security Admission Controller.
PolicyServer por defecto
En un nuevo clúster, los SUSE Security Admission Controller componentes definidos son:
-
Definiciones de recursos personalizadas (CRD)
-
El
kubewarden-controllerAmpliación -
Un Recurso Personalizado de PolicyServer llamado
default.
Cuando el kubewarden-controller detecta el recurso PolicyServer predeterminado, crea una ampliación de policy-server del componente PolicyServer.
SUSE Security Admission Controller funciona como un Webhook de Admisión de Kubernetes. Kubernetes especifica el uso de Seguridad de la capa de transporte (TLS) para asegurar todos los puntos finales del Webhook. El kubewarden-controller establece esta comunicación segura mediante:
-
Generación de una Autoridad de Certificación autofirmada
-
Utiliza esta CA para generar una clave de certificado TLS para el
policy-serverServicio.
Estos objetos se almacenan como Secret recursos en Kubernetes.
Finalmente, kubewarden-controller crea la ampliación policy-server y un Servicio ClusterIP de Kubernetes para exponerlo dentro de la red del clúster.
Definiendo la primera directiva.
|
Una directiva debe definir en qué |
El kubewarden-controller detecta el nuevo recurso ClusterAdmissionPolicy y así encuentra el policy-server vinculado y lo reconcilia.
Reconciliación de un policy-server
Al crear, modificar o eliminar un ClusterAdmissionPolicy o AdmissionPolicy, se activa un bucle de reconciliación en kubewarden-controller, para el policy-server que posee la política. Este bucle de reconciliación crea un ConfigMap con todas las políticas vinculadas al policy-server. Luego comienza la ampliación del policy-server. Esto resulta en el inicio de la nueva instancia de policy-server con la configuración actualizada.
Al iniciar, el policy-server lee su configuración del ConfigMap y descarga todas las SUSE Security Admission Controller políticas especificadas. Puedes descargar SUSE Security Admission Controller directivas de servidores HTTP remotos y registros de contenedores.
Utilizas parámetros de configuración de directivas para ajustar el comportamiento de las directivas. Después del inicio y la descarga de directivas, el policy-server verifica que los parámetros de configuración de directivas proporcionados por el usuario sean válidos.
El policy-server valida los parámetros de configuración de directivas invocando la función validate_setting expuesta por cada directiva. Hay más documentación en la sección referencia de especificación de la documentación.
Si alguna directiva recibe parámetros de configuración incorrectos, de la especificación de directivas del usuario, entonces cualquier solicitud de admisión evaluada por esa directiva devuelve un error.
Cuando el SUSE Security Admission Controller ha configurado todas las directivas, el policy-server genera un grupo de hilos de trabajo para evaluar las solicitudes entrantes utilizando las directivas SUSE Security Admission Controller especificadas por el usuario.
Finalmente, el policy-server inicia un servidor HTTPS, escuchando las solicitudes de validación entrantes. El SUSE Security Admission Controller utiliza la clave y el certificado TLS creados por el controlador SUSE Security Admission Controller para asegurar el servidor web.
El servidor web expone cada directiva a través de una vía dedicada siguiendo la convención de nomenclatura: /validate/<policy ID>.
Haciendo que Kubernetes sea consciente de la directiva
Todas las instancias de policy-server tienen un sondeo de disponibilidad, que kubewarden-controller+ utiliza para comprobar cuándo la ampliación PolicyServer está lista para evaluar un AdmissionReview.
Una vez que el SUSE Security Admission Controller marca la ampliación policy-server como 'alcanzable de manera única' o Ready, el kubewarden-controller hace que el servidor API de Kubernetes sea consciente de la nueva directiva. Esto se realiza creando un objeto MutatingWebhookConfiguration o un objeto ValidatingWebhookConfiguration. En este contexto, 'alcanzable de manera única' significa que todas las instancias de PolicyServer en el clúster tienen la última configuración de directiva instalada. La distinción es un punto sutil, pero es necesaria, debido a cómo funciona el despliegue de PolicyServers.
Es posible tener la misma directiva en diferentes PolicyServers con diferentes configuraciones.
Cada directiva tiene un MutatingWebhookConfiguration o ValidatingWebhookConfiguration dedicado que apunta al punto final de Webhook servido por policy-server. El punto final es accesible en la URL /validate/<policy ID>.
Directiva en acción
Ahora que toda la infraestructura necesaria está completa, Kubernetes comienza a enviar solicitudes de Revisión de Admisión a los puntos finales policy-server correctos.
Un policy-server recibe el objeto de Solicitud de Admisión y, basándose en el punto final que recibió la solicitud, utiliza la directiva correcta para evaluarla.
SUSE Security Admission Controller evalúa cada directiva dentro de su propia sandbox de WebAssembly dedicada. La comunicación entre una instancia de policy-server (el "anfitrión") y la directiva de WebAssembly (el "invitado") utiliza el protocolo de comunicación waPC. La descripción del protocolo es parte de la documentación de escribir directivas.
Las directivas también pueden utilizar las interfaces proporcionadas por el Sistema de Interfaz de WebAssembly (WASI).
Cómo SUSE Security Admission Controller maneja muchos PolicyServer y directivas.
Un clúster puede tener muchos PolicyServers y directivas SUSE Security Admission Controller definidas. Hay beneficios en tener muchos PolicyServers:
-
Puedes aislar espacios de nombres o inquilinos ruidosos, o aquellos que generan muchas evaluaciones de directivas, del resto del clúster para no afectar negativamente a otras operaciones del clúster.
-
Puedes ejecutar directivas críticas para la misión en un grupo de PolicyServer dedicado, haciendo que tu infraestructura sea más resistente.
Un recurso PolicyServer define cada policy-server y un recurso ClusterAdmissionPolicy o AdmissionPolicy define cada directiva.
Un ClusterAdmissionPolicy y un AdmissionPolicy se vinculan a un policy-server.
Cualquier ClusterAdmissionPolicy que no especifique un policy-server se vincula al PolicyServer predeterminado. Si un ClusterAdmissionPolicy hace referencia a un policy-server que no existe, su estado es unschedulable.
Cada policy-server define muchos puntos finales de validación, uno para cada directiva definida en su archivo de configuración. Puedes cargar la misma directiva muchas veces, con diferentes parámetros de configuración.
Los recursos ValidatingWebhookConfiguration y MutatingWebhookConfiguration hacen que el servidor de API de Kubernetes sea consciente de estas directivas. Luego, kubewarden-controller mantiene el servidor de API y los recursos de configuración en sincronización.
El servidor de API de Kubernetes envía las solicitudes de admisión entrantes al punto de validación correcto expuesto por policy-server.